From 4bbc03332b3994761de476f3bf2851a636967e2f Mon Sep 17 00:00:00 2001 From: aramis_acg Date: Thu, 5 Mar 2009 22:32:13 +0000 Subject: [PATCH] General - Added format auto-detection to most loaders - Simplified BaseImporter::CanRead() with some utility methods - improved fast_atof -> no overruns anymore. Fuck you, irrlicht. - added assimp_cmd tool to allow command line model processing. Mainly adebugging tool for internal purposes, but others might find it useful, too. - vc8/vc9: revision number is now written to DLL version header - mkutil: some batch scripts to simplify tagging & building of release versions - some API cleanup - fixing some doxygen markup (+now explicit use of @file ) - Icon for assimp_view and assimp_cmd 3DS - Normal vectors are not anymore inverted in some cases - Improved pivot handling - Improved handling of x-flipped meshes Collada - fixed a minor bug (visual_scene element) LWS - WIP implementation. No animations yet, some bugs and crashes. - Animation system remains disabled, WIP code - many test files for LWS, but most of them test the anim support, which is, read above, currently disabled. STL - fixing a log warning which appears for every model - added binary&ascii test spider, exported from truespace MD3 - Cleaning up output tags for automatically joined player models. IRR - Fixing coordinate system issues. - Instance handling improved. - Some of the reported crashes not yet fixed. PretransformVertices - Numerous performance improvements. - Added config option to preserve the hierarchy during the step. RemoveRedundantMaterials - Added config option to specify a list of materials which are kept in every case. UNREAL - Added support for the old unreal data format (*.a,*.d,*.uc) - tested only with exports from Milkshape - more Unreal stuff to come soon git-svn-id: https://assimp.svn.sourceforge.net/svnroot/assimp/trunk@356 67173fc5-114c-0410-ac8e-9d2fd5bffc1f --- INSTALL | 39 +- clean.bat | 6 - code/3DSConverter.cpp | 103 +- code/3DSHelper.h | 8 +- code/3DSLoader.cpp | 109 +- code/3DSLoader.h | 42 +- code/ACLoader.cpp | 29 +- code/ACLoader.h | 15 +- code/ASELoader.cpp | 39 +- code/ASELoader.h | 26 +- code/ASEParser.cpp | 8 +- code/ASEParser.h | 2 +- code/AssimpPCH.cpp | 10 +- code/AssimpPCH.h | 8 + code/B3DImporter.cpp | 6 +- code/B3DImporter.h | 2 +- code/BVHLoader.cpp | 19 +- code/BVHLoader.h | 15 +- code/BaseImporter.cpp | 145 +- code/BaseImporter.h | 194 +- code/BaseProcess.cpp | 2 +- code/CalcTangentsProcess.cpp | 16 +- code/ColladaLoader.cpp | 30 +- code/ColladaLoader.h | 7 +- code/ColladaParser.cpp | 6 +- code/ColladaParser.h | 2 +- code/DXFLoader.cpp | 24 +- code/DXFLoader.h | 12 +- code/DefaultLogger.cpp | 80 +- code/FindDegenerates.cpp | 213 +- code/FindDegenerates.h | 30 + code/GenFaceNormalsProcess.cpp | 2 +- code/HMPFileData.h | 16 +- code/HMPLoader.cpp | 36 +- code/HMPLoader.h | 17 +- code/HalfLifeFileData.h | 8 +- code/IRRLoader.cpp | 84 +- code/IRRLoader.h | 12 +- code/IRRMeshLoader.cpp | 25 +- code/IRRMeshLoader.h | 20 +- code/IRRShared.cpp | 6 +- code/Importer.cpp | 159 +- code/ImproveCacheLocality.cpp | 140 +- code/ImproveCacheLocality.h | 20 +- code/JoinVerticesProcess.cpp | 185 +- code/JoinVerticesProcess.h | 2 + code/LWOAnimation.cpp | 567 + code/LWOAnimation.h | 336 + code/LWOBLoader.cpp | 54 +- code/LWOFileData.h | 45 +- code/LWOLoader.cpp | 227 +- code/LWOLoader.h | 23 +- code/LWOMaterial.cpp | 96 +- code/LWSLoader.cpp | 806 +- code/LWSLoader.h | 157 +- code/MD2FileData.h | 24 +- code/MD2Loader.cpp | 49 +- code/MD2Loader.h | 17 +- code/MD3FileData.h | 8 +- code/MD3Loader.cpp | 77 +- code/MD3Loader.h | 6 +- code/MD5Loader.cpp | 58 +- code/MD5Loader.h | 15 +- code/MD5Parser.cpp | 11 +- code/MD5Parser.h | 38 +- code/MDCFileData.h | 8 +- code/MDCLoader.cpp | 30 +- code/MDCLoader.h | 17 +- code/MDLFileData.h | 27 +- code/MDLLoader.cpp | 41 +- code/MDLLoader.h | 3 +- code/MDLMaterialLoader.cpp | 4 +- code/NFFLoader.cpp | 26 +- code/NFFLoader.h | 17 +- code/OFFLoader.cpp | 32 +- code/OFFLoader.h | 12 +- code/ObjFileImporter.cpp | 19 +- code/ObjFileImporter.h | 5 +- code/PlyLoader.cpp | 55 +- code/PlyLoader.h | 22 +- code/PlyParser.cpp | 7 +- code/PretransformVertices.cpp | 551 +- code/PretransformVertices.h | 104 +- code/ProcessHelper.h | 181 +- code/Q3DLoader.cpp | 40 +- code/Q3DLoader.h | 12 +- code/RawLoader.cpp | 25 +- code/RawLoader.h | 15 +- code/RemoveRedundantMaterials.cpp | 83 +- code/RemoveRedundantMaterials.h | 49 +- code/RemoveVCProcess.cpp | 7 +- code/SMDLoader.cpp | 53 +- code/SMDLoader.h | 24 +- code/STLLoader.cpp | 36 +- code/STLLoader.h | 17 +- code/SceneCombiner.cpp | 219 +- code/SceneCombiner.h | 59 +- code/ScenePreprocessor.cpp | 87 +- code/SkeletonMeshBuilder.cpp | 5 +- code/SortByPTypeProcess.cpp | 2 +- code/SpatialSort.cpp | 10 +- code/StreamReader.h | 10 +- code/StringComparison.h | 2 +- code/TerragenLoader.cpp | 53 +- code/TerragenLoader.h | 26 +- code/UnrealLoader.cpp | 448 + code/UnrealLoader.h | 196 + code/ValidateDataStructure.cpp | 241 +- code/ValidateDataStructure.h | 14 +- code/XFileImporter.cpp | 46 +- code/XFileImporter.h | 15 +- code/extra/MakeVerboseFormat.cpp | 5 +- code/fast_atof.h | 40 +- code/makefile.mingw | 4 +- code/qnan.h | 36 +- code/res/assimp.rc | 12 +- contrib/cppunit_note.txt | 3 +- contrib/zlib/compress.c | 79 + contrib/zlib/deflate.c | 1736 +++ contrib/zlib/deflate.h | 331 + contrib/zlib/trees.c | 1219 +++ contrib/zlib/trees.h | 128 + contrib/zlib_note.txt | 8 +- doc/AssimpCmdDoc_Html/AssimpCmdDoc.chm | Bin 0 -> 80269 bytes doc/AssimpCmdDoc_Html/dragonsplash.png | Bin 0 -> 49960 bytes doc/AssimpDoc_Html/AssimpDoc.chm | Bin 0 -> 579550 bytes .../dragonsplash.png | Bin doc/Doxyfile | 4 +- doc/Doxyfile_Cmd | 1540 +++ doc/dox_cmd.h | 427 + doc/lib_html/AssimpDoc.chm | Bin 519974 -> 0 bytes doc/style.css | 3 +- .../BoostWorkaround/boost/static_assert.hpp | 2 +- include/DefaultLogger.h | 12 +- include/Logger.h | 64 +- include/NullLogger.h | 16 +- include/aiAnim.h | 102 +- include/aiCamera.h | 2 +- include/aiConfig.h | 247 +- include/aiDefines.h | 1 + include/aiLight.h | 3 + include/aiMaterial.h | 10 +- include/aiMaterial.inl | 4 +- include/aiMatrix4x4.h | 8 + include/aiMatrix4x4.inl | 10 + include/aiPostProcess.h | 78 +- include/aiQuaternion.h | 1 + include/aiScene.h | 4 + include/aiTexture.h | 7 +- include/aiTypes.h | 2 + include/aiVector3D.inl | 15 - include/assimp.hpp | 18 + make_mingw.bat | 4 - mkutil/revision.h | 2 +- test/RunUnitTestSuite.bat | 8 +- test/models/3D/box.uc | 20 + test/models/3D/box_a.3d | Bin 0 -> 964 bytes test/models/3D/box_d.3d | Bin 0 -> 240 bytes test/models/3D/mar_rifle.source.txt | 18 + test/models/3D/mar_rifle.uc | 20 + test/models/3D/mar_rifle_a.3d | Bin 0 -> 50524 bytes test/models/3D/mar_rifle_d.3d | Bin 0 -> 9200 bytes test/models/3DS/testFormatDetection | Bin 0 -> 29025 bytes .../AC/{Rectangle.ac => TestFormatDetection} | 0 test/models/ASE/MotionCaptureROM.source.txt | 6 +- .../ASE/{würfel.ASE => TestFormatDetection} | 0 .../HMP/{planar.hmp => formatDetection} | Bin .../IRR/EpisodeII_TheDwarfesStrikeBack.irr | Bin 0 -> 95946 bytes test/models/IRR/EpisodeI_ANewDwarf.irr | Bin 0 -> 72612 bytes test/models/IRR/animMesh.irr | Bin 12968 -> 12938 bytes .../IRR/warn_dwarf_scaling_is_intended.txt | 3 + test/models/LWO/LWO2/boxuv.lwo | Bin 0 -> 1100 bytes test/models/LWO/LWO2/boxuv.png | Bin 0 -> 14080 bytes test/models/LWO/LWO2/formatDetection | Bin 0 -> 702 bytes .../MappingModes/bluewithcylindrictexz.lwo | Bin 0 -> 600 bytes test/models/LWO/LWOB/formatDetection | Bin 0 -> 544 bytes test/models/LWS/QuickDraw v.2.2.lws | 22 +- .../LWS/QuickDraw v.2.2_oldformat_56.lws | 987 ++ test/models/LWS/move_x.lws | 472 + test/models/LWS/move_x_oldformat_56.lws | 196 + test/models/LWS/move_x_oldformat_6.lws | 447 + test/models/LWS/move_x_post_constant.lws | 472 + test/models/LWS/move_x_post_linear.lws | 472 + test/models/LWS/move_x_post_offset_repeat.lws | 472 + test/models/LWS/move_x_post_repeat.lws | 472 + test/models/LWS/move_x_post_reset.lws | 472 + test/models/LWS/move_xz_bezier.lws | 474 + test/models/LWS/move_xz_hermite.lws | 474 + test/models/LWS/move_xz_linear.lws | 474 + test/models/LWS/move_xz_spline.lws | 474 + test/models/LWS/move_xz_stepped.lws | 474 + test/models/LWS/move_y_pre_ofrep_post_osc.lws | 480 + test/models/LWS/simple_cube.lwo | Bin 0 -> 560 bytes .../models/MDL/IDPO (Quake1)/gijoe-readme.txt | 73 + test/models/MDL/IDPO (Quake1)/gijoe.mdl | Bin 0 -> 766132 bytes test/models/OFF/formatDetection | 16 + test/models/STL/Spider_ascii.stl | 9578 +++++++++++++++++ test/models/STL/Spider_binary.stl | Bin 0 -> 68484 bytes test/models/STL/formatDetection | 9 + test/models/WRL/credits.txt | 3 +- test/models/X/TestFormatDetection | 317 + .../invalid/{empty.md5 => empty.md5mesh} | 0 test/unit/utFindDegenerates.cpp | 92 + test/unit/utFindDegenerates.h | 33 + test/unit/utImporter.cpp | 2 +- test/unit/utImporter.h | 2 +- test/unit/utPretransformVertices.cpp | 97 +- test/unit/utPretransformVertices.h | 37 + test/unit/utRemoveRedundantMaterials.cpp | 79 +- test/unit/utRemoveRedundantMaterials.h | 3 +- tools/assimp_cmd/CompareDump.cpp | 0 tools/assimp_cmd/ImageExtractor.cpp | 360 + tools/assimp_cmd/Main.cpp | 308 + tools/assimp_cmd/Main.h | 137 + tools/assimp_cmd/WriteDumb.cpp | 1024 ++ tools/assimp_cmd/assimp_cmd.rc | 88 + tools/assimp_cmd/makefile | 63 + tools/assimp_cmd/makefile.mingw | 61 + tools/assimp_cmd/resource.h | 21 + tools/assimp_view/Background.cpp | 2 +- tools/assimp_view/Material.cpp | 6 +- tools/assimp_view/MessageProc.cpp | 135 +- tools/assimp_view/assimp_view.cpp | 12 +- tools/assimp_view/assimp_view.h | 2 + tools/assimp_view/assimp_view.ico | Bin 23558 -> 0 bytes tools/assimp_view/assimp_view.rc | 12 +- tools/assimp_view/small.ico | Bin 23558 -> 0 bytes tools/shared/assimp_tools_icon.ico | Bin 0 -> 9662 bytes tools/shared/assimp_tools_icon.png | Bin 0 -> 147235 bytes tools/shared/assimp_tools_icon.svg | 195 + workspaces/vc8/UnitTest.vcproj | 8 + workspaces/vc8/assimp.sln | 40 + workspaces/vc8/assimp.vcproj | 159 +- workspaces/vc8/assimp_cmd.vcproj | 1508 +++ workspaces/vc8/assimp_view.vcproj | 54 +- workspaces/vc9/UnitTest.vcproj | 8 + workspaces/vc9/assimp.vcproj | 20 + 237 files changed, 33463 insertions(+), 2245 deletions(-) delete mode 100644 clean.bat create mode 100644 code/LWOAnimation.cpp create mode 100644 code/LWOAnimation.h create mode 100644 code/UnrealLoader.cpp create mode 100644 code/UnrealLoader.h create mode 100644 contrib/zlib/compress.c create mode 100644 contrib/zlib/deflate.c create mode 100644 contrib/zlib/deflate.h create mode 100644 contrib/zlib/trees.c create mode 100644 contrib/zlib/trees.h create mode 100644 doc/AssimpCmdDoc_Html/AssimpCmdDoc.chm create mode 100644 doc/AssimpCmdDoc_Html/dragonsplash.png create mode 100644 doc/AssimpDoc_Html/AssimpDoc.chm rename doc/{lib_html => AssimpDoc_Html}/dragonsplash.png (100%) create mode 100644 doc/Doxyfile_Cmd create mode 100644 doc/dox_cmd.h delete mode 100644 doc/lib_html/AssimpDoc.chm delete mode 100644 make_mingw.bat create mode 100644 test/models/3D/box.uc create mode 100644 test/models/3D/box_a.3d create mode 100644 test/models/3D/box_d.3d create mode 100644 test/models/3D/mar_rifle.source.txt create mode 100644 test/models/3D/mar_rifle.uc create mode 100644 test/models/3D/mar_rifle_a.3d create mode 100644 test/models/3D/mar_rifle_d.3d create mode 100644 test/models/3DS/testFormatDetection rename test/models/AC/{Rectangle.ac => TestFormatDetection} (100%) rename test/models/ASE/{würfel.ASE => TestFormatDetection} (100%) rename test/models/HMP/{planar.hmp => formatDetection} (100%) create mode 100644 test/models/IRR/EpisodeII_TheDwarfesStrikeBack.irr create mode 100644 test/models/IRR/EpisodeI_ANewDwarf.irr create mode 100644 test/models/IRR/warn_dwarf_scaling_is_intended.txt create mode 100644 test/models/LWO/LWO2/boxuv.lwo create mode 100644 test/models/LWO/LWO2/boxuv.png create mode 100644 test/models/LWO/LWO2/formatDetection create mode 100644 test/models/LWO/LWOB/MappingModes/bluewithcylindrictexz.lwo create mode 100644 test/models/LWO/LWOB/formatDetection create mode 100644 test/models/LWS/QuickDraw v.2.2_oldformat_56.lws create mode 100644 test/models/LWS/move_x.lws create mode 100644 test/models/LWS/move_x_oldformat_56.lws create mode 100644 test/models/LWS/move_x_oldformat_6.lws create mode 100644 test/models/LWS/move_x_post_constant.lws create mode 100644 test/models/LWS/move_x_post_linear.lws create mode 100644 test/models/LWS/move_x_post_offset_repeat.lws create mode 100644 test/models/LWS/move_x_post_repeat.lws create mode 100644 test/models/LWS/move_x_post_reset.lws create mode 100644 test/models/LWS/move_xz_bezier.lws create mode 100644 test/models/LWS/move_xz_hermite.lws create mode 100644 test/models/LWS/move_xz_linear.lws create mode 100644 test/models/LWS/move_xz_spline.lws create mode 100644 test/models/LWS/move_xz_stepped.lws create mode 100644 test/models/LWS/move_y_pre_ofrep_post_osc.lws create mode 100644 test/models/LWS/simple_cube.lwo create mode 100644 test/models/MDL/IDPO (Quake1)/gijoe-readme.txt create mode 100644 test/models/MDL/IDPO (Quake1)/gijoe.mdl create mode 100644 test/models/OFF/formatDetection create mode 100644 test/models/STL/Spider_ascii.stl create mode 100644 test/models/STL/Spider_binary.stl create mode 100644 test/models/STL/formatDetection create mode 100644 test/models/X/TestFormatDetection rename test/models/invalid/{empty.md5 => empty.md5mesh} (100%) create mode 100644 test/unit/utFindDegenerates.cpp create mode 100644 test/unit/utFindDegenerates.h create mode 100644 tools/assimp_cmd/CompareDump.cpp create mode 100644 tools/assimp_cmd/ImageExtractor.cpp create mode 100644 tools/assimp_cmd/Main.cpp create mode 100644 tools/assimp_cmd/Main.h create mode 100644 tools/assimp_cmd/WriteDumb.cpp create mode 100644 tools/assimp_cmd/assimp_cmd.rc create mode 100644 tools/assimp_cmd/makefile create mode 100644 tools/assimp_cmd/makefile.mingw create mode 100644 tools/assimp_cmd/resource.h delete mode 100644 tools/assimp_view/assimp_view.ico delete mode 100644 tools/assimp_view/small.ico create mode 100644 tools/shared/assimp_tools_icon.ico create mode 100644 tools/shared/assimp_tools_icon.png create mode 100644 tools/shared/assimp_tools_icon.svg create mode 100644 workspaces/vc8/assimp_cmd.vcproj diff --git a/INSTALL b/INSTALL index 20ef87f09..d09844921 100644 --- a/INSTALL +++ b/INSTALL @@ -1,7 +1,32 @@ - Open Asset Import Library (Assimp) Install - ----------------------------------------- -To take a look into the ASSIMP library just get the code, go to the -workspaces-directory and open your prefered build enviroment. Now just build -the engine, start the ASSIMP-Viewer application and select one of our basic test-files. - -You need boost-1.35 to build the Asset Import Library. + + +Open Asset Import Library (Assimp) Install +------------------------------------------------ + +Please see the doxygen documentation to learn how to build & use Assimp. +A CHM file is included in the SVN repos: ./doc/lib_htmp/AssimpDoc.chm. +At least Windows should be able to read it. + +To build the doxygen doc on your own follow these steps: + +a) download & install latest doxygen +b) ensure doxygen is in the executable search path +c) navigate to ./doc +d) and run 'doxygen' + +Open the generated HTML (lib_htmp/index.html) in the browser of your choice. +Windows only: To generate the CHM doc install the 'Microsoft HTML Workshop' +and configure the path to it in the DOXYFILE. Run doxygen again. + + +You can also find a copy of the doc on our web site: +http://assimp.sourceforge.net/lib_html/index.html + +Beware, it could be outdated. If you're in serious doubt it might be, +rebuilding the doc is probably a wise choice. + + + + + + diff --git a/clean.bat b/clean.bat deleted file mode 100644 index f6e74ed03..000000000 --- a/clean.bat +++ /dev/null @@ -1,6 +0,0 @@ -cd code -mingw32-make -f makefile.mingw clean - -cd .. -del /Q /S obj bin lib - diff --git a/code/3DSConverter.cpp b/code/3DSConverter.cpp index 3d5acfdc2..5ff756469 100644 --- a/code/3DSConverter.cpp +++ b/code/3DSConverter.cpp @@ -54,14 +54,13 @@ using namespace Assimp; // Setup final material indices, generae a default material if necessary void Discreet3DSImporter::ReplaceDefaultMaterial() { - ////////////////////////////////////////////////////////////////////////// + // Try to find an existing material that matches the // typical default material setting: // - no textures // - diffuse color (in grey!) // NOTE: This is here to workaround the fact that some // exporters are writing a default material, too. - ////////////////////////////////////////////////////////////////////////// unsigned int idx = 0xcdcdcdcd; for (unsigned int i = 0; i < mScene->mMaterials.size();++i) { @@ -438,57 +437,65 @@ void Discreet3DSImporter::AddNodeToGraph(aiScene* pcSOut,aiNode* pcOut, iArray.reserve(3); aiMatrix4x4 abs; - /*if (pcIn->mName == "$$$DUMMY") { - // FIX: Append the "real" name of the dummy to the string - pcIn->mName = "Dummy." + pcIn->mDummyName; + + // Find all meshes with the same name as the node + for (unsigned int a = 0; a < pcSOut->mNumMeshes;++a) + { + const D3DS::Mesh* pcMesh = (const D3DS::Mesh*)pcSOut->mMeshes[a]->mColors[0]; + ai_assert(NULL != pcMesh); + + if (pcIn->mName == pcMesh->mName) + iArray.push_back(a); } - else*/ // if (pcIn->mName != "$$$DUMMY") - { - // Find all meshes with the same name as the node - for (unsigned int a = 0; a < pcSOut->mNumMeshes;++a) - { - const D3DS::Mesh* pcMesh = (const D3DS::Mesh*)pcSOut->mMeshes[a]->mColors[0]; - ai_assert(NULL != pcMesh); + if (!iArray.empty()) + { + // The matrix should be identical for all meshes with the + // same name. It HAS to be identical for all meshes ..... + D3DS::Mesh* imesh = ((D3DS::Mesh*)pcSOut->mMeshes[iArray[0]]->mColors[0]); - if (pcIn->mName == pcMesh->mName) - iArray.push_back(a); - } - if (!iArray.empty()) - { - // The matrix should be identical for all meshes with the - // same name. It HAS to be identical for all meshes ..... - aiMatrix4x4 mInv = ((D3DS::Mesh*)pcSOut->mMeshes[iArray[0]]->mColors[0])->mMat; - mInv.Inverse(); - const aiVector3D& pivot = pcIn->vPivot; + // Compute the inverse of the transformation matrix to move the + // vertices back to their relative and local space + aiMatrix4x4 mInv = imesh->mMat, mInvTransposed = imesh->mMat; + mInv.Inverse();mInvTransposed.Transpose(); + aiVector3D pivot = pcIn->vPivot; - pcOut->mNumMeshes = (unsigned int)iArray.size(); - pcOut->mMeshes = new unsigned int[iArray.size()]; - for (unsigned int i = 0;i < iArray.size();++i) - { - const unsigned int iIndex = iArray[i]; - aiMesh* const mesh = pcSOut->mMeshes[iIndex]; + pcOut->mNumMeshes = (unsigned int)iArray.size(); + pcOut->mMeshes = new unsigned int[iArray.size()]; + for (unsigned int i = 0;i < iArray.size();++i) { + const unsigned int iIndex = iArray[i]; + aiMesh* const mesh = pcSOut->mMeshes[iIndex]; - // Pivot point adjustment - // See: http://www.zfx.info/DisplayThread.php?MID=235690#235690 - const aiVector3D* const pvEnd = mesh->mVertices+mesh->mNumVertices; - aiVector3D* pvCurrent = mesh->mVertices; + // Transform the vertices back into their local space + // fixme: consider computing normals after this, so we don't need to transform them + const aiVector3D* const pvEnd = mesh->mVertices+mesh->mNumVertices; + aiVector3D* pvCurrent = mesh->mVertices, *t2 = mesh->mNormals; - if(pivot.x || pivot.y || pivot.z) - { - for (;pvCurrent != pvEnd;++pvCurrent) - { - *pvCurrent = mInv * (*pvCurrent); - *pvCurrent -= pivot; - } - } - else - { - for (;pvCurrent != pvEnd;++pvCurrent) - *pvCurrent = mInv * (*pvCurrent); - } - // Setup the mesh index - pcOut->mMeshes[i] = iIndex; + for (;pvCurrent != pvEnd;++pvCurrent,++t2) { + *pvCurrent = mInv * (*pvCurrent); + *t2 = mInvTransposed * (*t2); } + + // Handle negative transformation matrix determinant -> invert vertex x + if (imesh->mMat.Determinant() < 0.0f) + { + /* we *must* have normals */ + for (pvCurrent = mesh->mVertices,t2 = mesh->mNormals;pvCurrent != pvEnd;++pvCurrent,++t2) { + pvCurrent->x *= -1.f; + t2->x *= -1.f; + } + DefaultLogger::get()->info("3DS: Flipping mesh X-Axis"); + } + + // Handle pivot point + if(pivot.x || pivot.y || pivot.z) + { + for (pvCurrent = mesh->mVertices;pvCurrent != pvEnd;++pvCurrent) { + *pvCurrent -= pivot; + } + } + + // Setup the mesh index + pcOut->mMeshes[i] = iIndex; } } @@ -526,7 +533,7 @@ void Discreet3DSImporter::AddNodeToGraph(aiScene* pcSOut,aiNode* pcOut, } // Generate animation channels for the node - if (pcIn->aPositionKeys.size() > 1 || pcIn->aRotationKeys.size() > 1 || + if (pcIn->aPositionKeys.size() > 1 || pcIn->aRotationKeys.size() > 1 || pcIn->aScalingKeys.size() > 1 || pcIn->aCameraRollKeys.size() > 1 || pcIn->aTargetPositionKeys.size() > 1) { diff --git a/code/3DSHelper.h b/code/3DSHelper.h index 40ea8ab79..4c591ee50 100644 --- a/code/3DSHelper.h +++ b/code/3DSHelper.h @@ -124,11 +124,10 @@ public: CHUNK_PERCENTF = 0x0031, // float4 percentage // ******************************************************************** - // Unknown and ignored. Possibly a chunk used by PROJ ( - // Discreet 3DS max Project File)? + // Prj master chunk CHUNK_PRJ = 0xC23D, - // Unknown. Possibly a reference to an external .mli file? + // MDLI master chunk CHUNK_MLI = 0x3DAA, // Primary main chunk of the .3ds file @@ -178,7 +177,6 @@ public: CHUNK_MESHCOLOR = 0x4165, CHUNK_TXTINFO = 0x4170, CHUNK_LIGHT = 0x4600, - CHUNK_SPOTLIGHT = 0x4610, CHUNK_CAMERA = 0x4700, CHUNK_HIERARCHY = 0x4F00, @@ -330,7 +328,7 @@ struct Texture , mMapMode (aiTextureMapMode_Wrap) , iUVSrc (0) { - mTextureBlend = std::numeric_limits::quiet_NaN(); + mTextureBlend = get_qnan(); } //! Specifies the blend factor for the texture diff --git a/code/3DSLoader.cpp b/code/3DSLoader.cpp index 64f3fd8d6..37f2d8c08 100644 --- a/code/3DSLoader.cpp +++ b/code/3DSLoader.cpp @@ -39,7 +39,11 @@ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. --------------------------------------------------------------------------- */ -/** @file Implementation of the 3ds importer class */ +/** @file 3DSLoader.cpp + * @brief Implementation of the 3ds importer class + * + * http://www.the-labs.com/Blender/3DS-details.html + */ #include "AssimpPCH.h" #ifndef ASSIMP_BUILD_NO_3DS_IMPORTER @@ -53,12 +57,14 @@ using namespace Assimp; // Begins a new parsing block // - Reads the current chunk and validates it // - computes its length -#define ASSIMP_3DS_BEGIN_CHUNK() \ - Discreet3DS::Chunk chunk; \ - ReadChunk(&chunk); \ - int chunkSize = chunk.Size-sizeof(Discreet3DS::Chunk); \ - const int oldReadLimit = stream->GetReadLimit(); \ - stream->SetReadLimit(stream->GetCurrentPos() + chunkSize); +#define ASSIMP_3DS_BEGIN_CHUNK() \ + if (stream->GetRemainingSizeToLimit() < sizeof(Discreet3DS::Chunk)) \ + return; \ + Discreet3DS::Chunk chunk; \ + ReadChunk(&chunk); \ + int chunkSize = chunk.Size-sizeof(Discreet3DS::Chunk); \ + const int oldReadLimit = stream->GetReadLimit(); \ + stream->SetReadLimit(stream->GetCurrentPos() + chunkSize); // ------------------------------------------------------------------------------------------------ @@ -82,18 +88,27 @@ Discreet3DSImporter::~Discreet3DSImporter() // ------------------------------------------------------------------------------------------------ // Returns whether the class can handle the format of the given file. -bool Discreet3DSImporter::CanRead( const std::string& pFile, IOSystem* pIOHandler) const +bool Discreet3DSImporter::CanRead( const std::string& pFile, IOSystem* pIOHandler, bool checkSig) const { - // simple check of file extension is enough for the moment - std::string::size_type pos = pFile.find_last_of('.'); - // no file extension - can't read - if( pos == std::string::npos) - return false; - std::string extension = pFile.substr( pos); - for (std::string::iterator i = extension.begin(); i != extension.end();++i) - *i = ::tolower(*i); + std::string extension = GetExtension(pFile); + if(extension == "3ds" || extension == "prj" ) { + return true; + } + if (!extension.length() || checkSig) { + uint16_t token[3]; + token[0] = 0x4d4d; + token[1] = 0x3dc2; + //token[2] = 0x3daa; + return CheckMagicToken(pIOHandler,pFile,token,2,0,2); + } + return false; +} - return (extension == ".3ds"); +// ------------------------------------------------------------------------------------------------ +// Get list of all extension supported by this loader +void Discreet3DSImporter::GetExtensionList(std::string& append) +{ + append.append("*.3ds;*.prj"); } // ------------------------------------------------------------------------------------------------ @@ -128,6 +143,7 @@ void Discreet3DSImporter::InternReadFile( const std::string& pFile, mMasterScale = 1.0f; mBackgroundImage = ""; bHasBG = false; + bIsPrj = false; // Parse the file ParseMainChunk(); @@ -138,8 +154,7 @@ void Discreet3DSImporter::InternReadFile( const std::string& pFile, // vectors from the smoothing groups we read from the // file. for (std::vector::iterator i = mScene->mMeshes.begin(), - end = mScene->mMeshes.end(); i != end;++i) - { + end = mScene->mMeshes.end(); i != end;++i) { CheckIndices(*i); MakeUnique (*i); ComputeNormalsWithSmoothingsGroups(*i); @@ -226,6 +241,9 @@ void Discreet3DSImporter::ParseMainChunk() // get chunk type switch (chunk.Flag) { + + case Discreet3DS::CHUNK_PRJ: + bIsPrj = true; case Discreet3DS::CHUNK_MAIN: ParseEditorChunk(); break; @@ -371,9 +389,9 @@ void Discreet3DSImporter::ParseChunk(const char* name, unsigned int num) light->mColorDiffuse = aiColor3D(1.f,1.f,1.f); - // Now check for further subchunks (excluding color) - int8_t* p = stream->GetPtr(); - ParseLightChunk(); + // Now check for further subchunks + if (!bIsPrj) /* fixme */ + ParseLightChunk(); // The specular light color is identical the the diffuse light // color. The ambient light color is equal to the ambient base @@ -424,6 +442,10 @@ void Discreet3DSImporter::ParseChunk(const char* name, unsigned int num) if (camera->mHorizontalFOV < 0.001f) camera->mHorizontalFOV = AI_DEG_TO_RAD(45.f); } + + // Now check for further subchunks + if (!bIsPrj) /* fixme */ + ParseCameraChunk(); break; }; ASSIMP_3DS_END_CHUNK(); @@ -440,7 +462,7 @@ void Discreet3DSImporter::ParseLightChunk() // get chunk type switch (chunk.Flag) { - case Discreet3DS::CHUNK_SPOTLIGHT: + case Discreet3DS::CHUNK_DL_SPOTLIGHT: // Now we can be sure that the light is a spot light light->mType = aiLightSource_SPOT; @@ -511,7 +533,7 @@ void Discreet3DSImporter::ParseKeyframeChunk() switch (chunk.Flag) { case Discreet3DS::CHUNK_TRACKCAMTGT: - case Discreet3DS::CHUNK_SPOTLIGHT: + case Discreet3DS::CHUNK_TRACKSPOTL: case Discreet3DS::CHUNK_TRACKCAMERA: case Discreet3DS::CHUNK_TRACKINFO: case Discreet3DS::CHUNK_TRACKLIGHT: @@ -574,14 +596,11 @@ void Discreet3DSImporter::SkipTCBInfo() { unsigned int flags = stream->GetI2(); - if (!flags) - { - ////////////////////////////////////////////////////////////////////////// + if (!flags) { // Currently we can't do anything with these values. They occur // quite rare, so it wouldn't be worth the effort implementing // them. 3DS ist not really suitable for complex animations, // so full support is not required. - ////////////////////////////////////////////////////////////////////////// DefaultLogger::get()->warn("3DS: Skipping TCB animation info"); } @@ -1015,35 +1034,7 @@ void Discreet3DSImporter::ParseMeshChunk() mMesh.mMat.a4 = stream->GetF4(); mMesh.mMat.b4 = stream->GetF4(); mMesh.mMat.c4 = stream->GetF4(); - - // Now check whether the matrix has got a negative determinant - // If yes, we need to flip all vertices' Z axis .... - // This code has been taken from lib3ds - if (mMesh.mMat.Determinant() < 0.0f) { - // Compute the inverse of the matrix - aiMatrix4x4 mInv = mMesh.mMat; - mInv.Inverse(); - - aiMatrix4x4 mMe = mMesh.mMat; - mMe.c1 *= -1.0f; - mMe.c2 *= -1.0f; - mMe.c3 *= -1.0f; - mMe.c4 *= -1.0f; - mInv = mInv * mMe; - - // Now transform all vertices - for (unsigned int i = 0; i < (unsigned int)mMesh.mPositions.size();++i) - { - aiVector3D a,c; - a = mMesh.mPositions[i]; - c[0]= mInv[0][0]*a[0] + mInv[1][0]*a[1] + mInv[2][0]*a[2] + mInv[3][0]; - c[1]= mInv[0][1]*a[0] + mInv[1][1]*a[1] + mInv[2][1]*a[2] + mInv[3][1]; - c[2]= mInv[0][2]*a[0] + mInv[1][2]*a[1] + mInv[2][2]*a[2] + mInv[3][2]; - mMesh.mPositions[i] = c; - } - - DefaultLogger::get()->info("3DS: Flipping mesh Z-Axis"); - }} + } break; case Discreet3DS::CHUNK_MAPLIST: @@ -1353,7 +1344,7 @@ float Discreet3DSImporter::ParsePercentageChunk() return stream->GetF4(); else if (Discreet3DS::CHUNK_PERCENTW == chunk.Flag) return (float)((uint16_t)stream->GetI2()) / (float)0xFFFF; - return std::numeric_limits::quiet_NaN(); + return get_qnan(); } // ------------------------------------------------------------------------------------------------ @@ -1364,7 +1355,7 @@ void Discreet3DSImporter::ParseColorChunk(aiColor3D* out, ai_assert(out != NULL); // error return value - const float qnan = std::numeric_limits::quiet_NaN(); + const float qnan = get_qnan(); static const aiColor3D clrError = aiColor3D(qnan,qnan,qnan); Discreet3DS::Chunk chunk; diff --git a/code/3DSLoader.h b/code/3DSLoader.h index 74cc5917c..2e8625aca 100644 --- a/code/3DSLoader.h +++ b/code/3DSLoader.h @@ -39,7 +39,9 @@ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. ---------------------------------------------------------------------- */ -/** @file Definition of the .3ds importer class. */ +/** @file 3DSLoader.h + * @brief 3DS File format loader + */ #ifndef AI_3DSIMPORTER_H_INC #define AI_3DSIMPORTER_H_INC @@ -49,16 +51,14 @@ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. struct aiNode; #include "3DSHelper.h" -namespace Assimp -{ +namespace Assimp { class MaterialHelper; using namespace D3DS; -// --------------------------------------------------------------------------- -/** The Discreet3DSImporter is a worker class capable of importing a scene from a -* 3ds Max 4/5 Files (.3ds) -*/ +// --------------------------------------------------------------------------------- +/** Importer class for 3D Studio r3 and r4 3DS files + */ class Discreet3DSImporter : public BaseImporter { friend class Importer; @@ -74,14 +74,16 @@ public: // ------------------------------------------------------------------- /** Returns whether the class can handle the format of the given file. - * See BaseImporter::CanRead() for details. */ - bool CanRead( const std::string& pFile, IOSystem* pIOHandler) const; + * See BaseImporter::CanRead() for details. + */ + bool CanRead( const std::string& pFile, IOSystem* pIOHandler, + bool checkSig) const; // ------------------------------------------------------------------- /** Called prior to ReadFile(). - * The function is a request to the importer to update its configuration - * basing on the Importer's configuration property list. - */ + * The function is a request to the importer to update its configuration + * basing on the Importer's configuration property list. + */ void SetupProperties(const Importer* pImp); protected: @@ -90,21 +92,18 @@ protected: /** Called by Importer::GetExtensionList() for each loaded importer. * See BaseImporter::GetExtensionList() for details */ - void GetExtensionList(std::string& append) - { - append.append("*.3ds"); - } + void GetExtensionList(std::string& append); // ------------------------------------------------------------------- /** Imports the given file into the given scene structure. - * See BaseImporter::InternReadFile() for details - */ + * See BaseImporter::InternReadFile() for details + */ void InternReadFile( const std::string& pFile, aiScene* pScene, IOSystem* pIOHandler); // ------------------------------------------------------------------- /** Converts a temporary material to the outer representation - */ + */ void ConvertMaterial(D3DS::Material& p_cMat, MaterialHelper& p_pcOut); @@ -112,7 +111,7 @@ protected: /** Read a chunk * * @param pcOut Receives the current chunk - */ + */ void ReadChunk(Discreet3DS::Chunk* pcOut); // ------------------------------------------------------------------- @@ -271,6 +270,9 @@ protected: /** Path to the background image of the scene */ std::string mBackgroundImage; bool bHasBG; + + /** true if PRJ file */ + bool bIsPrj; }; } // end of namespace Assimp diff --git a/code/ACLoader.cpp b/code/ACLoader.cpp index 70dbffc9a..62bcac519 100644 --- a/code/ACLoader.cpp +++ b/code/ACLoader.cpp @@ -108,28 +108,38 @@ using namespace Assimp; // Constructor to be privately used by Importer AC3DImporter::AC3DImporter() { + // nothing to be done here } // ------------------------------------------------------------------------------------------------ // Destructor, private as well AC3DImporter::~AC3DImporter() { + // nothing to be done here } // ------------------------------------------------------------------------------------------------ // Returns whether the class can handle the format of the given file. -bool AC3DImporter::CanRead( const std::string& pFile, IOSystem* pIOHandler) const +bool AC3DImporter::CanRead( const std::string& pFile, IOSystem* pIOHandler, bool checkSig) const { - // simple check of file extension is enough for the moment - std::string::size_type pos = pFile.find_last_of('.'); - // no file extension - can't read - if( pos == std::string::npos)return false; - std::string extension = pFile.substr( pos); + std::string extension = GetExtension(pFile); - for( std::string::iterator it = extension.begin(); it != extension.end(); ++it) - *it = tolower( *it); + // fixme: are acc and ac3d *really* used? Some sources say they are + if(extension == "ac" || extension == "ac3d" || extension == "acc") { + return true; + } + if (!extension.length() || checkSig) { + uint32_t token = AI_MAKE_MAGIC("AC3D"); + return CheckMagicToken(pIOHandler,pFile,&token,1,0); + } + return false; +} - return( extension == ".ac3d" || extension == ".ac"); +// ------------------------------------------------------------------------------------------------ +// Get list of file extensions handled by this loader +void AC3DImporter::GetExtensionList(std::string& append) +{ + append.append("*.ac;*.acc;*.ac3d"); } // ------------------------------------------------------------------------------------------------ @@ -140,7 +150,6 @@ bool AC3DImporter::GetNextLine( ) return SkipSpaces(&buffer); } - // ------------------------------------------------------------------------------------------------ // Parse an object section in an AC file void AC3DImporter::LoadObjectSection(std::vector& objects) diff --git a/code/ACLoader.h b/code/ACLoader.h index 4309a4eca..fdf6bfdc5 100644 --- a/code/ACLoader.h +++ b/code/ACLoader.h @@ -38,7 +38,9 @@ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. ---------------------------------------------------------------------- */ -/** @file Declaration of the .ac importer class. */ +/** @file ACLoader.h + * @brief Declaration of the .ac importer class. + */ #ifndef AI_AC3DLOADER_H_INCLUDED #define AI_AC3DLOADER_H_INCLUDED @@ -166,8 +168,10 @@ public: // ------------------------------------------------------------------- /** Returns whether the class can handle the format of the given file. - * See BaseImporter::CanRead() for details. */ - bool CanRead( const std::string& pFile, IOSystem* pIOHandler) const; + * See BaseImporter::CanRead() for details. + */ + bool CanRead( const std::string& pFile, IOSystem* pIOHandler, + bool checkSig) const; protected: @@ -175,10 +179,7 @@ protected: /** Called by Importer::GetExtensionList() for each loaded importer. * See BaseImporter::GetExtensionList() for details */ - void GetExtensionList(std::string& append) - { - append.append("*.ac;*.acc"); - } + void GetExtensionList(std::string& append); // ------------------------------------------------------------------- /** Imports the given file into the given scene structure. diff --git a/code/ASELoader.cpp b/code/ASELoader.cpp index 7564fd74a..c3d25959b 100644 --- a/code/ASELoader.cpp +++ b/code/ASELoader.cpp @@ -39,7 +39,9 @@ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. --------------------------------------------------------------------------- */ -/** @file Implementation of the ASE importer class */ +/** @file ASELoader.cpp + * @brief Implementation of the ASE importer class + */ #include "AssimpPCH.h" #ifndef ASSIMP_BUILD_NO_ASE_IMPORTER @@ -69,23 +71,25 @@ ASEImporter::~ASEImporter() // ------------------------------------------------------------------------------------------------ // Returns whether the class can handle the format of the given file. -bool ASEImporter::CanRead( const std::string& pFile, IOSystem* pIOHandler) const +bool ASEImporter::CanRead( const std::string& pFile, IOSystem* pIOHandler, bool cs) const { - // simple check of file extension is enough for the moment - std::string::size_type pos = pFile.find_last_of('.'); - // no file extension - can't read - if( pos == std::string::npos) - return false; + // check file extension + const std::string extension = GetExtension(pFile); + + if( extension == "ase" || extension == "ask") + return true; - std::string extension = pFile.substr( pos); + if ((!extension.length() || cs) && pIOHandler) { + const char* tokens[] = {"*3dsmax_asciiexport"}; + return SearchFileHeaderForToken(pIOHandler,pFile,tokens,1); + } + return false; +} - // Either ASE, ASC or ASK - return !(extension.length() < 4 || extension[0] != '.' || - extension[1] != 'a' && extension[1] != 'A' || - extension[2] != 's' && extension[2] != 'S' || - extension[3] != 'e' && extension[3] != 'E' && - extension[3] != 'k' && extension[3] != 'K' && - extension[3] != 'c' && extension[3] != 'C'); +// ------------------------------------------------------------------------------------------------ +void ASEImporter::GetExtensionList(std::string& append) +{ + append.append("*.ase;*.ask"); } // ------------------------------------------------------------------------------------------------ @@ -108,6 +112,8 @@ void ASEImporter::InternReadFile( const std::string& pFile, throw new ImportErrorException( "Failed to open ASE file " + pFile + "."); size_t fileSize = file->FileSize(); + if (!fileSize) + throw new ImportErrorException( "ASE: File is empty"); // Allocate storage and copy the contents of the file to a memory buffer // (terminate it with zero) @@ -778,8 +784,7 @@ void ASEImporter::BuildNodes() delete pc; } // The root node should not have at least one child or the file is invalid - else if (!pcScene->mRootNode->mNumChildren) - { + else if (!pcScene->mRootNode->mNumChildren) { throw new ImportErrorException("No nodes loaded. The ASE/ASK file is either empty or corrupt"); } return; diff --git a/code/ASELoader.h b/code/ASELoader.h index 8b7f0a8fe..efae439f4 100644 --- a/code/ASELoader.h +++ b/code/ASELoader.h @@ -38,7 +38,9 @@ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. ---------------------------------------------------------------------- */ -/** @file Definition of the .ASE importer class. */ +/** @file ASELoader.h + * @brief Definition of the .ASE importer class. + */ #ifndef AI_ASELOADER_H_INCLUDED #define AI_ASELOADER_H_INCLUDED @@ -48,15 +50,16 @@ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. struct aiNode; #include "ASEParser.h" -namespace Assimp -{ +namespace Assimp { class MaterialHelper; using namespace ASE; -// --------------------------------------------------------------------------- -/** Used to load ASE files -*/ +// -------------------------------------------------------------------------------- +/** Importer class for the 3DS ASE ASCII format + * + * fixme: consider code cleanup + */ class ASEImporter : public BaseImporter { friend class Importer; @@ -72,8 +75,10 @@ public: // ------------------------------------------------------------------- /** Returns whether the class can handle the format of the given file. - * See BaseImporter::CanRead() for details. */ - bool CanRead( const std::string& pFile, IOSystem* pIOHandler) const; + * See BaseImporter::CanRead() for details. + */ + bool CanRead( const std::string& pFile, IOSystem* pIOHandler, + bool checkSig) const; protected: @@ -81,10 +86,7 @@ protected: /** Called by Importer::GetExtensionList() for each loaded importer. * See BaseImporter::GetExtensionList() for details */ - void GetExtensionList(std::string& append) - { - append.append("*.ase;*.ask;*.asc"); - } + void GetExtensionList(std::string& append); // ------------------------------------------------------------------- /** Imports the given file into the given scene structure. diff --git a/code/ASEParser.cpp b/code/ASEParser.cpp index 5af9c9e84..bbc036f8b 100644 --- a/code/ASEParser.cpp +++ b/code/ASEParser.cpp @@ -39,7 +39,9 @@ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. --------------------------------------------------------------------------- */ -/** @file Implementation of the ASE parser class */ +/** @file ASEParser.cpp + * @brief Implementation of the ASE parser class + */ #include "AssimpPCH.h" @@ -120,8 +122,8 @@ Parser::Parser (const char* szFile, unsigned int fileFormatDefault) iFileFormat = fileFormatDefault; // make sure that the color values are invalid - m_clrBackground.r = std::numeric_limits::quiet_NaN(); - m_clrAmbient.r = std::numeric_limits::quiet_NaN(); + m_clrBackground.r = get_qnan(); + m_clrAmbient.r = get_qnan(); // setup some default values iLineNumber = 0; diff --git a/code/ASEParser.h b/code/ASEParser.h index be7254d1e..749a2fa6d 100644 --- a/code/ASEParser.h +++ b/code/ASEParser.h @@ -227,7 +227,7 @@ struct BaseNode mName = szTemp; // Set mTargetPosition to qnan - const float qnan = std::numeric_limits::quiet_NaN(); + const float qnan = get_qnan(); mTargetPosition.x = qnan; } diff --git a/code/AssimpPCH.cpp b/code/AssimpPCH.cpp index 34dfd656c..57eb35e3d 100644 --- a/code/AssimpPCH.cpp +++ b/code/AssimpPCH.cpp @@ -1,5 +1,5 @@ -// Actually just a dummyy, used by the compiler to build the precompiled header. +// Actually just a dummy, used by the compiler to build the precompiled header. #include "AssimpPCH.h" #include "./../include/aiVersion.h" @@ -12,7 +12,7 @@ static const char* LEGAL_INFORMATION = "A free C/C++ library to import various 3D file formats into applications\n\n" "(c) ASSIMP Development Team, 2008-2009\n" -"License: BSD\n" +"License: 3-clause BSD license\n" "Website: http://assimp.sourceforge.net\n" ; @@ -59,10 +59,12 @@ ASSIMP_API unsigned int aiGetCompileFlags () { return flags; } +// include current build revision +#include "../mkutil/revision.h" + // ------------------------------------------------------------------------------------------------ ASSIMP_API unsigned int aiGetVersionRevision () { - // TODO: find a way to update the revision number automatically - return 306; + return SVNRevision; } diff --git a/code/AssimpPCH.h b/code/AssimpPCH.h index f60793fad..fe4e5c83f 100644 --- a/code/AssimpPCH.h +++ b/code/AssimpPCH.h @@ -67,6 +67,13 @@ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. # define _CRT_SECURE_CPP_OVERLOAD_STANDARD_NAMES 1 #endif +// size_t to unsigned int, possible loss of data. +// Yes, the compiler is right with his warning, but this loss of data +// won't be a problem for us. So shut up little boy. +#ifdef _MSC_VER +# pragma warning (disable : 4267) +#endif + // Actually that's not required for MSVC (it is included somewhere in // the STL ..) but it is necessary for build with STLport. #include @@ -75,6 +82,7 @@ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. #include #include #include +#include #include #include #include diff --git a/code/B3DImporter.cpp b/code/B3DImporter.cpp index deee0ad15..cbc95e49a 100644 --- a/code/B3DImporter.cpp +++ b/code/B3DImporter.cpp @@ -39,7 +39,9 @@ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. --------------------------------------------------------------------------- */ -/** @file Implementation of the b3d importer class */ +/** @file B3DImporter.cpp + * @brief Implementation of the b3d importer class + */ #include "AssimpPCH.h" #ifndef ASSIMP_BUILD_NO_B3D_IMPORTER @@ -52,7 +54,7 @@ using namespace Assimp; using namespace std; // ------------------------------------------------------------------------------------------------ -bool B3DImporter::CanRead( const std::string& pFile, IOSystem* pIOHandler) const{ +bool B3DImporter::CanRead( const std::string& pFile, IOSystem* pIOHandler, bool checkSig) const{ int pos=pFile.find_last_of( '.' ); if( pos==string::npos ) return false; diff --git a/code/B3DImporter.h b/code/B3DImporter.h index 60235b759..71f0114cf 100644 --- a/code/B3DImporter.h +++ b/code/B3DImporter.h @@ -56,7 +56,7 @@ namespace Assimp{ class B3DImporter : public BaseImporter{ public: - virtual bool CanRead( const std::string& pFile, IOSystem* pIOHandler) const; + virtual bool CanRead( const std::string& pFile, IOSystem* pIOHandler, bool checkSig) const; protected: diff --git a/code/BVHLoader.cpp b/code/BVHLoader.cpp index cb2d626c2..cf1231f57 100644 --- a/code/BVHLoader.cpp +++ b/code/BVHLoader.cpp @@ -61,18 +61,19 @@ BVHLoader::~BVHLoader() // ------------------------------------------------------------------------------------------------ // Returns whether the class can handle the format of the given file. -bool BVHLoader::CanRead( const std::string& pFile, IOSystem* pIOHandler) const +bool BVHLoader::CanRead( const std::string& pFile, IOSystem* pIOHandler, bool cs) const { // check file extension - std::string::size_type pos = pFile.find_last_of('.'); - // no file extension - can't read - if( pos == std::string::npos) - return false; - std::string extension = pFile.substr( pos); - for( std::string::iterator it = extension.begin(); it != extension.end(); ++it) - *it = tolower( *it); + const std::string extension = GetExtension(pFile); + + if( extension == "bvh") + return true; - return ( extension == ".bvh"); + if ((!extension.length() || cs) && pIOHandler) { + const char* tokens[] = {"HIERARCHY"}; + return SearchFileHeaderForToken(pIOHandler,pFile,tokens,1); + } + return false; } // ------------------------------------------------------------------------------------------------ diff --git a/code/BVHLoader.h b/code/BVHLoader.h index 77ea0261d..dc1c3644d 100644 --- a/code/BVHLoader.h +++ b/code/BVHLoader.h @@ -40,6 +40,10 @@ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. ---------------------------------------------------------------------- */ +/** @file BVHLoader.h + * @brief Biovision BVH import + */ + #ifndef AI_BVHLOADER_H_INC #define AI_BVHLOADER_H_INC @@ -48,9 +52,12 @@ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. namespace Assimp { -/** Loader class to read Motion Capturing data from a .bvh file. This format only contains a -* hierarchy of joints and a series of keyframes for the hierarchy. It contains no actual mesh data, -* but we generate a dummy mesh inside the loader just to be able to see something. +// -------------------------------------------------------------------------------- +/** Loader class to read Motion Capturing data from a .bvh file. + * + * This format only contains a hierarchy of joints and a series of keyframes for + * the hierarchy. It contains no actual mesh data, but we generate a dummy mesh + * inside the loader just to be able to see something. */ class BVHLoader : public BaseImporter { @@ -88,7 +95,7 @@ protected: public: /** Returns whether the class can handle the format of the given file. * See BaseImporter::CanRead() for details. */ - bool CanRead( const std::string& pFile, IOSystem* pIOHandler) const; + bool CanRead( const std::string& pFile, IOSystem* pIOHandler, bool cs) const; protected: /** Called by Importer::GetExtensionList() for each loaded importer. diff --git a/code/BaseImporter.cpp b/code/BaseImporter.cpp index 8c7ce5db1..bd1b6b48c 100644 --- a/code/BaseImporter.cpp +++ b/code/BaseImporter.cpp @@ -39,12 +39,13 @@ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. --------------------------------------------------------------------------- */ -/** @file Implementation of BaseImporter */ +/** @file BaseImporter.cpp + * @brief Implementation of BaseImporter + */ #include "AssimpPCH.h" #include "BaseImporter.h" - using namespace Assimp; @@ -98,7 +99,7 @@ void BaseImporter::SetupProperties(const Importer* pImp) } // ------------------------------------------------------------------------------------------------ -bool BaseImporter::SearchFileHeaderForToken(IOSystem* pIOHandler, +/*static*/ bool BaseImporter::SearchFileHeaderForToken(IOSystem* pIOHandler, const std::string& pFile, const char** tokens, unsigned int numTokens, @@ -142,17 +143,105 @@ bool BaseImporter::SearchFileHeaderForToken(IOSystem* pIOHandler, return false; } +// ------------------------------------------------------------------------------------------------ +// Simple check for file extension +/*static*/ bool BaseImporter::SimpleExtensionCheck (const std::string& pFile, + const char* ext0, + const char* ext1, + const char* ext2) +{ + std::string::size_type pos = pFile.find_last_of('.'); + + // no file extension - can't read + if( pos == std::string::npos) + return false; + + const char* ext_real = & pFile[ pos+1 ]; + if( !ASSIMP_stricmp(ext_real,ext0) ) + return true; + + // check for other, optional, file extensions + if (ext1 && !ASSIMP_stricmp(ext_real,ext1)) + return true; + + if (ext2 && !ASSIMP_stricmp(ext_real,ext2)) + return true; + + return false; +} + +// ------------------------------------------------------------------------------------------------ +// Get file extension from path +/*static*/ std::string BaseImporter::GetExtension (const std::string& pFile) +{ + std::string::size_type pos = pFile.find_last_of('.'); + + // no file extension at all + if( pos == std::string::npos) + return ""; + + std::string ret = pFile.substr(pos+1); + std::transform(ret.begin(),ret.end(),ret.begin(),::tolower); // thanks to Andy Maloney for the hint + return ret; +} + +// ------------------------------------------------------------------------------------------------ +// Check for magic bytes at the beginning of the file. +/* static */ bool BaseImporter::CheckMagicToken(IOSystem* pIOHandler, const std::string& pFile, + const void* _magic, unsigned int num, unsigned int offset, unsigned int size) +{ + ai_assert(size <= 16 && _magic && num && pIOHandler); + + const char* magic = (const char*)_magic; + boost::scoped_ptr pStream (pIOHandler->Open(pFile)); + if (pStream.get() ) + { + // skip to offset + pStream->Seek(offset,aiOrigin_SET); + + // read 'size' characters from the file + char data[16]; + if(size != pStream->Read(data,1,size)) + return false; + + for (unsigned int i = 0; i < num; ++i) { + // also check against big endian versions of tokens with size 2,4 + // that's just for convinience, the chance that we cause conflicts + // is quite low and it can save some lines and prevent nasty bugs + if (2 == size) { + int16_t rev = *((int16_t*)magic); + ByteSwap::Swap(&rev); + if (*((int16_t*)data) == ((int16_t*)magic)[i] || *((int16_t*)data) == rev) + return true; + } + else if (4 == size) { + int32_t rev = *((int32_t*)magic); + ByteSwap::Swap(&rev); + if (*((int32_t*)data) == ((int32_t*)magic)[i] || *((int32_t*)data) == rev) + return true; + } + else { + // any length ... just compare + if(!::memcmp(magic,data,size)) + return true; + } + magic += size; + } + } + return false; +} // ------------------------------------------------------------------------------------------------ // Represents an import request struct LoadRequest { - LoadRequest(const std::string& _file, unsigned int _flags,const BatchLoader::PropertyMap* _map) + LoadRequest(const std::string& _file, unsigned int _flags,const BatchLoader::PropertyMap* _map, unsigned int _id) : file (_file) , flags (_flags) , refCnt (1) , scene (NULL) , loaded (false) + , id (_id) { if (_map) map = *_map; @@ -164,6 +253,7 @@ struct LoadRequest aiScene* scene; bool loaded; BatchLoader::PropertyMap map; + unsigned int id; bool operator== (const std::string& f) { return file == f; @@ -174,6 +264,10 @@ struct LoadRequest // BatchLoader::pimpl data structure struct Assimp::BatchData { + BatchData() + : next_id(0xffff) + {} + // IO system to be used for all imports IOSystem* pIOSystem; @@ -185,6 +279,9 @@ struct Assimp::BatchData // Base path std::string pathBase; + + // Id for next item + unsigned int next_id; }; // ------------------------------------------------------------------------------------------------ @@ -219,13 +316,15 @@ void BatchLoader::SetBasePath (const std::string& pBase) std::string::size_type ss,ss2; if (std::string::npos != (ss = data->pathBase.find_first_of('.'))) { - if (std::string::npos != (ss2 = data->pathBase.find_last_of('\\')) || - std::string::npos != (ss2 = data->pathBase.find_last_of('/'))) + if (std::string::npos != (ss2 = data->pathBase.find_last_of("\\/"))) { if (ss > ss2) data->pathBase.erase(ss2,data->pathBase.length()-ss2); } - else return; + else { + data->pathBase = ""; + return; + } } // make sure the directory is terminated properly @@ -235,7 +334,7 @@ void BatchLoader::SetBasePath (const std::string& pBase) } // ------------------------------------------------------------------------------------------------ -void BatchLoader::AddLoadRequest (const std::string& file, +unsigned int BatchLoader::AddLoadRequest (const std::string& file, unsigned int steps /*= 0*/, const PropertyMap* map /*= NULL*/) { ai_assert(!file.empty()); @@ -245,8 +344,7 @@ void BatchLoader::AddLoadRequest (const std::string& file, // build a full path if this is a relative path and // we have a new base directory given - if (file.length() > 2 && file[1] != ':' && data->pathBase.length()) - { + if (file.length() > 2 && file[1] != ':' && data->pathBase.length()) { real = data->pathBase + file; } else real = file; @@ -258,32 +356,29 @@ void BatchLoader::AddLoadRequest (const std::string& file, // Call IOSystem's path comparison function here if (data->pIOSystem->ComparePaths((*it).file,real)) { + if (map) { + if (!((*it).map == *map)) + continue; + } + else if (!(*it).map.empty()) + continue; + (*it).refCnt++; - return; + return (*it).id; } } // no, we don't have it. So add it to the queue ... - data->requests.push_back(LoadRequest(real,steps,map)); + data->requests.push_back(LoadRequest(real,steps,map,data->next_id)); + return data->next_id++; } // ------------------------------------------------------------------------------------------------ -aiScene* BatchLoader::GetImport (const std::string& file) +aiScene* BatchLoader::GetImport (unsigned int which) { - // no threaded implementation for the moment - std::string real; - - // build a full path if this is a relative path and - // we have a new base directory given - if (file.length() > 2 && file[1] != ':' && data->pathBase.length()) - { - real = data->pathBase + file; - } - else real = file; for (std::list::iterator it = data->requests.begin();it != data->requests.end(); ++it) { - // Call IOSystem's path comparison function here - if (data->pIOSystem->ComparePaths((*it).file,real) && (*it).loaded) + if ((*it).id == which && (*it).loaded) { aiScene* sc = (*it).scene; if (!(--(*it).refCnt)) diff --git a/code/BaseImporter.h b/code/BaseImporter.h index e557faca6..f8359615e 100644 --- a/code/BaseImporter.h +++ b/code/BaseImporter.h @@ -52,6 +52,10 @@ namespace Assimp { class IOSystem; class Importer; +// utility to do char4 to uint32 in a portable manner +#define AI_MAKE_MAGIC(string) ((uint32_t)((string[0] << 24) + \ + (string[1] << 16) + (string[2] << 8) + string[3])) + // --------------------------------------------------------------------------- /** Simple exception class to be thrown if an error occurs while importing. */ class ASSIMP_API ImportErrorException @@ -97,36 +101,48 @@ protected: public: // ------------------------------------------------------------------- /** Returns whether the class can handle the format of the given file. - * @param pFile Path and file name of the file to be examined. - * @param pIOHandler The IO handler to use for accessing any file. - * @return true if the class can read this file, false if not. - * - * @note Sometimes ASSIMP uses this method to determine whether a - * a given file extension is generally supported. In this case the - * file extension is passed in the pFile parameter, pIOHandler is NULL - */ + * + * The implementation should be as quick as possible. A check for + * the file extension is enough. If no suitable loader is found with + * this strategy, CanRead() is called again, the 'checkSig' parameter + * set to true this time. Now the implementation is expected to + * perform a full check of the file format, possibly searching the + * first bytes of the file for magic identifiers or keywords. + * + * @param pFile Path and file name of the file to be examined. + * @param pIOHandler The IO handler to use for accessing any file. + * @param checkSig Set to true if this method is called a second time. + * This time, the implementation may take more time to examine the + * contents of the file to be loaded for magic bytes, keywords, etc + * to be able to load files with unknown/not existent file extensions. + * @return true if the class can read this file, false if not. + * + * @note Sometimes ASSIMP uses this method to determine whether a + * a given file extension is generally supported. In this case the + * file extension is passed in the pFile parameter, pIOHandler is NULL + */ virtual bool CanRead( const std::string& pFile, - IOSystem* pIOHandler) const = 0; + IOSystem* pIOHandler, bool checkSig) const = 0; // ------------------------------------------------------------------- /** Imports the given file and returns the imported data. - * If the import succeeds, ownership of the data is transferred to - * the caller. If the import fails, NULL is returned. The function - * takes care that any partially constructed data is destroyed - * beforehand. - * - * @param pFile Path of the file to be imported. - * @param pIOHandler IO-Handler used to open this and possible other files. - * @return The imported data or NULL if failed. If it failed a - * human-readable error description can be retrieved by calling - * GetErrorText() - * - * @note This function is not intended to be overridden. Implement - * InternReadFile() to do the import. If an exception is thrown somewhere - * in InternReadFile(), this function will catch it and transform it into - * a suitable response to the caller. - */ + * If the import succeeds, ownership of the data is transferred to + * the caller. If the import fails, NULL is returned. The function + * takes care that any partially constructed data is destroyed + * beforehand. + * + * @param pFile Path of the file to be imported. + * @param pIOHandler IO-Handler used to open this and possible other files. + * @return The imported data or NULL if failed. If it failed a + * human-readable error description can be retrieved by calling + * GetErrorText() + * + * @note This function is not intended to be overridden. Implement + * InternReadFile() to do the import. If an exception is thrown somewhere + * in InternReadFile(), this function will catch it and transform it into + * a suitable response to the caller. + */ aiScene* ReadFile( const std::string& pFile, IOSystem* pIOHandler); @@ -135,19 +151,20 @@ public: * @return A description of the last error that occured. An empty * string if there was no error. */ - inline const std::string& GetErrorText() const - { return mErrorText; } + const std::string& GetErrorText() const { + return mErrorText; + } // ------------------------------------------------------------------- /** Called prior to ReadFile(). - * The function is a request to the importer to update its configuration - * basing on the Importer's configuration property list. - * @param pImp Importer instance - * @param ppFlags Post-processing steps to be executed on the data - * returned by the loaders. This value is provided to allow some - * internal optimizations. - */ + * The function is a request to the importer to update its configuration + * basing on the Importer's configuration property list. + * @param pImp Importer instance + * @param ppFlags Post-processing steps to be executed on the data + * returned by the loaders. This value is provided to allow some + * internal optimizations. + */ virtual void SetupProperties(const Importer* pImp /*, unsigned int ppFlags*/); @@ -157,7 +174,7 @@ protected: /** Called by Importer::GetExtensionList() for each loaded importer. * Importer implementations should append all file extensions * which they supported to the passed string. - * Example: "*.blabb;*.quak;*.gug;*.foo" (no comma after the last!) + * Example: "*.blabb;*.quak;*.gug;*.foo" (no delimiter after the last!) * @param append Output string */ virtual void GetExtensionList(std::string& append) = 0; @@ -169,23 +186,36 @@ protected: * expected to be correct. Override this function to implement the * actual importing. *
- * The output scene must meet the following requirements:
- * - at least a root node must be there
- * - aiMesh::mPrimitiveTypes may be 0. The types of primitives - * in the mesh are determined automatically in this case.
- * - the vertex data is stored in a pseudo-indexed "verbose" format. + * The output scene must meet the following requirements:
+ *
    + *
  • At least a root node must be there, even if its only purpose + * is to reference one mesh.
  • + *
  • aiMesh::mPrimitiveTypes may be 0. The types of primitives + * in the mesh are determined automatically in this case.
  • + *
  • the vertex data is stored in a pseudo-indexed "verbose" format. * In fact this means that every vertex that is referenced by * a face is unique. Or the other way round: a vertex index may - * not occur twice in a single aiMesh. - * - aiAnimation::mDuration may be -1. Assimp determines the length + * not occur twice in a single aiMesh.
  • + *
  • aiAnimation::mDuration may be -1. Assimp determines the length * of the animation automatically in this case as the length of - * the longest animation channel. - * - * If the AI_SCENE_FLAGS_INCOMPLETE-Flag is not set:
    - * - at least one mesh must be there
    - * - at least one material must be there
    - * - there may be no meshes with 0 vertices or faces
    - * This won't be checked (except by the validation step), Assimp will + * the longest animation channel.
  • + *
  • aiMesh::mBitangents may be NULL if tangents and normals are + * given. In this case bitangents are computed as the cross product + * between normal and tangent.
  • + *
  • There needn't be a material. If none is there a default material + * is generated. However, it is recommended practice for loaders + * to generate a default material for yourself that matches the + * default material setting for the file format better than Assimp's + * generic default material. Note that default materials *should* + * be named AI_DEFAULT_MATERIAL_NAME if they're just color-shaded + * or AI_DEFAULT_TEXTURED_MATERIAL_NAME if they define a (dummy) + * texture.
  • + *
+ * If the AI_SCENE_FLAGS_INCOMPLETE-Flag is not set:
    + *
  • at least one mesh must be there
  • + *
  • there may be no meshes with 0 vertices or faces
  • + *
+ * This won't be checked (except by the validation step): Assimp will * crash if one of the conditions is not met! * * @param pFile Path of the file to be imported. @@ -218,12 +248,53 @@ protected: unsigned int numTokens, unsigned int searchBytes = 200); + + // ------------------------------------------------------------------- + /** @brief Check whether a file has a specific file extension + * @param pFile Input file + * @param ext0 Extension to check for. Lowercase characters only, no dot! + * @param ext1 Optional second extension + * @param ext2 Optional third extension + * @note Case-insensitive + */ + static bool SimpleExtensionCheck (const std::string& pFile, + const char* ext0, + const char* ext1 = NULL, + const char* ext2 = NULL); + + // ------------------------------------------------------------------- + /** @brief Extract file extension from a string + * @param pFile Input file + * @return Extension without trailing dot, all lowercase + */ + static std::string GetExtension (const std::string& pFile); + + // ------------------------------------------------------------------- + /** @brief Check whether a file starts with one or more magic tokens + * @param pFile Input file + * @param pIOHandler IO system to be used + * @param magic n magic tokens + * @params num Size of magic + * @param offset Offset from file start where tokens are located + * @param Size of one token, in bytes. Maximally 16 bytes. + * @return true if one of the given tokens was found + * + * @note For convinence, the check is also performed for the + * byte-swapped variant of all tokens (big endian). Only for + * tokens of size 2,4. + */ + static bool CheckMagicToken(IOSystem* pIOHandler, const std::string& pFile, + const void* magic, + unsigned int num, + unsigned int offset = 0, + unsigned int size = 4); + #if 0 /** TODO **/ // ------------------------------------------------------------------- /** An utility for all text file loaders. It converts a file to our - * ASCII/UTF8 character set. Special unicode characters are lost. - * - * @param buffer Input buffer. Needn't be terminated with zero. + * ASCII/UTF8 character set. Special unicode characters are lost. + * + * @param buffer Input buffer. Needn't be terminated with zero. * @param length Length of the input buffer, in bytes. Receives the * number of output characters, excluding the terminal char. * @return true if the source format did not match our internal @@ -266,10 +337,18 @@ public: Importer::IntPropertyMap ints; Importer::FloatPropertyMap floats; Importer::StringPropertyMap strings; + + bool operator == (const PropertyMap& prop) const { + return ints == prop.ints && floats == prop.floats && strings == prop.strings; + } + + bool empty () const { + return ints.empty() && floats.empty() && strings.empty(); + } }; - public: + /** Construct a batch loader from a given IO system */ @@ -293,8 +372,10 @@ public: * @param file File to be loaded * @param steps Steps to be executed on the file * @param map Optional configuration properties + * @return 'Load request channel' - an unique ID that can later + * be used to access the imported file data. */ - void AddLoadRequest (const std::string& file, + unsigned int AddLoadRequest (const std::string& file, unsigned int steps = 0, const PropertyMap* map = NULL); @@ -304,11 +385,11 @@ public: * If an import is requested several times, this function * can be called several times, too. * - * @param file File name of the scene + * @param which LRWC returned by AddLoadRequest(). * @return NULL if there is no scene with this file name * in the queue of the scene hasn't been loaded yet. */ - aiScene* GetImport (const std::string& file); + aiScene* GetImport (unsigned int which); /** Waits until all scenes have been loaded. @@ -321,7 +402,6 @@ private: BatchData* data; }; - } // end of namespace Assimp #endif // AI_BASEIMPORTER_H_INC diff --git a/code/BaseProcess.cpp b/code/BaseProcess.cpp index 0ae4d9ab5..ed639fef4 100644 --- a/code/BaseProcess.cpp +++ b/code/BaseProcess.cpp @@ -69,7 +69,7 @@ void BaseProcess::ExecuteOnScene( Importer* pImp) // catch exceptions thrown inside the PostProcess-Step try { - this->Execute(pImp->mScene); + Execute(pImp->mScene); } catch( ImportErrorException* exception) { diff --git a/code/CalcTangentsProcess.cpp b/code/CalcTangentsProcess.cpp index 21bc6a61f..d0204fd20 100644 --- a/code/CalcTangentsProcess.cpp +++ b/code/CalcTangentsProcess.cpp @@ -126,7 +126,7 @@ bool CalcTangentsProcess::ProcessMesh( aiMesh* pMesh, unsigned int meshIndex) const float angleEpsilon = 0.9999f; std::vector vertexDone( pMesh->mNumVertices, false); - const float qnan = std::numeric_limits::quiet_NaN(); + const float qnan = get_qnan(); // create space for the tangents and bitangents pMesh->mTangents = new aiVector3D[pMesh->mNumVertices]; @@ -149,8 +149,10 @@ bool CalcTangentsProcess::ProcessMesh( aiMesh* pMesh, unsigned int meshIndex) // their tangent vectors are set to qnan. for (unsigned int i = 0; i < face.mNumIndices;++i) { - vertexDone[face.mIndices[i]] = true; - meshTang [face.mIndices[i]] = qnan; + register unsigned int idx = face.mIndices[i]; + vertexDone [idx] = true; + meshTang [idx] = qnan; + meshBitang [idx] = qnan; } continue; @@ -218,10 +220,10 @@ bool CalcTangentsProcess::ProcessMesh( aiMesh* pMesh, unsigned int meshIndex) vertexFinder = &_vertexFinder; posEpsilon = ComputePositionEpsilon(pMesh); } - std::vector verticesFound; const float fLimit = cosf(this->configMaxAngle); + std::vector closeVertices; // in the second pass we now smooth out all tangents and bitangents at the same local position // if they are not too far off. @@ -234,12 +236,14 @@ bool CalcTangentsProcess::ProcessMesh( aiMesh* pMesh, unsigned int meshIndex) const aiVector3D& origNorm = pMesh->mNormals[a]; const aiVector3D& origTang = pMesh->mTangents[a]; const aiVector3D& origBitang = pMesh->mBitangents[a]; - std::vector closeVertices; - closeVertices.push_back( a); + closeVertices.clear(); // find all vertices close to that position vertexFinder->FindPositions( origPos, posEpsilon, verticesFound); + closeVertices.reserve (verticesFound.size()+5); + closeVertices.push_back( a); + // look among them for other vertices sharing the same normal and a close-enough tangent/bitangent for( unsigned int b = 0; b < verticesFound.size(); b++) { diff --git a/code/ColladaLoader.cpp b/code/ColladaLoader.cpp index 5189455c0..a892a7f68 100644 --- a/code/ColladaLoader.cpp +++ b/code/ColladaLoader.cpp @@ -67,22 +67,16 @@ ColladaLoader::~ColladaLoader() // ------------------------------------------------------------------------------------------------ // Returns whether the class can handle the format of the given file. -bool ColladaLoader::CanRead( const std::string& pFile, IOSystem* pIOHandler) const +bool ColladaLoader::CanRead( const std::string& pFile, IOSystem* pIOHandler, bool checkSig) const { // check file extension - std::string::size_type pos = pFile.find_last_of('.'); - // no file extension - can't read - if( pos == std::string::npos) - return false; - std::string extension = pFile.substr( pos); - for( std::string::iterator it = extension.begin(); it != extension.end(); ++it) - *it = tolower( *it); - - if( extension == ".dae") + std::string extension = GetExtension(pFile); + + if( extension == "dae") return true; // XML - too generic, we need to open the file and search for typical keywords - if( extension == ".xml") { + if( extension == "xml" || !extension.length() || checkSig) { /* If CanRead() is called in order to check whether we * support a specific file extension in general pIOHandler * might be NULL and it's our duty to return true here. @@ -94,6 +88,13 @@ bool ColladaLoader::CanRead( const std::string& pFile, IOSystem* pIOHandler) con return false; } +// ------------------------------------------------------------------------------------------------ +// Get file extension list +void ColladaLoader::GetExtensionList( std::string& append) +{ + append.append("*.dae"); +} + // ------------------------------------------------------------------------------------------------ // Imports the given file into the given scene structure. void ColladaLoader::InternReadFile( const std::string& pFile, aiScene* pScene, IOSystem* pIOHandler) @@ -166,7 +167,8 @@ aiNode* ColladaLoader::BuildHierarchy( const ColladaParser& pParser, const Colla aiNode* node = new aiNode(); // now setup the name of the node. We take the name if not empty, otherwise the collada ID - if (!pNode->mName.empty()) + // FIX: Workaround for XSI calling the instanced visual scene 'untitled' by default. + if (!pNode->mName.empty() && pNode->mName != "untitled") node->mName.Set(pNode->mName); else if (!pNode->mID.empty()) node->mName.Set(pNode->mID); @@ -632,7 +634,7 @@ void ColladaLoader::AddTexture ( Assimp::MaterialHelper& mat, const ColladaParse _AI_MATKEY_TEXTURE_BASE,type,idx); // mapping mode - int map = map = aiTextureMapMode_Clamp; + int map = aiTextureMapMode_Clamp; if (sampler.mWrapU) map = aiTextureMapMode_Wrap; if (sampler.mWrapU && sampler.mMirrorU) @@ -896,4 +898,4 @@ void ColladaLoader::ConvertPath (aiString& ss) } } -#endif // !! ASSIMP_BUILD_NO_DAE_IMPORTER \ No newline at end of file +#endif // !! ASSIMP_BUILD_NO_DAE_IMPORTER diff --git a/code/ColladaLoader.h b/code/ColladaLoader.h index 845667621..52362b89d 100644 --- a/code/ColladaLoader.h +++ b/code/ColladaLoader.h @@ -90,16 +90,13 @@ protected: public: /** Returns whether the class can handle the format of the given file. * See BaseImporter::CanRead() for details. */ - bool CanRead( const std::string& pFile, IOSystem* pIOHandler) const; + bool CanRead( const std::string& pFile, IOSystem* pIOHandler, bool checkSig) const; protected: /** Called by Importer::GetExtensionList() for each loaded importer. * See BaseImporter::GetExtensionList() for details */ - void GetExtensionList( std::string& append) - { - append.append("*.dae"); - } + void GetExtensionList( std::string& append); /** Imports the given file into the given scene structure. * See BaseImporter::InternReadFile() for details diff --git a/code/ColladaParser.cpp b/code/ColladaParser.cpp index d83d653b3..85a3deb4d 100644 --- a/code/ColladaParser.cpp +++ b/code/ColladaParser.cpp @@ -1618,8 +1618,8 @@ void ColladaParser::ReadSceneLibrary() } else if( mReader->getNodeType() == irr::io::EXN_ELEMENT_END) { - if( strcmp( mReader->getNodeName(), "library_visual_scenes") != 0) - ThrowException( "Expected end of \"library_visual_scenes\" element."); + if( strcmp( mReader->getNodeName(), "library_visual_scenes") == 0) + //ThrowException( "Expected end of \"library_visual_scenes\" element."); break; } @@ -2106,4 +2106,4 @@ Collada::InputType ColladaParser::GetTypeForSemantic( const std::string& pSemant return IT_Invalid; } -#endif // !! ASSIMP_BUILD_NO_DAE_IMPORTER \ No newline at end of file +#endif // !! ASSIMP_BUILD_NO_DAE_IMPORTER diff --git a/code/ColladaParser.h b/code/ColladaParser.h index c26360f41..37b5876b8 100644 --- a/code/ColladaParser.h +++ b/code/ColladaParser.h @@ -202,7 +202,7 @@ protected: /** Reads the text contents of an element, returns NULL if not given. Skips leading whitespace. */ - const char* ColladaParser::TestTextContent(); + const char* TestTextContent(); /** Reads a single bool from current text content */ bool ReadBoolFromTextContent(); diff --git a/code/DXFLoader.cpp b/code/DXFLoader.cpp index bfe029122..c7fe9b803 100644 --- a/code/DXFLoader.cpp +++ b/code/DXFLoader.cpp @@ -39,7 +39,9 @@ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. --------------------------------------------------------------------------- */ -/** @file Implementation of the DXF importer class */ +/** @file DXFLoader.cpp + * @brief Implementation of the DXF importer class + */ #include "AssimpPCH.h" #ifndef ASSIMP_BUILD_NO_DXF_IMPORTER @@ -77,7 +79,7 @@ static aiColor4D g_aclrDxfIndexColors[] = #define AI_DXF_NUM_INDEX_COLORS (sizeof(g_aclrDxfIndexColors)/sizeof(g_aclrDxfIndexColors[0])) // invalid/unassigned color value -aiColor4D g_clrInvalid = aiColor4D(std::numeric_limits::quiet_NaN(),0.f,0.f,1.f); +aiColor4D g_clrInvalid = aiColor4D(get_qnan(),0.f,0.f,1.f); // ------------------------------------------------------------------------------------------------ // Constructor to be privately used by Importer @@ -95,19 +97,15 @@ DXFImporter::~DXFImporter() // ------------------------------------------------------------------------------------------------ // Returns whether the class can handle the format of the given file. -bool DXFImporter::CanRead( const std::string& pFile, IOSystem* pIOHandler) const +bool DXFImporter::CanRead( const std::string& pFile, IOSystem* pIOHandler, bool checkSig) const { - // simple check of file extension is enough for the moment - std::string::size_type pos = pFile.find_last_of('.'); - // no file extension - can't read - if( pos == std::string::npos) - return false; - std::string extension = pFile.substr( pos); + return SimpleExtensionCheck(pFile,"dxf"); +} - return !(extension.length() != 4 || extension[0] != '.' || - extension[1] != 'd' && extension[1] != 'D' || - extension[2] != 'x' && extension[2] != 'X' || - extension[3] != 'f' && extension[3] != 'F'); +// ------------------------------------------------------------------------------------------------ +void DXFImporter::GetExtensionList(std::string& append) +{ + append.append("*.dxf"); } // ------------------------------------------------------------------------------------------------ diff --git a/code/DXFLoader.h b/code/DXFLoader.h index 996ddd4b4..f7c8f0ab7 100644 --- a/code/DXFLoader.h +++ b/code/DXFLoader.h @@ -38,7 +38,9 @@ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. ---------------------------------------------------------------------- */ -/** @file Declaration of the .dxf importer class. */ +/** @file DXFLoader.h + * @brief Declaration of the .dxf importer class. + */ #ifndef AI_DXFLOADER_H_INCLUDED #define AI_DXFLOADER_H_INCLUDED @@ -85,7 +87,8 @@ public: // ------------------------------------------------------------------- /** Returns whether the class can handle the format of the given file. * See BaseImporter::CanRead() for details. */ - bool CanRead( const std::string& pFile, IOSystem* pIOHandler) const; + bool CanRead( const std::string& pFile, IOSystem* pIOHandler, + bool checkSig) const; protected: @@ -93,10 +96,7 @@ protected: /** Called by Importer::GetExtensionList() for each loaded importer. * See BaseImporter::GetExtensionList() for details */ - void GetExtensionList(std::string& append) - { - append.append("*.dxf"); - } + void GetExtensionList(std::string& append); // ------------------------------------------------------------------- /** Imports the given file into the given scene structure. diff --git a/code/DefaultLogger.cpp b/code/DefaultLogger.cpp index 6d6df287d..099b0f2e6 100644 --- a/code/DefaultLogger.cpp +++ b/code/DefaultLogger.cpp @@ -51,6 +51,13 @@ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. #include "StdOStreamLogStream.h" #include "FileLogStream.h" +#ifndef ASSIMP_BUILD_SINGLETHREADED +# include +# include + +boost::mutex loggerMutex; +#endif + namespace Assimp { // ---------------------------------------------------------------------------------- @@ -119,6 +126,11 @@ Logger *DefaultLogger::create(const char* name /*= "AssimpLog.txt"*/, unsigned int defStreams /*= DLS_DEBUGGER | DLS_FILE*/, IOSystem* io /*= NULL*/) { + // enter the mutex here to avoid concurrency problems +#ifndef ASSIMP_BUILD_SINGLETHREADED + boost::mutex::scoped_lock lock(loggerMutex); +#endif + if (m_pLogger && !isNullLogger() ) delete m_pLogger; @@ -146,31 +158,56 @@ Logger *DefaultLogger::create(const char* name /*= "AssimpLog.txt"*/, // ---------------------------------------------------------------------------------- void Logger::debug(const std::string &message) { - ai_assert(message.length()<=Logger::MAX_LOG_MESSAGE_LENGTH); + + // SECURITY FIX: otherwise it's easy to produce overruns ... + if (message.length()>MAX_LOG_MESSAGE_LENGTH) { + ai_assert(false); + return; + } return OnDebug(message.c_str()); } // ---------------------------------------------------------------------------------- void Logger::info(const std::string &message) { - ai_assert(message.length()<=Logger::MAX_LOG_MESSAGE_LENGTH); + + // SECURITY FIX: otherwise it's easy to produce overruns ... + if (message.length()>MAX_LOG_MESSAGE_LENGTH) { + ai_assert(false); + return; + } return OnInfo(message.c_str()); } // ---------------------------------------------------------------------------------- void Logger::warn(const std::string &message) { - ai_assert(message.length()<=Logger::MAX_LOG_MESSAGE_LENGTH); + + // SECURITY FIX: otherwise it's easy to produce overruns ... + if (message.length()>MAX_LOG_MESSAGE_LENGTH) { + ai_assert(false); + return; + } return OnWarn(message.c_str()); } // ---------------------------------------------------------------------------------- void Logger::error(const std::string &message) { - ai_assert(message.length()<=Logger::MAX_LOG_MESSAGE_LENGTH); + + // SECURITY FIX: otherwise it's easy to produce overruns ... + if (message.length()>MAX_LOG_MESSAGE_LENGTH) { + ai_assert(false); + return; + } return OnError(message.c_str()); } // ---------------------------------------------------------------------------------- void DefaultLogger::set( Logger *logger ) { + // enter the mutex here to avoid concurrency problems +#ifndef ASSIMP_BUILD_SINGLETHREADED + boost::mutex::scoped_lock lock(loggerMutex); +#endif + if (!logger)logger = &s_pNullLogger; if (m_pLogger && !isNullLogger() ) delete m_pLogger; @@ -195,6 +232,11 @@ Logger *DefaultLogger::get() // Kills the only instance void DefaultLogger::kill() { + // enter the mutex here to avoid concurrency problems +#ifndef ASSIMP_BUILD_SINGLETHREADED + boost::mutex::scoped_lock lock(loggerMutex); +#endif + if (m_pLogger != &s_pNullLogger)return; delete m_pLogger; m_pLogger = &s_pNullLogger; @@ -243,23 +285,14 @@ void DefaultLogger::OnError( const char* message ) WriteToStreams( msg, Logger::ERR ); } -// ---------------------------------------------------------------------------------- -// Severity setter -void DefaultLogger::setLogSeverity( LogSeverity log_severity ) -{ - m_Severity = log_severity; -} - // ---------------------------------------------------------------------------------- // Attachs a new stream -void DefaultLogger::attachStream( LogStream *pStream, unsigned int severity ) +bool DefaultLogger::attachStream( LogStream *pStream, unsigned int severity ) { if (!pStream) - return; + return false; - // fix (Aramis) - if (0 == severity) - { + if (0 == severity) { severity = Logger::INFO | Logger::ERR | Logger::WARN | Logger::DEBUGGING; } @@ -270,24 +303,23 @@ void DefaultLogger::attachStream( LogStream *pStream, unsigned int severity ) if ( (*it)->m_pStream == pStream ) { (*it)->m_uiErrorSeverity |= severity; - return; + return true; } } LogStreamInfo *pInfo = new LogStreamInfo( severity, pStream ); m_StreamArray.push_back( pInfo ); + return true; } // ---------------------------------------------------------------------------------- // Detatch a stream -void DefaultLogger::detatchStream( LogStream *pStream, unsigned int severity ) +bool DefaultLogger::detatchStream( LogStream *pStream, unsigned int severity ) { if (!pStream) - return; + return false; - // fix (Aramis) - if (0 == severity) - { + if (0 == severity) { severity = Logger::INFO | Logger::ERR | Logger::WARN | Logger::DEBUGGING; } @@ -303,15 +335,17 @@ void DefaultLogger::detatchStream( LogStream *pStream, unsigned int severity ) m_StreamArray.erase( it ); break; } + return true; } } + return false; } // ---------------------------------------------------------------------------------- // Constructor DefaultLogger::DefaultLogger(LogSeverity severity) - : m_Severity ( severity ) + : Logger ( severity ) , noRepeatMsg (false) , lastLen( 0 ) { diff --git a/code/FindDegenerates.cpp b/code/FindDegenerates.cpp index 3ab4b1b19..c1d7f134b 100644 --- a/code/FindDegenerates.cpp +++ b/code/FindDegenerates.cpp @@ -39,8 +39,8 @@ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. --------------------------------------------------------------------------- */ -/** @file Implementation of the DeterminePTypeHelperProcess and - * SortByPTypeProcess post-process steps. +/** @file FindDegenerates.cpp + * @brief Implementation of the FindDegenerates post-process step. */ #include "AssimpPCH.h" @@ -54,8 +54,8 @@ using namespace Assimp; // ------------------------------------------------------------------------------------------------ // Constructor to be privately used by Importer FindDegeneratesProcess::FindDegeneratesProcess() -{ -} +: configRemoveDegenerates (false) +{} // ------------------------------------------------------------------------------------------------ // Destructor, private as well @@ -71,83 +71,144 @@ bool FindDegeneratesProcess::IsActive( unsigned int pFlags) const return 0 != (pFlags & aiProcess_FindDegenerates); } +// ------------------------------------------------------------------------------------------------ +// Setup import configuration +void FindDegeneratesProcess::SetupProperties(const Importer* pImp) +{ + // Get the current value of AI_CONFIG_PP_FD_REMOVE + configRemoveDegenerates = (0 != pImp->GetPropertyInteger(AI_CONFIG_PP_FD_REMOVE,0)); +} + // ------------------------------------------------------------------------------------------------ // Executes the post processing step on the given imported data. void FindDegeneratesProcess::Execute( aiScene* pScene) { DefaultLogger::get()->debug("FindDegeneratesProcess begin"); - for (unsigned int i = 0; i < pScene->mNumMeshes;++i) - { - aiMesh* mesh = pScene->mMeshes[i]; - mesh->mPrimitiveTypes = 0; - - unsigned int deg = 0; - for (unsigned int a = 0; a < mesh->mNumFaces; ++a) - { - aiFace& face = mesh->mFaces[a]; - bool first = true; - - // check whether the face contains degenerated entries - for (register unsigned int i = 0; i < face.mNumIndices; ++i) - { - for (register unsigned int a = i+1; a < face.mNumIndices; ++a) - { - if (mesh->mVertices[face.mIndices[i]] == mesh->mVertices[face.mIndices[a]]) - { - // we have found a matching vertex position - // remove the corresponding index from the array - for (unsigned int m = a; m < face.mNumIndices-1; ++m) - { - face.mIndices[m] = face.mIndices[m+1]; - } - --a; - --face.mNumIndices; - - // NOTE: we set the removed vertex index to an unique value - // to make sure the developer gets notified when his - // application attemps to access this data. - face.mIndices[face.mNumIndices] = 0xdeadbeef; - - - if(first) - { - ++deg; - first = false; - } - } - } - } - - // We need to update the primitive flags array of the mesh. - // Unfortunately it is not possible to execute - // FindDegenerates before DeterminePType. The latter does - // nothing if the primitive flags have already been set by - // the loader - our changes would be ignored. Although - // we could use some tricks regarding - i.e setting - // mPrimitiveTypes to 0 in every case - but this is the cleanest - // way and causes no additional dependencies in the pipeline. - switch (face.mNumIndices) - { - case 1u: - mesh->mPrimitiveTypes |= aiPrimitiveType_POINT; - break; - case 2u: - mesh->mPrimitiveTypes |= aiPrimitiveType_LINE; - break; - case 3u: - mesh->mPrimitiveTypes |= aiPrimitiveType_TRIANGLE; - break; - default: - mesh->mPrimitiveTypes |= aiPrimitiveType_POLYGON; - break; - }; - } - if (deg && !DefaultLogger::isNullLogger()) - { - char s[64]; - ASSIMP_itoa10(s,deg); - DefaultLogger::get()->warn(std::string("Found ") + s + " degenerated primitives"); - } + for (unsigned int i = 0; i < pScene->mNumMeshes;++i){ + ExecuteOnMesh( pScene->mMeshes[i]); } DefaultLogger::get()->debug("FindDegeneratesProcess finished"); } + +// ------------------------------------------------------------------------------------------------ +// Executes the post processing step on the given imported mesh +void FindDegeneratesProcess::ExecuteOnMesh( aiMesh* mesh) +{ + mesh->mPrimitiveTypes = 0; + + std::vector remove_me; + if (configRemoveDegenerates) + remove_me.resize(mesh->mNumFaces,false); + + unsigned int deg = 0; + for (unsigned int a = 0; a < mesh->mNumFaces; ++a) + { + aiFace& face = mesh->mFaces[a]; + bool first = true; + + // check whether the face contains degenerated entries + for (register unsigned int i = 0; i < face.mNumIndices; ++i) + { + for (register unsigned int t = i+1; t < face.mNumIndices; ++t) + { + if (mesh->mVertices[face.mIndices[i]] == mesh->mVertices[face.mIndices[t]]) + { + // we have found a matching vertex position + // remove the corresponding index from the array + --face.mNumIndices; + for (unsigned int m = t; m < face.mNumIndices; ++m) + { + face.mIndices[m] = face.mIndices[m+1]; + } + --t; + + // NOTE: we set the removed vertex index to an unique value + // to make sure the developer gets notified when his + // application attemps to access this data. + face.mIndices[face.mNumIndices] = 0xdeadbeef; + + if(first) + { + ++deg; + first = false; + } + + if (configRemoveDegenerates) { + remove_me[a] = true; + goto evil_jump_outside; // hrhrhrh ... yeah, this rocks baby! + } + } + } + } + + // We need to update the primitive flags array of the mesh. + // Unfortunately it is not possible to execute + // FindDegenerates before DeterminePType. The latter does + // nothing if the primitive flags have already been set by + // the loader - our changes would be ignored. Although + // we could use some tricks regarding - i.e setting + // mPrimitiveTypes to 0 in every case - but this is the cleanest + // way and causes no additional dependencies in the pipeline. + switch (face.mNumIndices) + { + case 1u: + mesh->mPrimitiveTypes |= aiPrimitiveType_POINT; + break; + case 2u: + mesh->mPrimitiveTypes |= aiPrimitiveType_LINE; + break; + case 3u: + mesh->mPrimitiveTypes |= aiPrimitiveType_TRIANGLE; + break; + default: + mesh->mPrimitiveTypes |= aiPrimitiveType_POLYGON; + break; + }; +evil_jump_outside: + continue; + } + + // If AI_CONFIG_PP_FD_REMOVE is true, remove degenerated faces from the import + if (configRemoveDegenerates && deg) { + unsigned int n = 0; + for (unsigned int a = 0; a < mesh->mNumFaces; ++a) + { + aiFace& face_src = mesh->mFaces[a]; + if (!remove_me[a]) { + aiFace& face_dest = mesh->mFaces[n++]; + + // Do a manual copy, keep the index array + face_dest.mNumIndices = face_src.mNumIndices; + face_dest.mIndices = face_src.mIndices; + + // clear source + face_src.mNumIndices = 0; + face_src.mIndices = NULL; + } + else { + // Otherwise delete it if we don't need this face + delete[] face_src.mIndices; + face_src.mIndices = NULL; + face_src.mNumIndices = 0; + } + } + // Just leave the rest of the array unreferenced, we don't care for now + mesh->mNumFaces = n; + if (!mesh->mNumFaces) { + // WTF!? + // OK ... for completeness and because I'm not yet tired, + // let's write code that willl hopefully never be called + // (famous last words) + + // OK ... bad idea. + throw new ImportErrorException("Mesh is empty after removal of degenerated primitives ... WTF!?"); + } + } + + if (deg && !DefaultLogger::isNullLogger()) + { + char s[64]; + ASSIMP_itoa10(s,deg); + DefaultLogger::get()->warn(std::string("Found ") + s + " degenerated primitives"); + } +} diff --git a/code/FindDegenerates.h b/code/FindDegenerates.h index 15abb3af5..e582f1525 100644 --- a/code/FindDegenerates.h +++ b/code/FindDegenerates.h @@ -66,14 +66,44 @@ protected: ~FindDegeneratesProcess(); public: + // ------------------------------------------------------------------- + // Check whether step is active bool IsActive( unsigned int pFlags) const; // ------------------------------------------------------------------- + // Execute step on a given scene void Execute( aiScene* pScene); + // ------------------------------------------------------------------- + // Setup import settings + void SetupProperties(const Importer* pImp); + + // ------------------------------------------------------------------- + // Execute step on a given mesh + void ExecuteOnMesh( aiMesh* mesh); + + + // ------------------------------------------------------------------- + /** @brief Enable the instant removal of degenerated primitives + * @param d hm ... difficult to guess what this means, hu!? + */ + void EnableInstantRemoval(bool d) { + configRemoveDegenerates = d; + } + + // ------------------------------------------------------------------- + /** @brief Check whether instant removal is currently enabled + * @return ... + */ + bool IsInstantRemoval() const { + return configRemoveDegenerates; + } + private: + //! Configuration option: remove degenerates faces immediately + bool configRemoveDegenerates; }; } diff --git a/code/GenFaceNormalsProcess.cpp b/code/GenFaceNormalsProcess.cpp index d00086358..8299aafe8 100644 --- a/code/GenFaceNormalsProcess.cpp +++ b/code/GenFaceNormalsProcess.cpp @@ -111,7 +111,7 @@ bool GenFaceNormalsProcess::GenMeshFaceNormals (aiMesh* pMesh) // allocate an array to hold the output normals pMesh->mNormals = new aiVector3D[pMesh->mNumVertices]; - const float qnan = std::numeric_limits::quiet_NaN(); + const float qnan = get_qnan(); // iterate through all faces and compute per-face normals but store // them per-vertex. diff --git a/code/HMPFileData.h b/code/HMPFileData.h index b236bc376..5e14a3538 100644 --- a/code/HMPFileData.h +++ b/code/HMPFileData.h @@ -46,17 +46,15 @@ namespace HMP { #include "./../include/Compiler/pushpack1.h" -// to make it easier for ourselfes, we test the magic word against both "endianesses" -#define HMP_MAKE(string) ((uint32_t)((string[0] << 24) + (string[1] << 16) + (string[2] << 8) + string[3])) +// to make it easier for us, we test the magic word against both "endianesses" +#define AI_HMP_MAGIC_NUMBER_BE_4 AI_MAKE_MAGIC("HMP4") +#define AI_HMP_MAGIC_NUMBER_LE_4 AI_MAKE_MAGIC("4PMH") -#define AI_HMP_MAGIC_NUMBER_BE_4 HMP_MAKE("HMP4") -#define AI_HMP_MAGIC_NUMBER_LE_4 HMP_MAKE("4PMH") +#define AI_HMP_MAGIC_NUMBER_BE_5 AI_MAKE_MAGIC("HMP5") +#define AI_HMP_MAGIC_NUMBER_LE_5 AI_MAKE_MAGIC("5PMH") -#define AI_HMP_MAGIC_NUMBER_BE_5 HMP_MAKE("HMP5") -#define AI_HMP_MAGIC_NUMBER_LE_5 HMP_MAKE("5PMH") - -#define AI_HMP_MAGIC_NUMBER_BE_7 HMP_MAKE("HMP7") -#define AI_HMP_MAGIC_NUMBER_LE_7 HMP_MAKE("7PMH") +#define AI_HMP_MAGIC_NUMBER_BE_7 AI_MAKE_MAGIC("HMP7") +#define AI_HMP_MAGIC_NUMBER_LE_7 AI_MAKE_MAGIC("7PMH") // --------------------------------------------------------------------------- /** Data structure for the header of a HMP5 file. diff --git a/code/HMPLoader.cpp b/code/HMPLoader.cpp index f62f6779f..7d54b6bce 100644 --- a/code/HMPLoader.cpp +++ b/code/HMPLoader.cpp @@ -67,25 +67,34 @@ HMPImporter::~HMPImporter() // ------------------------------------------------------------------------------------------------ // Returns whether the class can handle the format of the given file. -bool HMPImporter::CanRead( const std::string& pFile, IOSystem* pIOHandler) const +bool HMPImporter::CanRead( const std::string& pFile, IOSystem* pIOHandler, bool cs) const { - (void)pIOHandler; //this avoids the compiler warning of unused element - // simple check of file extension is enough for the moment - std::string::size_type pos = pFile.find_last_of('.'); - // no file extension - can't read - if( pos == std::string::npos)return false; - std::string extension = pFile.substr( pos); + const std::string extension = GetExtension(pFile); + if (extension == "hmp" ) + return true; - for( std::string::iterator it = extension.begin(); it != extension.end(); ++it) - *it = tolower( *it); + // if check for extension is not enough, check for the magic tokens + if (!extension.length() || cs) { + uint32_t tokens[3]; + tokens[0] = AI_HMP_MAGIC_NUMBER_LE_4; + tokens[1] = AI_HMP_MAGIC_NUMBER_LE_5; + tokens[2] = AI_HMP_MAGIC_NUMBER_LE_7; + return CheckMagicToken(pIOHandler,pFile,tokens,3,0); + } + return false; +} - return extension == ".hmp"; +// ------------------------------------------------------------------------------------------------ +// Get list of all file extensions that are handled by this loader +void HMPImporter::GetExtensionList(std::string& append) +{ + append.append("*.hmp"); } // ------------------------------------------------------------------------------------------------ // Imports the given file into the given scene structure. void HMPImporter::InternReadFile( const std::string& pFile, - aiScene* _pScene, IOSystem* _pIOHandler) + aiScene* _pScene, IOSystem* _pIOHandler) { pScene = _pScene; pIOHandler = _pIOHandler; @@ -225,7 +234,8 @@ void HMPImporter::InternReadFile_HMP5( ) } // generate texture coordinates if necessary - if (pcHeader->numskins)GenerateTextureCoords(width,height); + if (pcHeader->numskins) + GenerateTextureCoords(width,height); // now build a list of faces CreateOutputFaceList(width,height); @@ -477,7 +487,7 @@ void HMPImporter::GenerateTextureCoords( for (unsigned int y = 0; y < height;++y) { for (unsigned int x = 0; x < width;++x,++uv) { - uv->y = 1.0f-fY*y; + uv->y = fY*y; uv->x = fX*x; uv->z = 0.0f; } diff --git a/code/HMPLoader.h b/code/HMPLoader.h index 441d113c2..2344f364b 100644 --- a/code/HMPLoader.h +++ b/code/HMPLoader.h @@ -37,9 +37,9 @@ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. ---------------------------------------------------------------------- */ -//! -//! @file Declaration of the HMP importer class -//! +/** @file HMPLoader.h + * @brief Declaration of the HMP importer class + */ #ifndef AI_HMPLOADER_H_INCLUDED #define AI_HMPLOADER_H_INCLUDED @@ -75,8 +75,10 @@ public: // ------------------------------------------------------------------- /** Returns whether the class can handle the format of the given file. - * See BaseImporter::CanRead() for details. */ - bool CanRead( const std::string& pFile, IOSystem* pIOHandler) const; + * See BaseImporter::CanRead() for details. + */ + bool CanRead( const std::string& pFile, IOSystem* pIOHandler, + bool checkSig) const; protected: @@ -85,10 +87,7 @@ protected: /** Called by Importer::GetExtensionList() for each loaded importer. * See BaseImporter::GetExtensionList() for details */ - void GetExtensionList(std::string& append) - { - append.append("*.hmp"); - } + void GetExtensionList(std::string& append); // ------------------------------------------------------------------- /** Imports the given file into the given scene structure. diff --git a/code/HalfLifeFileData.h b/code/HalfLifeFileData.h index 28c1ed983..e239f1998 100644 --- a/code/HalfLifeFileData.h +++ b/code/HalfLifeFileData.h @@ -57,10 +57,10 @@ namespace Assimp { namespace MDL { // magic bytes used in Half Life 2 MDL models -#define AI_MDL_MAGIC_NUMBER_BE_HL2a MDL_MAKE("IDST") -#define AI_MDL_MAGIC_NUMBER_LE_HL2a MDL_MAKE("TSDI") -#define AI_MDL_MAGIC_NUMBER_BE_HL2b MDL_MAKE("IDSQ") -#define AI_MDL_MAGIC_NUMBER_LE_HL2b MDL_MAKE("QSDI") +#define AI_MDL_MAGIC_NUMBER_BE_HL2a AI_MAKE_MAGIC("IDST") +#define AI_MDL_MAGIC_NUMBER_LE_HL2a AI_MAKE_MAGIC("TSDI") +#define AI_MDL_MAGIC_NUMBER_BE_HL2b AI_MAKE_MAGIC("IDSQ") +#define AI_MDL_MAGIC_NUMBER_LE_HL2b AI_MAKE_MAGIC("QSDI") // --------------------------------------------------------------------------- /** \struct Header_HL2 diff --git a/code/IRRLoader.cpp b/code/IRRLoader.cpp index f3622badd..266ad1ffb 100644 --- a/code/IRRLoader.cpp +++ b/code/IRRLoader.cpp @@ -39,7 +39,9 @@ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. --------------------------------------------------------------------------- */ -/** @file Implementation of the Irr importer class */ +/** @file IRRLoader.cpp + * @brief Implementation of the Irr importer class + */ #include "AssimpPCH.h" @@ -81,26 +83,17 @@ IRRImporter::~IRRImporter() // ------------------------------------------------------------------------------------------------ // Returns whether the class can handle the format of the given file. -bool IRRImporter::CanRead( const std::string& pFile, IOSystem* pIOHandler) const +bool IRRImporter::CanRead( const std::string& pFile, IOSystem* pIOHandler, bool checkSig) const { /* NOTE: A simple check for the file extension is not enough * here. Irrmesh and irr are easy, but xml is too generic * and could be collada, too. So we need to open the file and * search for typical tokens. */ - - std::string::size_type pos = pFile.find_last_of('.'); - - // no file extension - can't read - if( pos == std::string::npos) - return false; - - std::string extension = pFile.substr( pos); - for (std::string::iterator i = extension.begin(); i != extension.end();++i) - *i = ::tolower(*i); - - if (extension == ".irr")return true; - else if (extension == ".xml") + const std::string extension = GetExtension(pFile); + + if (extension == "irr")return true; + else if (extension == "xml" || checkSig) { /* If CanRead() is called in order to check whether we * support a specific file extension in general pIOHandler @@ -128,11 +121,13 @@ void IRRImporter::SetupProperties(const Importer* pImp) { // read the output frame rate of all node animation channels fps = pImp->GetPropertyInteger(AI_CONFIG_IMPORT_IRR_ANIM_FPS,100); - if (!fps) - { + if (fps < 10.) { DefaultLogger::get()->error("IRR: Invalid FPS configuration"); fps = 100; } + + // AI_CONFIG_FAVOUR_SPEED + configSpeedFlag = (0 != pImp->GetPropertyInteger(AI_CONFIG_FAVOUR_SPEED,0)); } // ------------------------------------------------------------------------------------------------ @@ -595,7 +590,7 @@ void IRRImporter::ComputeAnimations(Node* root, aiNode* real, std::vector mat->mNumAllocated) { delete[] mat->mProperties; - mat->mProperties = new aiMaterialProperty*[p.size()]; + mat->mProperties = new aiMaterialProperty*[p.size()*2]; + + mat->mNumAllocated = p.size()*2; } mat->mNumProperties = (unsigned int)p.size(); ::memcpy(mat->mProperties,&p[0],sizeof(void*)*mat->mNumProperties); @@ -680,7 +677,7 @@ void IRRImporter::GenerateGraph(Node* root,aiNode* rootOut ,aiScene* scene, // Get the loaded mesh from the scene and add it to // the list of all scenes to be attached to the // graph we're currently building - aiScene* scene = batch.GetImport(root->meshPath); + aiScene* scene = batch.GetImport(root->id); if (!scene) { DefaultLogger::get()->error("IRR: Unable to load external file: " @@ -688,6 +685,8 @@ void IRRImporter::GenerateGraph(Node* root,aiNode* rootOut ,aiScene* scene, break; } attach.push_back(AttachmentInfo(scene,rootOut)); + +#if 0 meshTrafoAssign = 1; // If the root node of the scene is animated - and *this* node @@ -721,8 +720,9 @@ void IRRImporter::GenerateGraph(Node* root,aiNode* rootOut ,aiScene* scene, } } } - if (1 == meshTrafoAssign) - scene->mRootNode->mTransformation *= AI_TO_IRR_MATRIX; +#endif + // if (1 == meshTrafoAssign) + // scene->mRootNode->mTransformation = AI_TO_IRR_MATRIX * scene->mRootNode->mTransformation; // Now combine the material we've loaded for this mesh @@ -748,7 +748,7 @@ void IRRImporter::GenerateGraph(Node* root,aiNode* rootOut ,aiScene* scene, // NOTE: Each mesh should have exactly one material assigned, // but we do it in a separate loop if this behaviour changes - // in the future. + // in future. for (unsigned int i = 0; i < scene->mNumMeshes;++i) { // Process material flags @@ -901,8 +901,7 @@ void IRRImporter::GenerateGraph(Node* root,aiNode* rootOut ,aiScene* scene, rootOut->mNumMeshes = (unsigned int)meshes.size() - oldMeshSize; rootOut->mMeshes = new unsigned int[rootOut->mNumMeshes]; - for (unsigned int a = 0; a < rootOut->mNumMeshes;++a) - { + for (unsigned int a = 0; a < rootOut->mNumMeshes;++a) { rootOut->mMeshes[a] = oldMeshSize+a; } } @@ -913,6 +912,7 @@ void IRRImporter::GenerateGraph(Node* root,aiNode* rootOut ,aiScene* scene, // Now compute the final local transformation matrix of the // node from the given translation, rotation and scaling values. // (the rotation is given in Euler angles, XYZ order) + std::swap((float&)root->rotation.z,(float&)root->rotation.y); rootOut->mTransformation.FromEulerAnglesXYZ(AI_DEG_TO_RAD(root->rotation) ); // apply scaling @@ -920,20 +920,20 @@ void IRRImporter::GenerateGraph(Node* root,aiNode* rootOut ,aiScene* scene, mat.a1 *= root->scaling.x; mat.b1 *= root->scaling.x; mat.c1 *= root->scaling.x; - mat.a2 *= root->scaling.y; - mat.b2 *= root->scaling.y; - mat.c2 *= root->scaling.y; - mat.a3 *= root->scaling.z; - mat.b3 *= root->scaling.z; - mat.c3 *= root->scaling.z; + mat.a2 *= root->scaling.z; + mat.b2 *= root->scaling.z; + mat.c2 *= root->scaling.z; + mat.a3 *= root->scaling.y; + mat.b3 *= root->scaling.y; + mat.c3 *= root->scaling.y; // apply translation mat.a4 += root->position.x; - mat.b4 += root->position.y; - mat.c4 += root->position.z; + mat.b4 += root->position.z; + mat.c4 += root->position.y; - if (meshTrafoAssign == 2) - mat *= AI_TO_IRR_MATRIX; + //if (meshTrafoAssign == 2) + // mat *= AI_TO_IRR_MATRIX; // now compute animations for the node ComputeAnimations(root,rootOut, anims); @@ -1446,7 +1446,7 @@ void IRRImporter::InternReadFile( const std::string& pFile, } else { - batch.AddLoadRequest(prop.value,pp,&map); + curNode->id = batch.AddLoadRequest(prop.value,pp,&map); curNode->meshPath = prop.value; } } @@ -1528,8 +1528,7 @@ void IRRImporter::InternReadFile( const std::string& pFile, /* Now iterate through all cameras and compute their final (horizontal) FOV */ for (std::vector::iterator it = cameras.begin(), end = cameras.end(); - it != end; ++it) - { + it != end; ++it) { aiCamera* cam = *it; if (cam->mAspect) // screen aspect could be missing { @@ -1625,8 +1624,8 @@ void IRRImporter::InternReadFile( const std::string& pFile, * attachment points in the scenegraph. */ SceneCombiner::MergeScenes(&pScene,tempScene,attach, - AI_INT_MERGE_SCENE_GEN_UNIQUE_MATNAMES | - AI_INT_MERGE_SCENE_GEN_UNIQUE_NAMES); + AI_INT_MERGE_SCENE_GEN_UNIQUE_NAMES | (!configSpeedFlag ? ( + AI_INT_MERGE_SCENE_GEN_UNIQUE_NAMES_IF_NECESSARY | AI_INT_MERGE_SCENE_GEN_UNIQUE_MATNAMES) : 0)); /* If we have no meshes | no materials now set the INCOMPLETE @@ -1639,11 +1638,6 @@ void IRRImporter::InternReadFile( const std::string& pFile, pScene->mFlags |= AI_SCENE_FLAGS_INCOMPLETE; } - - // transformation matrix to convert from IRRMESH to ASSIMP coordinates - pScene->mRootNode->mTransformation *= AI_TO_IRR_MATRIX; - - /* Finished ... everything destructs automatically and all * temporary scenes have already been deleted by MergeScenes() */ diff --git a/code/IRRLoader.h b/code/IRRLoader.h index bf7678321..d8d796de2 100644 --- a/code/IRRLoader.h +++ b/code/IRRLoader.h @@ -39,8 +39,9 @@ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ -/** @file Declaration of the .irrMesh (Irrlight Engine Mesh Format) - importer class. +/** @file IRRLoader.h + * @brief Declaration of the .irrMesh (Irrlight Engine Mesh Format) + * importer class. */ #ifndef AI_IRRLOADER_H_INCLUDED #define AI_IRRLOADER_H_INCLUDED @@ -75,7 +76,8 @@ public: /** Returns whether the class can handle the format of the given file. * See BaseImporter::CanRead() for details. */ - bool CanRead( const std::string& pFile, IOSystem* pIOHandler) const; + bool CanRead( const std::string& pFile, IOSystem* pIOHandler, + bool checkSig) const; protected: @@ -203,6 +205,7 @@ private: // Meshes: path to the mesh to be loaded std::string meshPath; + unsigned int id; // Meshes: List of materials to be assigned // along with their corresponding material flags @@ -297,8 +300,11 @@ private: private: + /** Configuration option: desired output FPS */ double fps; + /** Configuration option: speed flag was set? */ + bool configSpeedFlag; }; } // end of namespace Assimp diff --git a/code/IRRMeshLoader.cpp b/code/IRRMeshLoader.cpp index 6dab0d319..b2df463c5 100644 --- a/code/IRRMeshLoader.cpp +++ b/code/IRRMeshLoader.cpp @@ -67,26 +67,17 @@ IRRMeshImporter::~IRRMeshImporter() // ------------------------------------------------------------------------------------------------ // Returns whether the class can handle the format of the given file. -bool IRRMeshImporter::CanRead( const std::string& pFile, IOSystem* pIOHandler) const +bool IRRMeshImporter::CanRead( const std::string& pFile, IOSystem* pIOHandler, bool checkSig) const { /* NOTE: A simple check for the file extension is not enough * here. Irrmesh and irr are easy, but xml is too generic * and could be collada, too. So we need to open the file and * search for typical tokens. */ + const std::string extension = GetExtension(pFile); - std::string::size_type pos = pFile.find_last_of('.'); - - // no file extension - can't read - if( pos == std::string::npos) - return false; - - std::string extension = pFile.substr( pos); - for (std::string::iterator i = extension.begin(); i != extension.end();++i) - *i = ::tolower(*i); - - if (extension == ".irrmesh")return true; - else if (extension == ".xml") + if (extension == "irrmesh")return true; + else if (extension == "xml" || checkSig) { /* If CanRead() is called to check whether the loader * supports a specific file extension in general we @@ -99,6 +90,14 @@ bool IRRMeshImporter::CanRead( const std::string& pFile, IOSystem* pIOHandler) c return false; } +// ------------------------------------------------------------------------------------------------ +// Get a list of all file extensions which are handled by this class +void IRRMeshImporter::GetExtensionList(std::string& append) +{ + // fixme: consider cleaner handling of xml extension + append.append("*.xml;*.irrmesh"); +} + // ------------------------------------------------------------------------------------------------ // Imports the given file into the given scene structure. void IRRMeshImporter::InternReadFile( const std::string& pFile, diff --git a/code/IRRMeshLoader.h b/code/IRRMeshLoader.h index ab5137fc3..6d9b71173 100644 --- a/code/IRRMeshLoader.h +++ b/code/IRRMeshLoader.h @@ -38,8 +38,10 @@ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. ---------------------------------------------------------------------- */ -/** @file Declaration of the .irrMesh (Irrlight Engine Mesh Format) - importer class. */ +/** @file IRRMeshLoader.h + * @brief Declaration of the .irrMesh (Irrlight Engine Mesh Format) + * importer class. + */ #ifndef AI_IRRMESHLOADER_H_INCLUDED #define AI_IRRMESHLOADER_H_INCLUDED @@ -72,7 +74,8 @@ public: /** Returns whether the class can handle the format of the given file. * See BaseImporter::CanRead() for details. */ - bool CanRead( const std::string& pFile, IOSystem* pIOHandler) const; + bool CanRead( const std::string& pFile, IOSystem* pIOHandler, + bool checkSig) const; protected: @@ -80,16 +83,7 @@ protected: /** Called by Importer::GetExtensionList() for each loaded importer. * See BaseImporter::GetExtensionList() for details */ - void GetExtensionList(std::string& append) - { - - /* NOTE: The file extenxsion .xml is too generic. We'll - * need to open the file in CanRead() and check whether it is - * a real irrlicht file - */ - - append.append("*.xml;*.irrmesh"); - } + void GetExtensionList(std::string& append); // ------------------------------------------------------------------- /** Imports the given file into the given scene structure. diff --git a/code/IRRShared.cpp b/code/IRRShared.cpp index bc09d0404..8f2b53474 100644 --- a/code/IRRShared.cpp +++ b/code/IRRShared.cpp @@ -294,7 +294,11 @@ aiMaterial* IrrlichtBase::ParseMaterial(unsigned int& matFlags) // material type (shader) if (prop.name == "Type") { - if (prop.value == "trans_vertex_alpha") + if (prop.value == "solid") + { + // default material ... + } + else if (prop.value == "trans_vertex_alpha") { matFlags = AI_IRRMESH_MAT_trans_vertex_alpha; } diff --git a/code/Importer.cpp b/code/Importer.cpp index 3cbcf7573..87502b453 100644 --- a/code/Importer.cpp +++ b/code/Importer.cpp @@ -43,6 +43,14 @@ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. #include "AssimpPCH.h" +/* Uncomment this line to prevent Assimp from catching unknown exceptions. + * + * Note that any Exception except ImportErrorException may lead to + * undefined behaviour -> loaders could remain in an unusable state and + * further imports with the same Importer instance could fail/crash/burn ... + */ +#define ASSIMP_CATCH_GLOBAL_EXCEPTIONS + // ======================================================================================= // Internal headers // ======================================================================================= @@ -135,6 +143,20 @@ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. #ifndef AI_BUILD_NO_TERRAGEN_IMPORTER # include "TerragenLoader.h" #endif +//#ifndef AI_BUILD_NO_CSM_IMPORTER +//# include "CSMLoader.h" +//#endif +#ifndef AI_BUILD_NO_3D_IMPORTER +# include "UnrealLoader.h" +#endif + + + + +#ifndef AI_BUILD_NO_LWS_IMPORTER +# include "LWSLoader.h" +#endif + // ======================================================================================= // PostProcess-Steps @@ -325,6 +347,18 @@ Importer::Importer() #if (!defined AI_BUILD_NO_TERRAGEN_IMPORTER) mImporter.push_back( new TerragenImporter()); #endif +//#if (!defined AI_BUILD_NO_CSM_IMPORTER) +// mImporter.push_back( new CSMImporter()); +//#endif +#if (!defined AI_BUILD_NO_3D_IMPORTER) + mImporter.push_back( new UnrealImporter()); +#endif + + + +#if (!defined AI_BUILD_NO_LWS_IMPORTER) + mImporter.push_back( new LWSImporter()); +#endif // ====================================================================== // Add an instance of each post processing step here in the order @@ -333,10 +367,6 @@ Importer::Importer() // ====================================================================== mPostProcessingSteps.reserve(25); -#if (!defined AI_BUILD_NO_VALIDATEDS_PROCESS) - mPostProcessingSteps.push_back( new ValidateDSProcess()); -#endif - #if (!defined AI_BUILD_NO_REMOVEVC_PROCESS) mPostProcessingSteps.push_back( new RemoveVCProcess()); #endif @@ -548,10 +578,9 @@ bool Importer::IsDefaultIOHandler() return mIsDefaultHandler; } -#ifdef _DEBUG // ------------------------------------------------------------------------------------------------ // Validate post process step flags -bool ValidateFlags(unsigned int pFlags) +bool _ValidateFlags(unsigned int pFlags) { if (pFlags & aiProcess_GenSmoothNormals && pFlags & aiProcess_GenNormals) @@ -562,7 +591,6 @@ bool ValidateFlags(unsigned int pFlags) } return true; } -#endif // ! DEBUG // ------------------------------------------------------------------------------------------------ // Free the current scene @@ -602,12 +630,50 @@ aiScene* Importer::GetOrphanedScene() return s; } +// ------------------------------------------------------------------------------------------------ +// Validate post-processing flags +bool Importer::ValidateFlags(unsigned int pFlags) +{ + // run basic checks for mutually exclusive flags + if(!_ValidateFlags(pFlags)) + return false; + + // ValidateDS does not anymore occur in the pp list, it plays + // an awesome extra role ... +#ifdef AI_BUILD_NO_VALIDATEDS_PROCESS + if (pFlags & aiProcess_ValidateDataStructure) + return false; +#endif + pFlags &= ~aiProcess_ValidateDataStructure; + + // Now iterate through all bits which are set in + // the flags and check whether we find at least + // one pp plugin which handles it. + for (unsigned int mask = 1; mask < (1 << (sizeof(unsigned int)*8-1));mask <<= 1) { + + if (pFlags & mask) { + + bool have = false; + for( unsigned int a = 0; a < mPostProcessingSteps.size(); a++) { + if (mPostProcessingSteps[a]-> IsActive(mask) ) { + + have = true; + break; + } + } + if (!have) + return false; + } + } + return true; +} + // ------------------------------------------------------------------------------------------------ // Reads the given file and returns its contents if successful. const aiScene* Importer::ReadFile( const char* _pFile, unsigned int pFlags) { - // Validate the flags - ai_assert(ValidateFlags(pFlags)); + // In debug builds, run a basic flag validation + ai_assert(_ValidateFlags(pFlags)); const std::string pFile(_pFile); @@ -616,7 +682,9 @@ const aiScene* Importer::ReadFile( const char* _pFile, unsigned int pFlags) // that might be thrown by STL containers or by new(). // ImportErrorException's are throw by ourselves and caught elsewhere. // ====================================================================== +#ifdef ASSIMP_CATCH_GLOBAL_EXCEPTIONS try +#endif // ! ASSIMP_CATCH_GLOBAL_EXCEPTIONS { // Check whether this Importer instance has already loaded // a scene. In this case we need to delete the old one @@ -636,21 +704,35 @@ const aiScene* Importer::ReadFile( const char* _pFile, unsigned int pFlags) // Find an worker class which can handle the file BaseImporter* imp = NULL; - for( unsigned int a = 0; a < mImporter.size(); a++) - { - if( mImporter[a]->CanRead( pFile, mIOHandler)) - { + for( unsigned int a = 0; a < mImporter.size(); a++) { + + if( mImporter[a]->CanRead( pFile, mIOHandler, false)) { imp = mImporter[a]; break; } } - // Put a proper error message if no suitable importer was found - if( !imp) + if (!imp) { - mErrorString = "No suitable reader found for the file format of file \"" + pFile + "\"."; - DefaultLogger::get()->error(mErrorString); - return NULL; + // not so bad yet ... try format auto detection. + std::string::size_type s = pFile.find_last_of('.'); + if (s != std::string::npos) { + DefaultLogger::get()->info("File extension now known, trying signature-based detection"); + for( unsigned int a = 0; a < mImporter.size(); a++) { + + if( mImporter[a]->CanRead( pFile, mIOHandler, true)) { + imp = mImporter[a]; + break; + } + } + } + // Put a proper error message if no suitable importer was found + if( !imp) + { + mErrorString = "No suitable reader found for the file format of file \"" + pFile + "\"."; + DefaultLogger::get()->error(mErrorString); + return NULL; + } } // Dispatch the reading to the worker class for this format @@ -661,7 +743,19 @@ const aiScene* Importer::ReadFile( const char* _pFile, unsigned int pFlags) // If successful, apply all active post processing steps to the imported data if( mScene) { - // FIRST of all - preprocess the scene +#ifndef AI_BUILD_NO_VALIDATEDS_PROCESS + // The ValidateDS process is an exception. It is executed first, + // even before ScenePreprocessor is called. + if (pFlags & aiProcess_ValidateDataStructure) + { + ValidateDSProcess ds; + ds.ExecuteOnScene (this); + if (!mScene) + return NULL; + } +#endif // no validation + + // Preprocess the scene ScenePreprocessor pre(mScene); pre.ProcessScene(); @@ -669,11 +763,11 @@ const aiScene* Importer::ReadFile( const char* _pFile, unsigned int pFlags) #ifdef _DEBUG if (bExtraVerbose) { -#if (!defined AI_BUILD_NO_VALIDATEDS_PROCESS) +#ifndef AI_BUILD_NO_VALIDATEDS_PROCESS DefaultLogger::get()->error("Extra verbose mode not available, library" " wasn't build with the ValidateDS-Step"); -#endif +#endif // no validation pFlags |= aiProcess_ValidateDataStructure; @@ -694,14 +788,16 @@ const aiScene* Importer::ReadFile( const char* _pFile, unsigned int pFlags) #ifndef AI_BUILD_NO_VALIDATEDS_PROCESS continue; -#endif +#endif // no validation - // if the extra verbose mode is active execute the + // If the extra verbose mode is active execute the // VaidateDataStructureStep again after each step - if (bExtraVerbose && a) + if (bExtraVerbose) { DefaultLogger::get()->debug("Extra verbose: revalidating data structures"); - ((ValidateDSProcess*)mPostProcessingSteps[0])->ExecuteOnScene (this); + + ValidateDSProcess ds; + ds.ExecuteOnScene (this); if( !mScene) { DefaultLogger::get()->error("Extra verbose: failed to revalidate data structures"); @@ -712,11 +808,13 @@ const aiScene* Importer::ReadFile( const char* _pFile, unsigned int pFlags) } } // if failed, extract the error string - else if( !mScene)mErrorString = imp->GetErrorText(); + else if( !mScene) + mErrorString = imp->GetErrorText(); // clear any data allocated by post-process steps mPPShared->Clean(); } +#ifdef ASSIMP_CATCH_GLOBAL_EXCEPTIONS catch (std::exception &e) { #if (defined _MSC_VER) && (defined _CPPRTTI) @@ -729,6 +827,7 @@ const aiScene* Importer::ReadFile( const char* _pFile, unsigned int pFlags) DefaultLogger::get()->error(mErrorString); delete mScene;mScene = NULL; } +#endif // ! ASSIMP_CATCH_GLOBAL_EXCEPTIONS // either successful or failure - the pointer expresses it anyways return mScene; @@ -750,7 +849,7 @@ BaseImporter* Importer::FindLoader (const char* _szExtension) i != mImporter.end();++i) { // pass the file extension to the CanRead(..,NULL)-method - if ((*i)->CanRead(szExtension,NULL))return *i; + if ((*i)->CanRead(szExtension,NULL,false))return *i; } return NULL; } @@ -765,8 +864,10 @@ void Importer::GetExtensionList(aiString& szOut) i = mImporter.begin(); i != mImporter.end();++i,++iNum) { - // insert a comma as delimiter character - if (0 != iNum) + // Insert a comma as delimiter character + // FIX: to take lazy loader implementations into account, we are + // slightly more tolerant here than we'd need to be. + if (0 != iNum && ';' != *(tmp.end()-1)) tmp.append(";"); (*i)->GetExtensionList(tmp); diff --git a/code/ImproveCacheLocality.cpp b/code/ImproveCacheLocality.cpp index 0016fd7bf..698af7816 100644 --- a/code/ImproveCacheLocality.cpp +++ b/code/ImproveCacheLocality.cpp @@ -44,6 +44,7 @@ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. *
* The algorithm is roughly basing on this paper: * http://www.cs.princeton.edu/gfx/pubs/Sander_2007_%3ETR/tipsy.pdf + * ... TODO: implement overdraw reduction */ #include "AssimpPCH.h" @@ -54,16 +55,10 @@ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. using namespace Assimp; -#if _MSC_VER >= 1400 -# define sprintf sprintf_s -#endif - // ------------------------------------------------------------------------------------------------ // Constructor to be privately used by Importer -ImproveCacheLocalityProcess::ImproveCacheLocalityProcess() -{ - // nothing to do here - configCacheDepth = 12; // hardcoded to 12 at the moment +ImproveCacheLocalityProcess::ImproveCacheLocalityProcess() { + configCacheDepth = PP_ICL_PTCACHE_SIZE; } // ------------------------------------------------------------------------------------------------ @@ -80,28 +75,48 @@ bool ImproveCacheLocalityProcess::IsActive( unsigned int pFlags) const return (pFlags & aiProcess_ImproveCacheLocality) != 0; } +// ------------------------------------------------------------------------------------------------ +// Setup configuration +void ImproveCacheLocalityProcess::SetupProperties(const Importer* pImp) +{ + // AI_CONFIG_PP_ICL_PTCACHE_SIZE + configCacheDepth = pImp->GetPropertyInteger(AI_CONFIG_PP_ICL_PTCACHE_SIZE,PP_ICL_PTCACHE_SIZE); +} + // ------------------------------------------------------------------------------------------------ // Executes the post processing step on the given imported data. void ImproveCacheLocalityProcess::Execute( aiScene* pScene) { - if (!pScene->mNumMeshes) - { + if (!pScene->mNumMeshes) { DefaultLogger::get()->debug("ImproveCacheLocalityProcess skipped; there are no meshes"); return; } DefaultLogger::get()->debug("ImproveCacheLocalityProcess begin"); - for( unsigned int a = 0; a < pScene->mNumMeshes; a++) - { - this->ProcessMesh( pScene->mMeshes[a],a); + float out = 0.f; + unsigned int numf = 0, numm = 0; + for( unsigned int a = 0; a < pScene->mNumMeshes; a++){ + const float res = ProcessMesh( pScene->mMeshes[a],a); + if (res) { + numf += pScene->mMeshes[a]->mNumFaces; + out += res; + ++numm; + } + } + if (!DefaultLogger::isNullLogger()) { + char szBuff[128]; // should be sufficiently large in every case + ::sprintf(szBuff,"Cache relevant are %i meshes (%i faces). Average output ACMR is %f", + numm,numf,out/numf); + + DefaultLogger::get()->info(szBuff); + DefaultLogger::get()->debug("ImproveCacheLocalityProcess finished. "); } - DefaultLogger::get()->debug("ImproveCacheLocalityProcess finished. "); } // ------------------------------------------------------------------------------------------------ // Improves the cache coherency of a specific mesh -void ImproveCacheLocalityProcess::ProcessMesh( aiMesh* pMesh, unsigned int meshNum) +float ImproveCacheLocalityProcess::ProcessMesh( aiMesh* pMesh, unsigned int meshNum) { ai_assert(NULL != pMesh); @@ -109,52 +124,50 @@ void ImproveCacheLocalityProcess::ProcessMesh( aiMesh* pMesh, unsigned int meshN // - there must be vertices and faces (haha) // - all faces must be triangulated if (!pMesh->HasFaces() || !pMesh->HasPositions()) - return; + return 0.f; - if (pMesh->mPrimitiveTypes != aiPrimitiveType_TRIANGLE) - { + if (pMesh->mPrimitiveTypes != aiPrimitiveType_TRIANGLE) { DefaultLogger::get()->error("This algorithm works on triangle meshes only"); - return; + return 0.f; } - // find the input ACMR ... - unsigned int* piFIFOStack = new unsigned int[this->configCacheDepth]; - ::memset(piFIFOStack,0xff,this->configCacheDepth*sizeof(unsigned int)); - unsigned int* piCur = piFIFOStack; - const unsigned int* const piCurEnd = piFIFOStack + this->configCacheDepth; - - // count the number of cache misses - unsigned int iCacheMisses = 0; - + float fACMR = 3.f; const aiFace* const pcEnd = pMesh->mFaces+pMesh->mNumFaces; - for (const aiFace* pcFace = pMesh->mFaces;pcFace != pcEnd;++pcFace) + + // Input ACMR is for logging purposes only + if (!DefaultLogger::isNullLogger()) { - for (unsigned int qq = 0; qq < 3;++qq) + unsigned int* piFIFOStack = new unsigned int[configCacheDepth]; + ::memset(piFIFOStack,0xff,configCacheDepth*sizeof(unsigned int)); + unsigned int* piCur = piFIFOStack; + const unsigned int* const piCurEnd = piFIFOStack + configCacheDepth; + + // count the number of cache misses + unsigned int iCacheMisses = 0; + for (const aiFace* pcFace = pMesh->mFaces;pcFace != pcEnd;++pcFace) { - bool bInCache = false; - for (unsigned int* pp = piFIFOStack;pp < piCurEnd;++pp) + for (unsigned int qq = 0; qq < 3;++qq) { - if (*pp == pcFace->mIndices[qq]) + bool bInCache = false; + for (unsigned int* pp = piFIFOStack;pp < piCurEnd;++pp) { - // the vertex is in cache - bInCache = true; - break; + if (*pp == pcFace->mIndices[qq]) { + // the vertex is in cache + bInCache = true; + break; + } + } + if (!bInCache) + { + ++iCacheMisses; + if (piCurEnd == piCur)piCur = piFIFOStack; + *piCur++ = pcFace->mIndices[qq]; } } - if (!bInCache) - { - ++iCacheMisses; - if (piCurEnd == piCur)piCur = piFIFOStack; - *piCur++ = pcFace->mIndices[qq]; - } } - } - delete[] piFIFOStack; - float fACMR = (float)iCacheMisses / pMesh->mNumFaces; - if (3.0 == fACMR) - { - if (!DefaultLogger::isNullLogger()) - { + delete[] piFIFOStack; + fACMR = (float)iCacheMisses / pMesh->mNumFaces; + if (3.0 == fACMR) { char szBuff[128]; // should be sufficiently large in every case // the JoinIdenticalVertices process has not been executed on this @@ -162,8 +175,8 @@ void ImproveCacheLocalityProcess::ProcessMesh( aiMesh* pMesh, unsigned int meshN // smaller than 3.0 ... ::sprintf(szBuff,"Mesh %i: Not suitable for vcache optimization",meshNum); DefaultLogger::get()->warn(szBuff); + return 0.f; } - return; } // first we need to build a vertex-triangle adjacency list @@ -204,7 +217,7 @@ void ImproveCacheLocalityProcess::ProcessMesh( aiMesh* pMesh, unsigned int meshN iMaxRefTris = std::max(iMaxRefTris,*piCur); } unsigned int* piCandidates = new unsigned int[iMaxRefTris*3]; - iCacheMisses = 0; + unsigned int iCacheMisses = 0; /** PSEUDOCODE for the algorithm @@ -236,7 +249,7 @@ void ImproveCacheLocalityProcess::ProcessMesh( aiMesh* pMesh, unsigned int meshN int ivdx = 0; int ics = 1; - int iStampCnt = this->configCacheDepth+1; + int iStampCnt = configCacheDepth+1; while (ivdx >= 0) { unsigned int icnt = piNumTriPtrNoModify[ivdx]; @@ -274,7 +287,7 @@ void ImproveCacheLocalityProcess::ProcessMesh( aiMesh* pMesh, unsigned int meshN *piCSIter++ = dp; // if the vertex is not yet in cache, set its cache count - if (iStampCnt-piCachingStamps[dp] > this->configCacheDepth) + if (iStampCnt-piCachingStamps[dp] > configCacheDepth) { piCachingStamps[dp] = iStampCnt++; ++iCacheMisses; @@ -302,7 +315,7 @@ void ImproveCacheLocalityProcess::ProcessMesh( aiMesh* pMesh, unsigned int meshN // will the vertex be in cache, even after fanning occurs? unsigned int tmp; - if ((tmp = iStampCnt-piCachingStamps[dp]) + 2*piNumTriPtr[dp] <= this->configCacheDepth) + if ((tmp = iStampCnt-piCachingStamps[dp]) + 2*piNumTriPtr[dp] <= configCacheDepth) priority = tmp; // keep best candidate if (priority > max_priority) @@ -344,18 +357,24 @@ void ImproveCacheLocalityProcess::ProcessMesh( aiMesh* pMesh, unsigned int meshN } } } + float fACMR2 = 0.0f; if (!DefaultLogger::isNullLogger()) { - char szBuff[128]; // should be sufficiently large in every case - float fACMR2 = (float)iCacheMisses / pMesh->mNumFaces; + fACMR2 = (float)iCacheMisses / pMesh->mNumFaces; - ::sprintf(szBuff,"Mesh %i | ACMR in: %f out: %f | ~%.1f%%",meshNum,fACMR,fACMR2, - ((fACMR - fACMR2) / fACMR) * 100.f); - DefaultLogger::get()->info(szBuff); + // very intense verbose logging ... prepare for much text if there are many meshes + if ( DefaultLogger::get()->getLogSeverity() == Logger::VERBOSE) { + char szBuff[128]; // should be sufficiently large in every case + + ::sprintf(szBuff,"Mesh %i | ACMR in: %f out: %f | ~%.1f%%",meshNum,fACMR,fACMR2, + ((fACMR - fACMR2) / fACMR) * 100.f); + DefaultLogger::get()->debug(szBuff); + } + + fACMR2 *= pMesh->mNumFaces; } // sort the output index buffer back to the input array piCSIter = piIBOutput; - for (aiFace* pcFace = pMesh->mFaces; pcFace != pcEnd;++pcFace) { pcFace->mIndices[0] = *piCSIter++; @@ -368,4 +387,5 @@ void ImproveCacheLocalityProcess::ProcessMesh( aiMesh* pMesh, unsigned int meshN delete[] piIBOutput; delete[] piCandidates; delete[] piNumTriPtrNoModify; + return fACMR2; } diff --git a/code/ImproveCacheLocality.h b/code/ImproveCacheLocality.h index 6d884e527..fd4024633 100644 --- a/code/ImproveCacheLocality.h +++ b/code/ImproveCacheLocality.h @@ -70,30 +70,28 @@ protected: ~ImproveCacheLocalityProcess(); public: + // ------------------------------------------------------------------- - /** Returns whether the processing step is present in the given flag field. - * @param pFlags The processing flags the importer was called with. A bitwise - * combination of #aiPostProcessSteps. - * @return true if the process is present in this flag fields, false if not. - */ + // Check whether the pp step is active bool IsActive( unsigned int pFlags) const; // ------------------------------------------------------------------- - /** Executes the post processing step on the given imported data. - * At the moment a process is not supposed to fail. - * @param pScene The imported data to work at. - */ + // Executes the pp step on a given scene void Execute( aiScene* pScene); + // ------------------------------------------------------------------- + // Configures the pp step + void SetupProperties(const Importer* pImp); + protected: // ------------------------------------------------------------------- /** Executes the postprocessing step on the given mesh * @param pMesh The mesh to process. * @param meshNum Index of the mesh to process */ - void ProcessMesh( aiMesh* pMesh, unsigned int meshNum); - + float ProcessMesh( aiMesh* pMesh, unsigned int meshNum); +private: //! Configuration parameter: specifies the size of the cache to //! optimize the vertex data for. unsigned int configCacheDepth; diff --git a/code/JoinVerticesProcess.cpp b/code/JoinVerticesProcess.cpp index 39aac209a..ead42446d 100644 --- a/code/JoinVerticesProcess.cpp +++ b/code/JoinVerticesProcess.cpp @@ -51,9 +51,15 @@ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. using namespace Assimp; -#if _MSC_VER >= 1400 -# define sprintf sprintf_s -#endif +// Data structure to keep a vertex in an interlaced format +struct Vertex +{ + aiVector3D mPosition; + aiVector3D mNormal; + aiVector3D mTangent, mBitangent; + aiColor4D mColors [AI_MAX_NUMBER_OF_COLOR_SETS]; + aiVector3D mTexCoords [AI_MAX_NUMBER_OF_TEXTURECOORDS]; +}; // ------------------------------------------------------------------------------------------------ // Constructor to be privately used by Importer @@ -75,7 +81,6 @@ bool JoinVerticesProcess::IsActive( unsigned int pFlags) const { return (pFlags & aiProcess_JoinIdenticalVertices) != 0; } - // ------------------------------------------------------------------------------------------------ // Executes the post processing step on the given imported data. void JoinVerticesProcess::Execute( aiScene* pScene) @@ -84,18 +89,19 @@ void JoinVerticesProcess::Execute( aiScene* pScene) // get the total number of vertices BEFORE the step is executed int iNumOldVertices = 0; - for( unsigned int a = 0; a < pScene->mNumMeshes; a++) - { - iNumOldVertices += pScene->mMeshes[a]->mNumVertices; + if (!DefaultLogger::isNullLogger()) { + for( unsigned int a = 0; a < pScene->mNumMeshes; a++) { + iNumOldVertices += pScene->mMeshes[a]->mNumVertices; + } } // execute the step int iNumVertices = 0; - for( unsigned int a = 0; a < pScene->mNumMeshes; a++) - { - iNumVertices += this->ProcessMesh( pScene->mMeshes[a],a); + for( unsigned int a = 0; a < pScene->mNumMeshes; a++) { + iNumVertices += ProcessMesh( pScene->mMeshes[a],a); } - // if logging is active, print detailled statistics + + // if logging is active, print detailed statistics if (!DefaultLogger::isNullLogger()) { if (iNumOldVertices == iNumVertices)DefaultLogger::get()->debug("JoinVerticesProcess finished "); @@ -117,81 +123,103 @@ void JoinVerticesProcess::Execute( aiScene* pScene) // Unites identical vertices in the given mesh int JoinVerticesProcess::ProcessMesh( aiMesh* pMesh, unsigned int meshIndex) { - // helper structure to hold all the data a single vertex can possibly have - typedef struct Vertex vertex; + BOOST_STATIC_ASSERT( AI_MAX_NUMBER_OF_COLOR_SETS == 4); + BOOST_STATIC_ASSERT( AI_MAX_NUMBER_OF_TEXTURECOORDS == 4); + // Return early if we don't have any positions if (!pMesh->HasPositions() || !pMesh->HasFaces()) return 0; - - struct Vertex - { - aiVector3D mPosition; - aiVector3D mNormal; - aiVector3D mTangent, mBitangent; - aiColor4D mColors[AI_MAX_NUMBER_OF_COLOR_SETS]; - aiVector3D mTexCoords[AI_MAX_NUMBER_OF_TEXTURECOORDS]; - }; + + // We'll never have more vertices afterwards. std::vector uniqueVertices; uniqueVertices.reserve( pMesh->mNumVertices); - //unsigned int iOldVerts = pMesh->mNumVertices; - // For each vertex the index of the vertex it was replaced by. std::vector replaceIndex( pMesh->mNumVertices, 0xffffffff); // for each vertex whether it was replaced by an existing unique vertex (true) or a new vertex was created for it (false) std::vector isVertexUnique( pMesh->mNumVertices, false); - // a little helper to find locally close vertices faster + // A little helper to find locally close vertices faster // FIX: check whether we can reuse the SpatialSort of a previous step - const float epsilon = 1e-5f; - float posEpsilon; - SpatialSort* vertexFinder = NULL; + const static float epsilon = 1e-5f; + float posEpsilonSqr; + SpatialSort* vertexFinder = NULL; SpatialSort _vertexFinder; if (shared) { std::vector >* avf; shared->GetProperty(AI_SPP_SPATIAL_SORT,avf); - if (avf) - { + if (avf) { std::pair& blubb = avf->operator [] (meshIndex); - vertexFinder = &blubb.first; - posEpsilon = blubb.second; + vertexFinder = &blubb.first; + posEpsilonSqr = blubb.second; } } - if (!vertexFinder) - { + if (!vertexFinder) { _vertexFinder.Fill(pMesh->mVertices, pMesh->mNumVertices, sizeof( aiVector3D)); vertexFinder = &_vertexFinder; - posEpsilon = ComputePositionEpsilon(pMesh); + posEpsilonSqr = ComputePositionEpsilon(pMesh); } // squared because we check against squared length of the vector difference - const float squareEpsilon = epsilon * epsilon; - std::vector verticesFound; + static const float squareEpsilon = epsilon * epsilon; - // now check each vertex if it brings something new to the table + // again, better waste some bytes than a realloc ... + std::vector verticesFound; + verticesFound.reserve(10); + + // run an optimized code path if we don't have multiple UVs or vertex colors + const bool complex = ( + pMesh->mTextureCoords[1] || + pMesh->mTextureCoords[2] || + pMesh->mTextureCoords[3] || + pMesh->mColors[0] || + pMesh->mColors[1] || + pMesh->mColors[2] || + pMesh->mColors[3] ); + + // Now check each vertex if it brings something new to the table for( unsigned int a = 0; a < pMesh->mNumVertices; a++) { // collect the vertex data Vertex v; v.mPosition = pMesh->mVertices[a]; - v.mNormal = (pMesh->mNormals != NULL) ? pMesh->mNormals[a] : aiVector3D( 0, 0, 0); - v.mTangent = (pMesh->mTangents != NULL) ? pMesh->mTangents[a] : aiVector3D( 0, 0, 0); - v.mBitangent = (pMesh->mBitangents != NULL) ? pMesh->mBitangents[a] : aiVector3D( 0, 0, 0); - for( unsigned int b = 0; b < AI_MAX_NUMBER_OF_COLOR_SETS; b++) - v.mColors[b] = (pMesh->mColors[b] != NULL) ? pMesh->mColors[b][a] : aiColor4D( 0, 0, 0, 0); - for( unsigned int b = 0; b < AI_MAX_NUMBER_OF_TEXTURECOORDS; b++) - v.mTexCoords[b] = (pMesh->mTextureCoords[b] != NULL) ? pMesh->mTextureCoords[b][a] : aiVector3D( 0, 0, 0); + + if (pMesh->mNormals) + v.mNormal = pMesh->mNormals[a]; + if (pMesh->mTangents) + v.mTangent = pMesh->mTangents[a]; + if (pMesh->mBitangents) + v.mBitangent = pMesh->mBitangents[a]; + + if (pMesh->mColors[0]) { // manually unrolled here + v.mColors[0] = pMesh->mColors[0][a]; + if (pMesh->mColors[1]) { + v.mColors[1] = pMesh->mColors[1][a]; + if (pMesh->mColors[2]) { + v.mColors[2] = pMesh->mColors[2][a]; + if (pMesh->mColors[3]) { + v.mColors[3] = pMesh->mColors[3][a]; + }}}} + if (pMesh->mTextureCoords[0]) { // manually unrolled here + v.mTexCoords[0] = pMesh->mTextureCoords[0][a]; + if (pMesh->mTextureCoords[1]) { + v.mTexCoords[1] = pMesh->mTextureCoords[1][a]; + if (pMesh->mTextureCoords[2]) { + v.mTexCoords[2] = pMesh->mTextureCoords[2][a]; + if (pMesh->mTextureCoords[3]) { + v.mTexCoords[3] = pMesh->mTextureCoords[3][a]; + }}}} // collect all vertices that are close enough to the given position - vertexFinder->FindPositions( v.mPosition, posEpsilon, verticesFound); + vertexFinder->FindPositions( v.mPosition, posEpsilonSqr, verticesFound); unsigned int matchIndex = 0xffffffff; // check all unique vertices close to the position if this vertex is already present among them for( unsigned int b = 0; b < verticesFound.size(); b++) { - unsigned int vidx = verticesFound[b]; - unsigned int uidx = replaceIndex[ vidx]; + const unsigned int vidx = verticesFound[b]; + const unsigned int uidx = replaceIndex[ vidx]; if( uidx == 0xffffffff || !isVertexUnique[ vidx]) continue; @@ -201,33 +229,38 @@ int JoinVerticesProcess::ProcessMesh( aiMesh* pMesh, unsigned int meshIndex) // We just test the other attributes even if they're not present in the mesh. // In this case they're initialized to 0 so the comparision succeeds. // By this method the non-present attributes are effectively ignored in the comparision. - if( (uv.mNormal - v.mNormal).SquareLength() > squareEpsilon) continue; if( (uv.mTangent - v.mTangent).SquareLength() > squareEpsilon) continue; if( (uv.mBitangent - v.mBitangent).SquareLength() > squareEpsilon) continue; - // manually unrolled because continue wouldn't work as desired in an inner loop - BOOST_STATIC_ASSERT(4 == AI_MAX_NUMBER_OF_COLOR_SETS); - if( GetColorDifference( uv.mColors[0], v.mColors[0]) > squareEpsilon) - continue; - if( GetColorDifference( uv.mColors[1], v.mColors[1]) > squareEpsilon) - continue; - if( GetColorDifference( uv.mColors[2], v.mColors[2]) > squareEpsilon) - continue; - if( GetColorDifference( uv.mColors[3], v.mColors[3]) > squareEpsilon) - continue; - // texture coord matching manually unrolled as well - BOOST_STATIC_ASSERT(4 == AI_MAX_NUMBER_OF_TEXTURECOORDS); + if( (uv.mTexCoords[0] - v.mTexCoords[0]).SquareLength() > squareEpsilon) continue; - if( (uv.mTexCoords[1] - v.mTexCoords[1]).SquareLength() > squareEpsilon) - continue; - if( (uv.mTexCoords[2] - v.mTexCoords[2]).SquareLength() > squareEpsilon) - continue; - if( (uv.mTexCoords[3] - v.mTexCoords[3]).SquareLength() > squareEpsilon) - continue; + + // Usually we won't have vertex colors or multiple UVs, so we can skip from here + // Actually this increases runtime performance slightly. + if (complex) + { + // manually unrolled because continue wouldn't work as desired in an inner loop + if( GetColorDifference( uv.mColors[0], v.mColors[0]) > squareEpsilon) + continue; + if( GetColorDifference( uv.mColors[1], v.mColors[1]) > squareEpsilon) + continue; + if( GetColorDifference( uv.mColors[2], v.mColors[2]) > squareEpsilon) + continue; + if( GetColorDifference( uv.mColors[3], v.mColors[3]) > squareEpsilon) + continue; + + // texture coord matching manually unrolled as well + if( (uv.mTexCoords[1] - v.mTexCoords[1]).SquareLength() > squareEpsilon) + continue; + if( (uv.mTexCoords[2] - v.mTexCoords[2]).SquareLength() > squareEpsilon) + continue; + if( (uv.mTexCoords[3] - v.mTexCoords[3]).SquareLength() > squareEpsilon) + continue; + } // we're still here -> this vertex perfectly matches our given vertex matchIndex = uidx; @@ -250,24 +283,26 @@ int JoinVerticesProcess::ProcessMesh( aiMesh* pMesh, unsigned int meshIndex) } } - if (!DefaultLogger::isNullLogger()) + if (!DefaultLogger::isNullLogger() && DefaultLogger::get()->getLogSeverity() == Logger::VERBOSE) { char szBuff[128]; // should be sufficiently large in every case - sprintf(szBuff,"Mesh %i | Verts in: %i out: %i | ~%.1f%%", + ::sprintf(szBuff,"Mesh %i | Verts in: %i out: %i | ~%.1f%%", meshIndex, pMesh->mNumVertices, (int)uniqueVertices.size(), ((pMesh->mNumVertices - uniqueVertices.size()) / (float)pMesh->mNumVertices) * 100.f); - DefaultLogger::get()->info(szBuff); + DefaultLogger::get()->debug(szBuff); } // replace vertex data with the unique data sets pMesh->mNumVertices = (unsigned int)uniqueVertices.size(); + // Position delete [] pMesh->mVertices; pMesh->mVertices = new aiVector3D[pMesh->mNumVertices]; for( unsigned int a = 0; a < pMesh->mNumVertices; a++) pMesh->mVertices[a] = uniqueVertices[a].mPosition; + // Normals, if present if( pMesh->mNormals) { @@ -296,7 +331,7 @@ int JoinVerticesProcess::ProcessMesh( aiMesh* pMesh, unsigned int meshIndex) for( unsigned int a = 0; a < AI_MAX_NUMBER_OF_COLOR_SETS; a++) { if( !pMesh->mColors[a]) - continue; + break; delete [] pMesh->mColors[a]; pMesh->mColors[a] = new aiColor4D[pMesh->mNumVertices]; @@ -307,7 +342,7 @@ int JoinVerticesProcess::ProcessMesh( aiMesh* pMesh, unsigned int meshIndex) for( unsigned int a = 0; a < AI_MAX_NUMBER_OF_TEXTURECOORDS; a++) { if( !pMesh->mTextureCoords[a]) - continue; + break; delete [] pMesh->mTextureCoords[a]; pMesh->mTextureCoords[a] = new aiVector3D[pMesh->mNumVertices]; @@ -319,10 +354,8 @@ int JoinVerticesProcess::ProcessMesh( aiMesh* pMesh, unsigned int meshIndex) for( unsigned int a = 0; a < pMesh->mNumFaces; a++) { aiFace& face = pMesh->mFaces[a]; - for( unsigned int b = 0; b < face.mNumIndices; b++) - { - const size_t index = face.mIndices[b]; - face.mIndices[b] = replaceIndex[index]; + for( unsigned int b = 0; b < face.mNumIndices; b++) { + face.mIndices[b] = replaceIndex[face.mIndices[b]]; } } diff --git a/code/JoinVerticesProcess.h b/code/JoinVerticesProcess.h index ce0b195a2..5bb73babe 100644 --- a/code/JoinVerticesProcess.h +++ b/code/JoinVerticesProcess.h @@ -95,6 +95,8 @@ protected: * @param meshIndex Index of the mesh to process */ int ProcessMesh( aiMesh* pMesh, unsigned int meshIndex); + +private: }; } // end of namespace Assimp diff --git a/code/LWOAnimation.cpp b/code/LWOAnimation.cpp new file mode 100644 index 000000000..f73470435 --- /dev/null +++ b/code/LWOAnimation.cpp @@ -0,0 +1,567 @@ +/* +Open Asset Import Library (ASSIMP) +---------------------------------------------------------------------- + +Copyright (c) 2006-2008, ASSIMP Development Team +All rights reserved. + +Redistribution and use of this software in source and binary forms, +with or without modification, are permitted provided that the +following conditions are met: + +* Redistributions of source code must retain the above + copyright notice, this list of conditions and the + following disclaimer. + +* Redistributions in binary form must reproduce the above + copyright notice, this list of conditions and the + following disclaimer in the documentation and/or other + materials provided with the distribution. + +* Neither the name of the ASSIMP team, nor the names of its + contributors may be used to endorse or promote products + derived from this software without specific prior + written permission of the ASSIMP Development Team. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +---------------------------------------------------------------------- +*/ + +/** @file LWOAnimation.cpp + * @brief LWOAnimationResolver utility class + * + * It's a very generic implementation of LightWave's system of + * componentwise-animated stuff. The one and only fully free + * implementation of LightWave envelopes of which I know. +*/ + +#include "AssimpPCH.h" +#if (!defined ASSIMP_BUILD_NO_LWO_IMPORTER) && (!defined ASSIMP_BUILD_NO_LWS_IMPORTER) + +// internal headers +#include "LWOFileData.h" + +using namespace Assimp; +using namespace Assimp::LWO; + +// ------------------------------------------------------------------------------------------------ +// Construct an animation resolver from a given list of envelopes +AnimResolver::AnimResolver(std::list& _envelopes,double tick) + : envelopes (_envelopes) + , sample_rate (0.) +{ + trans_x = trans_y = trans_z = NULL; + rotat_x = rotat_y = rotat_z = NULL; + scale_x = scale_y = scale_z = NULL; + + first = last = 150392.; + + // find transformation envelopes + for (std::list::iterator it = envelopes.begin(); it != envelopes.end(); ++it) { + + (*it).old_first = 0; + (*it).old_last = (*it).keys.size()-1; + + if ((*it).keys.empty()) continue; + switch ((*it).type) { + + // translation + case LWO::EnvelopeType_Position_X: + trans_x = &*it;break; + case LWO::EnvelopeType_Position_Y: + trans_y = &*it;break; + case LWO::EnvelopeType_Position_Z: + trans_z = &*it;break; + + // rotation + case LWO::EnvelopeType_Rotation_Heading: + rotat_x = &*it;break; + case LWO::EnvelopeType_Rotation_Pitch: + rotat_y = &*it;break; + case LWO::EnvelopeType_Rotation_Bank: + rotat_z = &*it;break; + + // scaling + case LWO::EnvelopeType_Scaling_X: + scale_x = &*it;break; + case LWO::EnvelopeType_Scaling_Y: + scale_y = &*it;break; + case LWO::EnvelopeType_Scaling_Z: + scale_z = &*it;break; + default: + continue; + }; + + // convert from seconds to ticks + for (std::vector::iterator d = (*it).keys.begin(); d != (*it).keys.end(); ++d) + (*d).time *= tick; + + // set default animation range (minimum and maximum time value for which we have a keyframe) + first = std::min(first, (*it).keys.front().time ); + last = std::max(last, (*it).keys.back().time ); + } + + // deferred setup of animation range to increase performance. + // typically the application will want to specify its own. + need_to_setup = true; +} + +// ------------------------------------------------------------------------------------------------ +// Reset all envelopes to their original contents +void AnimResolver::ClearAnimRangeSetup() +{ + for (std::list::iterator it = envelopes.begin(); it != envelopes.end(); ++it) { + + (*it).keys.erase((*it).keys.begin(),(*it).keys.begin()+(*it).old_first); + (*it).keys.erase((*it).keys.begin()+(*it).old_last+1,(*it).keys.end()); + } +} + +// ------------------------------------------------------------------------------------------------ +// Insert additional keys to match LWO's pre& post behaviours. +void AnimResolver::UpdateAnimRangeSetup() +{ + for (std::list::iterator it = envelopes.begin(); it != envelopes.end(); ++it) { + if ((*it).keys.empty()) continue; + + const double my_first = (*it).keys.front().time; + const double my_last = (*it).keys.back().time; + + const double delta = my_last-my_first; + const size_t old_size = (*it).keys.size(); + + const float value_delta = (*it).keys.back().value - (*it).keys.front().value; + + // NOTE: We won't handle reset, linear and constant here. + // See DoInterpolation() for their implementation. + + // process pre behaviour + switch ((*it).pre) { + case LWO::PrePostBehaviour_OffsetRepeat: + case LWO::PrePostBehaviour_Repeat: + case LWO::PrePostBehaviour_Oscillate: + + const double start_time = delta - fmod(my_first-first,delta); + std::vector::iterator n = std::find_if((*it).keys.begin(),(*it).keys.end(), + std::bind1st(std::greater(),start_time)),m; + + size_t ofs = 0; + if (n != (*it).keys.end()) { + // copy from here - don't use iterators, insert() would invalidate them + ofs = (*it).keys.end()-n; + (*it).keys.insert((*it).keys.begin(),ofs,LWO::Key()); + + std::copy((*it).keys.end()-ofs,(*it).keys.end(),(*it).keys.begin()); + } + + // do full copies. again, no iterators + const unsigned int num = (unsigned int)((my_first-first) / delta); + (*it).keys.resize((*it).keys.size() + num*old_size); + + n = (*it).keys.begin()+ofs; + bool reverse = false; + for (unsigned int i = 0; i < num; ++i) { + m = n+old_size*(i+1); + std::copy(n,n+old_size,m); + + if ((*it).pre == LWO::PrePostBehaviour_Oscillate && (reverse = !reverse)) + std::reverse(m,m+old_size-1); + } + + // update time values + n = (*it).keys.end() - (old_size+1); + double cur_minus = delta; + unsigned int tt = 1; + for (const double tmp = delta*(num+1);cur_minus <= tmp;cur_minus += delta,++tt) { + m = (delta == tmp ? (*it).keys.begin() : n - (old_size+1)); + for (;m != n; --n) { + (*n).time -= cur_minus; + + // offset repeat? add delta offset to key value + if ((*it).pre == LWO::PrePostBehaviour_OffsetRepeat) { + (*n).value += tt * value_delta; + } + } + } + break; + } + + // process post behaviour + switch ((*it).post) { + + case LWO::PrePostBehaviour_OffsetRepeat: + case LWO::PrePostBehaviour_Repeat: + case LWO::PrePostBehaviour_Oscillate: + + break; + } + } +} + +// ------------------------------------------------------------------------------------------------ +// Extract bind pose matrix +void AnimResolver::ExtractBindPose(aiMatrix4x4& out) +{ + // If we have no envelopes, return identity + if (envelopes.empty()) { + out = aiMatrix4x4(); + return; + } + aiVector3D angles, scaling(1.f,1.f,1.f), translation; + + if (trans_x) translation.x = trans_x->keys[0].value; + if (trans_y) translation.y = trans_y->keys[0].value; + if (trans_z) translation.z = trans_z->keys[0].value; + + if (rotat_x) angles.x = rotat_x->keys[0].value; + if (rotat_y) angles.y = rotat_y->keys[0].value; + if (rotat_z) angles.z = rotat_z->keys[0].value; + + if (scale_x) scaling.x = scale_x->keys[0].value; + if (scale_y) scaling.y = scale_y->keys[0].value; + if (scale_z) scaling.z = scale_z->keys[0].value; + + // build the final matrix + aiMatrix4x4 s,r,t; + + r.FromEulerAnglesXYZ(angles); + //aiMatrix4x4::RotationY(angles.y,r); + // fixme: make FromEulerAngles static, too + aiMatrix4x4::Translation(translation,t); + aiMatrix4x4::Scaling(scaling,s); + out = s*r*t; +} + +// ------------------------------------------------------------------------------------------------ +// Do a single interpolation on a channel +void AnimResolver::DoInterpolation(std::vector::const_iterator cur, + LWO::Envelope* envl,double time, float& fill) +{ + if (envl->keys.size() == 1) { + fill = envl->keys[0].value; + return; + } + + // check whether we're at the beginning of the animation track + if (cur == envl->keys.begin()) { + + // ok ... this depends on pre behaviour now + // we don't need to handle repeat&offset repeat&oszillate here, see UpdateAnimRangeSetup() + switch (envl->pre) + { + case LWO::PrePostBehaviour_Linear: + DoInterpolation2(cur,cur+1,time,fill); + return; + + case LWO::PrePostBehaviour_Reset: + fill = 0.f; + return; + + default : //case LWO::PrePostBehaviour_Constant: + fill = (*cur).value; + return; + } + } + // check whether we're at the end of the animation track + else if (cur == envl->keys.end()-1 && time > envl->keys.rbegin()->time) { + // ok ... this depends on post behaviour now + switch (envl->post) + { + case LWO::PrePostBehaviour_Linear: + DoInterpolation2(cur,cur-1,time,fill); + return; + + case LWO::PrePostBehaviour_Reset: + fill = 0.f; + return; + + default : //case LWO::PrePostBehaviour_Constant: + fill = (*cur).value; + return; + } + } + + // Otherwise do a simple interpolation + DoInterpolation2(cur-1,cur,time,fill); +} + +// ------------------------------------------------------------------------------------------------ +// Almost the same, except we won't handle pre/post conditions here +void AnimResolver::DoInterpolation2(std::vector::const_iterator beg, + std::vector::const_iterator end,double time, float& fill) +{ + switch ((*end).inter) { + + case LWO::IT_STEP: + // no interpolation at all - take the value of the last key + fill = (*beg).value; + return; + + } + // linear interpolation - default + fill = (*beg).value + ((*end).value - (*beg).value)*(float)(((time - (*beg).time) / ((*end).time - (*beg).time))); +} + +// ------------------------------------------------------------------------------------------------ +// Subsample animation track by given key values +void AnimResolver::SubsampleAnimTrack(std::vector& out, + double time,double sample_delta) +{ + ai_assert(!out.empty() && sample_delta); + + const double time_start = out.back().mTime; +// for () +} + +// ------------------------------------------------------------------------------------------------ +// Track interpolation +void AnimResolver::InterpolateTrack(std::vector& out,aiVectorKey& fill,double time) +{ + // subsample animation track? + if (flags & AI_LWO_ANIM_FLAG_SAMPLE_ANIMS) { + SubsampleAnimTrack(out,time, sample_delta); + } + + fill.mTime = time; + + // get x + if ((*cur_x).time == time) { + fill.mValue.x = (*cur_x).value; + + if (cur_x != envl_x->keys.end()-1) /* increment x */ + ++cur_x; + else end_x = true; + } + else DoInterpolation(cur_x,envl_x,time,(float&)fill.mValue.x); + + // get y + if ((*cur_y).time == time) { + fill.mValue.y = (*cur_y).value; + + if (cur_y != envl_y->keys.end()-1) /* increment y */ + ++cur_y; + else end_y = true; + } + else DoInterpolation(cur_y,envl_y,time,(float&)fill.mValue.y); + + // get z + if ((*cur_z).time == time) { + fill.mValue.z = (*cur_z).value; + + if (cur_z != envl_z->keys.end()-1) /* increment z */ + ++cur_z; + else end_x = true; + } + else DoInterpolation(cur_z,envl_z,time,(float&)fill.mValue.z); +} + +// ------------------------------------------------------------------------------------------------ +// Build linearly subsampled keys from three single envelopes, one for each component (x,y,z) +void AnimResolver::GetKeys(std::vector& out, + LWO::Envelope* _envl_x, + LWO::Envelope* _envl_y, + LWO::Envelope* _envl_z, + unsigned int _flags) +{ + envl_x = _envl_x; + envl_y = _envl_y; + envl_z = _envl_z; + flags = _flags; + + // generate default channels if none are given + LWO::Envelope def_x, def_y, def_z; + LWO::Key key_dummy; + key_dummy.time = 0.f; + if (envl_x && envl_x->type == LWO::EnvelopeType_Scaling_X || + envl_y && envl_y->type == LWO::EnvelopeType_Scaling_Y || + envl_z && envl_z->type == LWO::EnvelopeType_Scaling_Z) { + key_dummy.value = 1.f; + } + else key_dummy.value = 0.f; + + if (!envl_x) { + envl_x = &def_x; + envl_x->keys.push_back(key_dummy); + } + if (!envl_y) { + envl_y = &def_y; + envl_y->keys.push_back(key_dummy); + } + if (!envl_z) { + envl_z = &def_z; + envl_z->keys.push_back(key_dummy); + } + + // guess how many keys we'll get + size_t reserve; + double sr = 1.; + if (flags & AI_LWO_ANIM_FLAG_SAMPLE_ANIMS) { + if (!sample_rate) + sr = 100.f; + else sr = sample_rate; + sample_delta = 1.f / sr; + + reserve = (size_t)( + std::max( envl_x->keys.end()->time, + std::max( envl_y->keys.end()->time, envl_z->keys.end()->time )) * sr); + } + else reserve = std::max(envl_x->keys.size(),std::max(envl_x->keys.size(),envl_z->keys.size())); + out.reserve(reserve+(reserve>>1)); + + // Iterate through all three arrays at once - it's tricky, but + // rather interesting to implement. + double lasttime = std::min(envl_x->keys[0].time,std::min(envl_y->keys[0].time,envl_z->keys[0].time)); + + cur_x = envl_x->keys.begin(); + cur_y = envl_y->keys.begin(); + cur_z = envl_z->keys.begin(); + + end_x = end_y = end_z = false; + while (1) { + + aiVectorKey fill; + + if ((*cur_x).time == (*cur_y).time && (*cur_x).time == (*cur_z).time ) { + + // we have a keyframe for all of them defined .. great, + // we don't need to fucking interpolate here ... + fill.mTime = (*cur_x).time; + + fill.mValue.x = (*cur_x).value; + fill.mValue.y = (*cur_y).value; + fill.mValue.z = (*cur_z).value; + + // subsample animation track + if (flags & AI_LWO_ANIM_FLAG_SAMPLE_ANIMS) { + //SubsampleAnimTrack(out,cur_x, cur_y, cur_z, d, sample_delta); + } + + if (cur_x != envl_x->keys.end()-1) + ++cur_x; + else end_x = true; + if (cur_y != envl_y->keys.end()-1) + ++cur_y; + else end_y = true; + if (cur_z != envl_z->keys.end()-1) + ++cur_z; + else end_z = true; + } + + // Find key with lowest time value + else if ((*cur_x).time <= (*cur_y).time && !end_x) { + + if ((*cur_z).time <= (*cur_x).time && !end_z) { + InterpolateTrack(out,fill,(*cur_z).time); + } + else { + InterpolateTrack(out,fill,(*cur_x).time); + } + } + else if ((*cur_z).time <= (*cur_y).time && !end_z) { + InterpolateTrack(out,fill,(*cur_z).time); + } + else if (!end_y) { + // welcome on the server, y + InterpolateTrack(out,fill,(*cur_y).time); + } + else { + // we have reached the end of at least 2 channels, + // only one is remaining. Extrapolate the 2. + if (end_y) { + InterpolateTrack(out,fill,(end_x ? (*cur_z) : (*cur_x)).time); + } + else if (end_x) { + InterpolateTrack(out,fill,(end_z ? (*cur_y) : (*cur_z)).time); + } + else { // if (end_z) + InterpolateTrack(out,fill,(end_y ? (*cur_x) : (*cur_y)).time); + } + } + lasttime = fill.mTime; + out.push_back(fill); + + if( end_x && end_y && end_z ) /* finished? */ + break; + } + + if (flags & AI_LWO_ANIM_FLAG_START_AT_ZERO) { + for (std::vector::iterator it = out.begin(); it != out.end(); ++it) + (*it).mTime -= first; + } +} + +// ------------------------------------------------------------------------------------------------ +// Extract animation channel +void AnimResolver::ExtractAnimChannel(aiNodeAnim** out, unsigned int flags /*= 0*/) +{ + *out = NULL; + + // If we have no envelopes, return NULL + if (envelopes.empty()) { + return; + } + + // We won't spawn an animation channel if we don't have at least one + // envelope with more than one keyframe defined. + const bool trans = (trans_x && trans_x->keys.size() > 1 || trans_y && trans_y->keys.size() > 1 || trans_z && trans_z->keys.size() > 1); + const bool rotat = (rotat_x && rotat_x->keys.size() > 1 || rotat_y && rotat_y->keys.size() > 1 || rotat_z && rotat_z->keys.size() > 1); + const bool scale = (scale_x && scale_x->keys.size() > 1 || scale_y && scale_y->keys.size() > 1 || scale_z && scale_z->keys.size() > 1); + if (!trans && !rotat && !scale) + return; + + // Allocate the output animation + aiNodeAnim* anim = *out = new aiNodeAnim(); + + // Setup default animation setup if necessary + if (need_to_setup) { + UpdateAnimRangeSetup(); + need_to_setup = false; + } + + // copy translation keys + if (trans) { + std::vector keys; + GetKeys(keys,trans_x,trans_y,trans_z,flags); + + anim->mPositionKeys = new aiVectorKey[ anim->mNumPositionKeys = keys.size() ]; + std::copy(keys.begin(),keys.end(),anim->mPositionKeys); + } + + // copy rotation keys + if (rotat) { + std::vector keys; + GetKeys(keys,rotat_x,rotat_y,rotat_z,flags); + + anim->mRotationKeys = new aiQuatKey[ anim->mNumRotationKeys = keys.size() ]; + + // convert heading, pitch, bank to quaternion + for (unsigned int i = 0; i < anim->mNumRotationKeys; ++i) { + aiQuatKey& qk = anim->mRotationKeys[i]; + qk.mTime = keys[i].mTime; + qk.mValue = aiQuaternion( keys[i].mValue.x ,keys[i].mValue.y ,keys[i].mValue.z ); + } + } + + // copy scaling keys + if (scale) { + std::vector keys; + GetKeys(keys,scale_x,scale_y,scale_z,flags); + + anim->mScalingKeys = new aiVectorKey[ anim->mNumScalingKeys = keys.size() ]; + std::copy(keys.begin(),keys.end(),anim->mScalingKeys); + } +} + + +#endif // no lwo or no lws diff --git a/code/LWOAnimation.h b/code/LWOAnimation.h new file mode 100644 index 000000000..f89d6823a --- /dev/null +++ b/code/LWOAnimation.h @@ -0,0 +1,336 @@ +/* +Open Asset Import Library (ASSIMP) +---------------------------------------------------------------------- + +Copyright (c) 2006-2008, ASSIMP Development Team +All rights reserved. + +Redistribution and use of this software in source and binary forms, +with or without modification, are permitted provided that the +following conditions are met: + +* Redistributions of source code must retain the above + copyright notice, this list of conditions and the + following disclaimer. + +* Redistributions in binary form must reproduce the above + copyright notice, this list of conditions and the + following disclaimer in the documentation and/or other + materials provided with the distribution. + +* Neither the name of the ASSIMP team, nor the names of its + contributors may be used to endorse or promote products + derived from this software without specific prior + written permission of the ASSIMP Development Team. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +---------------------------------------------------------------------- +*/ + +/** @file LWOAnimation.h + * @brief LWOAnimationResolver utility class + * + * This is for all lightwave-related file format, not only LWO. + * LWS isthe main purpose. +*/ +#ifndef AI_LWO_ANIMATION_INCLUDED +#define AI_LWO_ANIMATION_INCLUDED + +namespace Assimp { +namespace LWO { + +// --------------------------------------------------------------------------- +/** \brief List of recognized LWO envelopes + */ +enum EnvelopeType +{ + EnvelopeType_Position_X = 0x1, + EnvelopeType_Position_Y = 0x2, + EnvelopeType_Position_Z = 0x3, + + EnvelopeType_Rotation_Heading = 0x4, + EnvelopeType_Rotation_Pitch = 0x5, + EnvelopeType_Rotation_Bank = 0x6, + + EnvelopeType_Scaling_X = 0x7, + EnvelopeType_Scaling_Y = 0x8, + EnvelopeType_Scaling_Z = 0x9, + + // -- currently not yet handled + EnvelopeType_Color_R = 0xa, + EnvelopeType_Color_G = 0xb, + EnvelopeType_Color_B = 0xc, + + EnvelopeType_Falloff_X = 0xd, + EnvelopeType_Falloff_Y = 0xe, + EnvelopeType_Falloff_Z = 0xf, + + EnvelopeType_Unknown +}; + +// --------------------------------------------------------------------------- +/** \brief List of recognized LWO interpolation modes + */ +enum InterpolationType +{ + IT_STEP, IT_LINE, IT_TCB, IT_HERM, IT_BEZI, IT_BEZ2 +}; + + +// --------------------------------------------------------------------------- +/** \brief List of recognized LWO pre or post range behaviours + */ +enum PrePostBehaviour +{ + PrePostBehaviour_Reset = 0x0, + PrePostBehaviour_Constant = 0x1, + PrePostBehaviour_Repeat = 0x2, + PrePostBehaviour_Oscillate = 0x3, + PrePostBehaviour_OffsetRepeat = 0x4, + PrePostBehaviour_Linear = 0x5 +}; + +// --------------------------------------------------------------------------- +/** \brief Data structure for a LWO animation keyframe + */ +struct Key +{ + Key() + : inter (IT_LINE) + {} + + //! Current time + double time; + + //! Current value + float value; + + //! How to interpolate this key with previous key? + InterpolationType inter; + + //! Interpolation parameters + float params[5]; + + + // for std::find() + operator double () { + return time; + } +}; + +// --------------------------------------------------------------------------- +/** \brief Data structure for a LWO animation envelope + */ +struct Envelope +{ + Envelope() + : type (EnvelopeType_Unknown) + , pre (PrePostBehaviour_Constant) + , post (PrePostBehaviour_Constant) + + , old_first (0) + , old_last (0) + {} + + //! Index of this envelope + unsigned int index; + + //! Type of envelope + EnvelopeType type; + + //! Pre and post-behaviour + PrePostBehaviour pre,post; + + //! Keyframes for this envelope + std::vector keys; + + + // temporary data for AnimResolver + size_t old_first,old_last; +}; + +// --------------------------------------------------------------------------- +//! @def AI_LWO_ANIM_FLAG_SAMPLE_ANIMS +//! Flag for AnimResolver, subsamples the input data with the rate specified +//! by AnimResolver::SetSampleRate(). +#define AI_LWO_ANIM_FLAG_SAMPLE_ANIMS 0x1 + + +// --------------------------------------------------------------------------- +//! @def AI_LWO_ANIM_FLAG_START_AT_ZERO +//! Flag for AnimResolver, ensures that the animations starts at zero. +#define AI_LWO_ANIM_FLAG_START_AT_ZERO 0x2 + +// --------------------------------------------------------------------------- +/** @brief Utility class to build Assimp animations from LWO envelopes. + * + * Used for both LWO and LWS (MOT also). + */ +class AnimResolver +{ +public: + + // ------------------------------------------------------------------ + /** @brief Construct an AnimResolver from a given list of envelopes + * @param envelopes Input envelopes. May be empty. + * @param Output tick rate, per second + * @note The input envelopes are possibly modified. + */ + AnimResolver(std::list& envelopes, + double tick); + +public: + + // ------------------------------------------------------------------ + /** @brief Extract the bind-pose transformation matrix. + * @param out Receives bind-pose transformation matrix + */ + void ExtractBindPose(aiMatrix4x4& out); + + // ------------------------------------------------------------------ + /** @brief Extract a node animation channel + * @param out Receives a pointer to a newly allocated node anim. + * If there's just one keyframe defined, *out is set to NULL and + * no animation channel is computed. + * @param flags Any combination of the AI_LWO_ANIM_FLAG_XXX flags. + */ + void ExtractAnimChannel(aiNodeAnim** out, unsigned int flags = 0); + + + // ------------------------------------------------------------------ + /** @brief Set the sampling rate for ExtractAnimChannel(). + * + * Non-linear interpolations are subsampled with this rate (keys + * per second). Closer sampling positions, if existent, are kept. + * The sampling rate defaults to 0, if this value is not changed and + * AI_LWO_ANIM_FLAG_SAMPLE_ANIMS is specified for ExtractAnimChannel(), + * the class finds a suitable sample rate by itself. + */ + void SetSampleRate(double sr) { + sample_rate = sr; + } + + // ------------------------------------------------------------------ + /** @brief Getter for SetSampleRate() + */ + double GetSampleRate() const { + return sample_rate; + } + + // ------------------------------------------------------------------ + /** @brief Set the animation time range + * + * @param first Time where the animation starts, in ticks + * @param last Time where the animation ends, in ticks + */ + void SetAnimationRange(double _first, double _last) { + first = _first; + last = _last; + + ClearAnimRangeSetup(); + UpdateAnimRangeSetup(); + } + +protected: + + // ------------------------------------------------------------------ + /** @brief Build linearly subsampled keys from 3 single envelopes + * @param out Receives output keys + * @param envl_x X-component envelope + * @param envl_y Y-component envelope + * @param envl_z Z-component envelope + * @param flags Any combination of the AI_LWO_ANIM_FLAG_XXX flags. + * @note Up to two input envelopes may be NULL + */ + void GetKeys(std::vector& out, + LWO::Envelope* envl_x, + LWO::Envelope* envl_y, + LWO::Envelope* envl_z, + unsigned int flags); + + // ------------------------------------------------------------------ + /** @brief Resolve a single animation key by applying the right + * interpolation to it. + * @param cur Current key + * @param envl Envelope working on + * @param time time to be interpolated + * @param fill Receives the interpolated output value. + */ + void DoInterpolation(std::vector::const_iterator cur, + LWO::Envelope* envl,double time, float& fill); + + // ------------------------------------------------------------------ + /** @brief Almost the same, except we won't handle pre/post + * conditions here. + * @see DoInterpolation + */ + void DoInterpolation2(std::vector::const_iterator beg, + std::vector::const_iterator end,double time, float& fill); + + // ------------------------------------------------------------------ + /** @brief Interpolate 2 tracks if one is given + * + * @param out Receives extra output keys + * @param key_out Primary output key + * @param time Time to interpolate for + */ + void InterpolateTrack(std::vector& out, + aiVectorKey& key_out,double time); + + // ------------------------------------------------------------------ + /** @brief Subsample an animation track by a given sampling rate + * + * @param out Receives output keys. Last key at input defines the + * time where subsampling starts. + * @param time Time to end subsampling at + * @param sample_delta Time delta between two samples + */ + void SubsampleAnimTrack(std::vector& out, + double time,double sample_delta); + + // ------------------------------------------------------------------ + /** @brief Delete all keys which we inserted to match anim setup + */ + void ClearAnimRangeSetup(); + + // ------------------------------------------------------------------ + /** @brief Insert extra keys to match LWO's pre and post behaviours + * in a given time range [first...last] + */ + void UpdateAnimRangeSetup(); + +private: + std::list& envelopes; + double sample_rate; + + LWO::Envelope* trans_x, *trans_y, *trans_z; + LWO::Envelope* rotat_x, *rotat_y, *rotat_z; + LWO::Envelope* scale_x, *scale_y, *scale_z; + + double first, last; + bool need_to_setup; + + // temporary storage + LWO::Envelope* envl_x, * envl_y, * envl_z; + std::vector::const_iterator cur_x,cur_y,cur_z; + bool end_x, end_y, end_z; + + unsigned int flags; + double sample_delta; +}; + +} // end namespace LWO +} // end namespace Assimp + +#endif // !! AI_LWO_ANIMATION_INCLUDED diff --git a/code/LWOBLoader.cpp b/code/LWOBLoader.cpp index a295a26e5..48a6e41ec 100644 --- a/code/LWOBLoader.cpp +++ b/code/LWOBLoader.cpp @@ -178,8 +178,8 @@ void LWOImporter::CopyFaceIndicesLWOB(FaceList::iterator& it, { surface = -surface; - // there are detail polygons - uint16_t numPolygons = *cursor++; + // there are detail polygons. + const uint16_t numPolygons = *cursor++; if (cursor < end)CopyFaceIndicesLWOB(it,cursor,end,numPolygons); } face.surfaceIndex = surface-1; @@ -194,6 +194,27 @@ LWO::Texture* LWOImporter::SetupNewTextureLWOB(LWO::TextureList& list,unsigned i std::string type; GetS0(type,size); + const char* s = type.c_str(); + + if(strstr(s, "Image Map")) + { + // Determine mapping type + if(strstr(s, "Planar")) + tex->mapMode = LWO::Texture::Planar; + else if(strstr(s, "Cylindrical")) + tex->mapMode = LWO::Texture::Cylindrical; + else if(strstr(s, "Spherical")) + tex->mapMode = LWO::Texture::Spherical; + else if(strstr(s, "Cubic")) + tex->mapMode = LWO::Texture::Cubic; + else if(strstr(s, "Front")) + tex->mapMode = LWO::Texture::FrontProjection; + } + else + { + // procedural or gradient, not supported + DefaultLogger::get()->error("LWOB: Unsupported legacy texture: " + type); + } return tex; } @@ -271,7 +292,7 @@ void LWOImporter::LoadLWOBSurface(unsigned int size) case AI_LWO_SMAN: { AI_LWO_VALIDATE_CHUNK_LENGTH(head->length,SMAN,4); - surf.mMaximumSmoothAngle = GetF4(); + surf.mMaximumSmoothAngle = fabs( GetF4() ); break; } // glossiness @@ -323,8 +344,7 @@ void LWOImporter::LoadLWOBSurface(unsigned int size) { GetS0(pTex->mFileName,head->length); } - else DefaultLogger::get()->warn("LWOB: TIMG tag was encuntered although " - "there was no xTEX tag before"); + else DefaultLogger::get()->warn("LWOB: Unexpected TIMG chunk"); break; } // texture strength @@ -332,8 +352,28 @@ void LWOImporter::LoadLWOBSurface(unsigned int size) { AI_LWO_VALIDATE_CHUNK_LENGTH(head->length,TVAL,1); if (pTex)pTex->mStrength = (float)GetU1()/ 255.f; - else DefaultLogger::get()->warn("LWOB: TVAL tag was encuntered " - "although there was no xTEX tag before"); + else DefaultLogger::get()->warn("LWOB: Unexpected TVAL chunk"); + break; + } + // texture flags + case AI_LWO_TFLG: + { + AI_LWO_VALIDATE_CHUNK_LENGTH(head->length,TFLG,2); + + if (pTex) + { + const uint16_t s = GetU2(); + if (s & 1) + pTex->majorAxis = LWO::Texture::AXIS_X; + else if (s & 2) + pTex->majorAxis = LWO::Texture::AXIS_Y; + else if (s & 4) + pTex->majorAxis = LWO::Texture::AXIS_Z; + + if (s & 16) + DefaultLogger::get()->warn("LWOB: Ignoring \'negate\' flag on texture"); + } + else DefaultLogger::get()->warn("LWOB: Unexpected TFLG chunk"); break; } } diff --git a/code/LWOFileData.h b/code/LWOFileData.h index f018bfc23..b0a2e9ba3 100644 --- a/code/LWOFileData.h +++ b/code/LWOFileData.h @@ -38,10 +38,10 @@ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. ---------------------------------------------------------------------- */ -/** @file Defines chunk constants used by the LWO file format +/** @file LWOFileData.h + * @brief Defines chunk constants used by the LWO file format The chunks are taken from the official LightWave SDK headers. -Original copyright notice: "Ernie Wright 17 Sep 00" */ #ifndef AI_LWO_FILEDATA_INCLUDED @@ -56,6 +56,7 @@ Original copyright notice: "Ernie Wright 17 Sep 00" // internal headers #include "IFF.h" +#include "LWOAnimation.h" namespace Assimp { namespace LWO { @@ -254,29 +255,45 @@ namespace LWO { */ struct Face : public aiFace { + //! Default construction Face() : surfaceIndex (0) , smoothGroup (0) + , type (AI_LWO_FACE) {} - Face(const Face& f) - { + //! Construction from given type + Face(uint32_t _type) + : surfaceIndex (0) + , smoothGroup (0) + , type (_type) + {} + + //! Copy construction + Face(const Face& f) { *this = f; } + //! Zero-based index into tags chunk unsigned int surfaceIndex; + + //! Smooth group this face is assigned to unsigned int smoothGroup; - Face& operator=(const LWO::Face& f) - { + //! Type of face + uint32_t type; + + + //! Assignment operator + Face& operator=(const LWO::Face& f) { aiFace::operator =(f); surfaceIndex = f.surfaceIndex; smoothGroup = f.smoothGroup; + type = f.type; return *this; } }; - // --------------------------------------------------------------------------- /** \brief Base structure for all vertex map representations */ @@ -473,8 +490,9 @@ struct Clip } type; Clip() - : type (UNSUPPORTED) - , idx (0) + : type (UNSUPPORTED) + , idx (0) + , negate (false) {} //! path to the base texture - @@ -485,6 +503,9 @@ struct Clip //! index of the clip unsigned int idx; + + //! Negate the clip? + bool negate; }; @@ -529,6 +550,7 @@ struct Surface , mIOR (1.f) // vakuum , mBumpIntensity (1.f) , mWireframe (false) + , mAdditiveTransparency (10e10f) {} //! Name of the surface @@ -571,6 +593,9 @@ struct Surface //! Wireframe flag bool mWireframe; + + //! Intensity of additive blending + float mAdditiveTransparency; }; // --------------------------------------------------------------------------- @@ -592,7 +617,7 @@ typedef std::vector < WeightChannel > WeightChannelList; typedef std::vector < VColorChannel > VColorChannelList; typedef std::vector < UVChannel > UVChannelList; typedef std::vector < Clip > ClipList; - +typedef std::vector < Envelope > EnvelopeList; // --------------------------------------------------------------------------- /** \brief Represents a layer in the file diff --git a/code/LWOLoader.cpp b/code/LWOLoader.cpp index ff72d82a7..95a38642e 100644 --- a/code/LWOLoader.cpp +++ b/code/LWOLoader.cpp @@ -68,21 +68,21 @@ LWOImporter::~LWOImporter() // ------------------------------------------------------------------------------------------------ // Returns whether the class can handle the format of the given file. -bool LWOImporter::CanRead( const std::string& pFile, IOSystem* pIOHandler) const +bool LWOImporter::CanRead( const std::string& pFile, IOSystem* pIOHandler, bool checkSig) const { - // simple check of file extension is enough for the moment - std::string::size_type pos = pFile.find_last_of('.'); - // no file extension - can't read - if( pos == std::string::npos)return false; - std::string extension = pFile.substr( pos); + const std::string extension = GetExtension(pFile); + if (extension == "lwo" || extension == "lxo") + return true; - if (extension.length() < 4)return false; - if (extension[0] != '.')return false; - - return ! (extension[1] != 'l' && extension[1] != 'L' || - extension[2] != 'w' && extension[2] != 'W' && - extension[2] != 'x' && extension[2] != 'X' || - extension[3] != 'o' && extension[3] != 'O'); + // if check for extension is not enough, check for the magic tokens + if (!extension.length() || checkSig) { + uint32_t tokens[3]; + tokens[0] = AI_LWO_FOURCC_LWOB; + tokens[1] = AI_LWO_FOURCC_LWO2; + tokens[2] = AI_LWO_FOURCC_LXOB; + return CheckMagicToken(pIOHandler,pFile,tokens,3,8); + } + return false; } // ------------------------------------------------------------------------------------------------ @@ -109,21 +109,23 @@ void LWOImporter::InternReadFile( const std::string& pFile, if((this->fileSize = (unsigned int)file->FileSize()) < 12) throw new ImportErrorException("LWO: The file is too small to contain the IFF header"); - // allocate storage and copy the contents of the file to a memory buffer + // Allocate storage and copy the contents of the file to a memory buffer std::vector< uint8_t > mBuffer(fileSize); file->Read( &mBuffer[0], 1, fileSize); this->pScene = pScene; - // determine the type of the file + // Determine the type of the file uint32_t fileType; const char* sz = IFF::ReadHeader(&mBuffer[0],fileType); if (sz)throw new ImportErrorException(sz); mFileBuffer = &mBuffer[0] + 12; fileSize -= 12; - hasNamedLayer = false; - // create temporary storage on the stack but store pointers to it in the class + // Initialize some members with their default values + hasNamedLayer = false; + + // Create temporary storage on the stack but store pointers to it in the class // instance. Therefore everything will be destructed properly if an exception // is thrown and we needn't take care of that. LayerList _mLayers; @@ -218,6 +220,11 @@ void LWOImporter::InternReadFile( const std::string& pFile, for (FaceList::iterator it = layer.mFaces.begin(), end = layer.mFaces.end(); it != end;++it,++i) { + // Check whether we support this face's type + if ((*it).type != AI_LWO_FACE && (*it).type != AI_LWO_PTCH) { + continue; + } + unsigned int idx = (*it).surfaceIndex; if (idx >= mTags->size()) { @@ -282,7 +289,7 @@ void LWOImporter::InternReadFile( const std::string& pFile, if (0xffffffff == vUVChannelIndices[mui])break; pvUV[mui] = mesh->mTextureCoords[mui] = new aiVector3D[mesh->mNumVertices]; - // LightWave doesn't support more than 2 UV components + // LightWave doesn't support more than 2 UV components (?) // so we can directly setup this value mesh->mNumUVComponents[0] = 2; } @@ -318,6 +325,7 @@ void LWOImporter::InternReadFile( const std::string& pFile, register unsigned int idx = face.mIndices[q]; *pv = layer.mTempPoints[idx] + layer.mPivot; pv->z *= -1.0f; // DX to OGL + //std::swap(pv->z,pv->y); pv++; // process UV coordinates @@ -585,7 +593,8 @@ void LWOImporter::GenerateNodeGraph(std::vector& apcNodes) pScene->mRootNode->mChildren = apcNewNodes; pScene->mRootNode->mNumChildren = newSize; } - if (!pScene->mRootNode->mNumChildren)throw new ImportErrorException("LWO: Unable to build a valid node graph"); + if (!pScene->mRootNode->mNumChildren) + throw new ImportErrorException("LWO: Unable to build a valid node graph"); // remove a single root node // TODO: implement directly in the above loop, no need to deallocate here @@ -717,31 +726,44 @@ void LWOImporter::LoadLWOPoints(unsigned int length) void LWOImporter::LoadLWO2Polygons(unsigned int length) { LE_NCONST uint16_t* const end = (LE_NCONST uint16_t*)(mFileBuffer+length); - uint32_t type = GetU4(); + const uint32_t type = GetU4(); // Determine the type of the polygons switch (type) { + // read unsupported stuff too (although we wont process it) + case AI_LWO_BONE: + DefaultLogger::get()->warn("LWO2: Encountered unsupported primitive chunk (BONE)"); + break; + case AI_LWO_MBAL: + DefaultLogger::get()->warn("LWO2: Encountered unsupported primitive chunk (METABALL)"); + break; + case AI_LWO_CURV: + DefaultLogger::get()->warn("LWO2: Encountered unsupported primitive chunk (SPLINE)");; + break; + + // These are ok with no restrictions case AI_LWO_PTCH: case AI_LWO_FACE: - break; default: - DefaultLogger::get()->warn("LWO2: Unsupported polygon type (PTCH and FACE are supported)"); + + // hm!? wtf is this? ok ... + DefaultLogger::get()->error("LWO2: Encountered unknown polygon type"); + break; } // first find out how many faces and vertices we'll finally need - uint16_t* cursor = (uint16_t*)mFileBuffer; + uint16_t* cursor= (uint16_t*)mFileBuffer; unsigned int iNumFaces = 0,iNumVertices = 0; CountVertsAndFacesLWO2(iNumVertices,iNumFaces,cursor,end); // allocate the output array and copy face indices - if (iNumFaces) - { + if (iNumFaces) { cursor = (uint16_t*)mFileBuffer; - mCurLayer->mFaces.resize(iNumFaces); + mCurLayer->mFaces.resize(iNumFaces,LWO::Face(type)); FaceList::iterator it = mCurLayer->mFaces.begin(); CopyFaceIndicesLWO2(it,cursor,end); } @@ -898,6 +920,7 @@ inline void AddToSingleLinkedList(ReferrerList& refList, unsigned int srcIdx, un } // ------------------------------------------------------------------------------------------------ +// Load LWO2 vertex map void LWOImporter::LoadLWO2VertexMap(unsigned int length, bool perPoly) { LE_NCONST uint8_t* const end = mFileBuffer+length; @@ -915,24 +938,24 @@ void LWOImporter::LoadLWO2VertexMap(unsigned int length, bool perPoly) switch (type) { case AI_LWO_TXUV: - if (dims != 2) - { + if (dims != 2) { DefaultLogger::get()->warn("LWO2: Found UV channel with != 2 components"); + return; } base = FindEntry(mCurLayer->mUVChannels,name,perPoly); break; case AI_LWO_WGHT: - if (dims != 1) - { + if (dims != 1) { DefaultLogger::get()->warn("LWO2: found vertex weight map with != 1 components"); + return; } base = FindEntry(mCurLayer->mWeightChannels,name,perPoly); break; case AI_LWO_RGB: case AI_LWO_RGBA: - if (dims != 3 && dims != 4) - { + if (dims != 3 && dims != 4) { DefaultLogger::get()->warn("LWO2: found vertex color map with != 3&4 components"); + return; } base = FindEntry(mCurLayer->mVColorChannels,name,perPoly); break; @@ -1028,6 +1051,7 @@ void LWOImporter::LoadLWO2VertexMap(unsigned int length, bool perPoly) } // ------------------------------------------------------------------------------------------------ +// Load LWO2 clip void LWOImporter::LoadLWO2Clip(unsigned int length) { AI_LWO_VALIDATE_CHUNK_LENGTH(length,CLIP,10); @@ -1042,6 +1066,7 @@ void LWOImporter::LoadLWO2Clip(unsigned int length) switch (head->type) { case AI_LWO_STIL: + AI_LWO_VALIDATE_CHUNK_LENGTH(head->length,STIL,1); // "Normal" texture GetS0(clip.path,head->length); @@ -1049,7 +1074,7 @@ void LWOImporter::LoadLWO2Clip(unsigned int length) break; case AI_LWO_ISEQ: - + AI_LWO_VALIDATE_CHUNK_LENGTH(head->length,ISEQ,16); // Image sequence. We'll later take the first. { uint8_t digits = GetU1(); mFileBuffer++; @@ -1078,18 +1103,124 @@ void LWOImporter::LoadLWO2Clip(unsigned int length) break; case AI_LWO_XREF: + AI_LWO_VALIDATE_CHUNK_LENGTH(head->length,XREF,4); // Just a cross-reference to another CLIp clip.type = Clip::REF; clip.clipRef = GetU4(); break; + case AI_LWO_NEGA: + AI_LWO_VALIDATE_CHUNK_LENGTH(head->length,NEGA,2); + clip.negate = (0 != GetU2()); + break; + default: DefaultLogger::get()->warn("LWO2: Encountered unknown CLIP subchunk"); } } // ------------------------------------------------------------------------------------------------ +// Load envelope description +void LWOImporter::LoadLWO2Envelope(unsigned int length) +{ + LE_NCONST uint8_t* const end = mFileBuffer + length; + AI_LWO_VALIDATE_CHUNK_LENGTH(length,ENVL,4); + + mEnvelopes.push_back(LWO::Envelope()); + LWO::Envelope& envelope = mEnvelopes.back(); + + // Get the index of the envelope + envelope.index = ReadVSizedIntLWO2(mFileBuffer); + + // ... and read all subchunks + while (true) + { + if (mFileBuffer + 6 >= end)break; + LE_NCONST IFF::SubChunkHeader* const head = IFF::LoadSubChunk(mFileBuffer); + + if (mFileBuffer + head->length > end) + throw new ImportErrorException("LWO2: Invalid envelope chunk length"); + + uint8_t* const next = mFileBuffer+head->length; + switch (head->type) + { + // Type & representation of the envelope + case AI_LWO_TYPE: + AI_LWO_VALIDATE_CHUNK_LENGTH(head->length,TYPE,2); + mFileBuffer++; // skip user format + + // Determine type of envelope + envelope.type = (LWO::EnvelopeType)*mFileBuffer; + ++mFileBuffer; + break; + + // precondition + case AI_LWO_PRE: + AI_LWO_VALIDATE_CHUNK_LENGTH(head->length,PRE,2); + envelope.pre = (LWO::PrePostBehaviour)GetU2(); + break; + + // postcondition + case AI_LWO_POST: + AI_LWO_VALIDATE_CHUNK_LENGTH(head->length,POST,2); + envelope.post = (LWO::PrePostBehaviour)GetU2(); + break; + + // keyframe + case AI_LWO_KEY: + { + AI_LWO_VALIDATE_CHUNK_LENGTH(head->length,KEY,8); + + envelope.keys.push_back(LWO::Key()); + LWO::Key& key = envelope.keys.back(); + + key.time = GetF4(); + key.value = GetF4(); + break; + } + + // interval interpolation + case AI_LWO_SPAN: + { + AI_LWO_VALIDATE_CHUNK_LENGTH(head->length,SPAN,4); + if (envelope.keys.size()<2) + DefaultLogger::get()->warn("LWO2: Unexpected SPAN chunk"); + else { + LWO::Key& key = envelope.keys.back(); + switch (GetU4()) + { + case AI_LWO_STEP: + key.inter = LWO::IT_STEP;break; + case AI_LWO_LINE: + key.inter = LWO::IT_LINE;break; + case AI_LWO_TCB: + key.inter = LWO::IT_TCB;break; + case AI_LWO_HERM: + key.inter = LWO::IT_HERM;break; + case AI_LWO_BEZI: + key.inter = LWO::IT_BEZI;break; + case AI_LWO_BEZ2: + key.inter = LWO::IT_BEZ2;break; + default: + DefaultLogger::get()->warn("LWO2: Unknown interval interpolation mode"); + }; + + // todo ... read params + } + break; + } + + default: + DefaultLogger::get()->warn("LWO2: Encountered unknown ENVL subchunk"); + } + // regardless how much we did actually read, go to the next chunk + mFileBuffer = next; + } +} + +// ------------------------------------------------------------------------------------------------ +// Load file - master function void LWOImporter::LoadLWO2File() { bool skip = false; @@ -1121,8 +1252,7 @@ void LWOImporter::LoadLWO2File() // load this layer or ignore it? Check the layer index property // NOTE: The first layer is the default layer, so the layer // index is one-based now - if (0xffffffff != configLayerIndex && configLayerIndex != mLayers->size()) - { + if (0xffffffff != configLayerIndex && configLayerIndex != mLayers->size()-1) { skip = true; } else skip = false; @@ -1138,16 +1268,14 @@ void LWOImporter::LoadLWO2File() GetS0(layer.mName,head->length-16); // if the name is empty, generate a default name - if (layer.mName.empty()) - { + if (layer.mName.empty()) { char buffer[128]; // should be sufficiently large ::sprintf(buffer,"Layer_%i", iUnnamed++); layer.mName = buffer; } // load this layer or ignore it? Check the layer name property - if (configLayerName.length() && configLayerName != layer.mName) - { + if (configLayerName.length() && configLayerName != layer.mName) { skip = true; } else hasNamedLayer = true; @@ -1161,7 +1289,8 @@ void LWOImporter::LoadLWO2File() // vertex list case AI_LWO_PNTS: { - if (skip)break; + if (skip) + break; unsigned int old = (unsigned int)mCurLayer->mTempPoints.size(); LoadLWOPoints(head->length); @@ -1178,7 +1307,8 @@ void LWOImporter::LoadLWO2File() // --- intentionally no break here case AI_LWO_VMAP: { - if (skip)break; + if (skip) + break; if (mCurLayer->mTempPoints.empty()) DefaultLogger::get()->warn("LWO2: Unexpected VMAP chunk"); @@ -1188,7 +1318,8 @@ void LWOImporter::LoadLWO2File() // face list case AI_LWO_POLS: { - if (skip)break; + if (skip) + break; unsigned int old = (unsigned int)mCurLayer->mFaces.size(); LoadLWO2Polygons(head->length); @@ -1198,7 +1329,8 @@ void LWOImporter::LoadLWO2File() // polygon tags case AI_LWO_PTAG: { - if (skip)break; + if (skip) + break; if (mCurLayer->mFaces.empty()) DefaultLogger::get()->warn("LWO2: Unexpected PTAG"); @@ -1227,9 +1359,16 @@ void LWOImporter::LoadLWO2File() LoadLWO2Clip(head->length); break; } + + // envelope chunk + case AI_LWO_ENVL: + { + LoadLWO2Envelope(head->length); + break; + } } mFileBuffer = next; } } -#endif // !! ASSIMP_BUILD_NO_LWO_IMPORTER \ No newline at end of file +#endif // !! ASSIMP_BUILD_NO_LWO_IMPORTER diff --git a/code/LWOLoader.h b/code/LWOLoader.h index cf05ed9f6..9e308599e 100644 --- a/code/LWOLoader.h +++ b/code/LWOLoader.h @@ -62,7 +62,7 @@ using namespace LWO; * Methods named "xxxLWOB[xxx]" are used with the older LWOB format. * Methods named "xxxLWO[xxx]" are used with both formats. * Methods named "xxx" are used to preprocess the loaded data - - * they aren't specific to one format version, either + * they aren't specific to one format version */ // --------------------------------------------------------------------------- class LWOImporter : public BaseImporter @@ -81,8 +81,10 @@ public: // ------------------------------------------------------------------- /** Returns whether the class can handle the format of the given file. - * See BaseImporter::CanRead() for details. */ - bool CanRead( const std::string& pFile, IOSystem* pIOHandler) const; + * See BaseImporter::CanRead() for details. + */ + bool CanRead( const std::string& pFile, IOSystem* pIOHandler, + bool checkSig) const; // ------------------------------------------------------------------- @@ -211,6 +213,11 @@ private: */ void LoadLWO2Clip(unsigned int length); + // ------------------------------------------------------------------- + /** Load an envelope from an EVL chunk + * @param length Size of the chunk + */ + void LoadLWO2Envelope(unsigned int length); // ------------------------------------------------------------------- /** Count vertices and faces in a LWOB/LWO2 file @@ -372,6 +379,9 @@ protected: /** Temporary clip list from the file */ ClipList mClips; + /** Temporary envelope list from the file */ + EnvelopeList mEnvelopes; + /** file buffer */ uint8_t* mFileBuffer; @@ -381,9 +391,16 @@ protected: /** Output scene */ aiScene* pScene; + /** Configuration option: speed flag set? */ bool configSpeedFlag; + + /** Configuration option: index of layer to be loaded */ unsigned int configLayerIndex; + + /** Configuration option: name of layer to be loaded */ std::string configLayerName; + + /** True if we have a named layer */ bool hasNamedLayer; }; diff --git a/code/LWOMaterial.cpp b/code/LWOMaterial.cpp index 8afdeb8a9..1a82ab1b8 100644 --- a/code/LWOMaterial.cpp +++ b/code/LWOMaterial.cpp @@ -183,13 +183,30 @@ bool LWOImporter::HandleTextures(MaterialHelper* pcMat, const TextureList& in, a if (mClips.end() == clip) { DefaultLogger::get()->error("LWO2: Clip index is out of bounds"); temp = 0; + + // fixme: appearently some LWO files shipping with Doom3 don't + // have clips at all ... check whether that's true or whether + // it's a bug in the loader. + + s.Set("$texture.png"); + + //continue; } - if (Clip::UNSUPPORTED == (*clip).type) { - DefaultLogger::get()->error("LWO2: Clip type is not supported"); - continue; + else { + if (Clip::UNSUPPORTED == (*clip).type) { + DefaultLogger::get()->error("LWO2: Clip type is not supported"); + continue; + } + AdjustTexturePath((*clip).path); + s.Set((*clip).path); + + // Additional image settings + int flags = 0; + if ((*clip).negate) { + flags |= aiTextureFlags_Invert; + } + pcMat->AddProperty(&flags,1,AI_MATKEY_TEXFLAGS(type,cur)); } - AdjustTexturePath((*clip).path); - s.Set((*clip).path); } else { @@ -232,6 +249,7 @@ bool LWOImporter::HandleTextures(MaterialHelper* pcMat, const TextureList& in, a DefaultLogger::get()->warn("LWO2: Unsupported texture blend mode: alpha or displacement"); } + // Setup texture operation pcMat->AddProperty((int*)&temp,1,AI_MATKEY_TEXOP(type,cur)); // setup the mapping mode @@ -258,12 +276,12 @@ void LWOImporter::ConvertMaterial(const LWO::Surface& surf,MaterialHelper* pcMat st.Set(surf.mName); pcMat->AddProperty(&st,AI_MATKEY_NAME); - int i = surf.bDoubleSided ? 1 : 0; - pcMat->AddProperty(&i,1,AI_MATKEY_TWOSIDED); + const int i = surf.bDoubleSided ? 1 : 0; + pcMat->AddProperty(&i,1,AI_MATKEY_TWOSIDED); // add the refraction index and the bump intensity - pcMat->AddProperty(&surf.mIOR,1,AI_MATKEY_REFRACTI); - pcMat->AddProperty(&surf.mBumpIntensity,1,AI_MATKEY_BUMPSCALING); + pcMat->AddProperty(&surf.mIOR,1,AI_MATKEY_REFRACTI); + pcMat->AddProperty(&surf.mBumpIntensity,1,AI_MATKEY_BUMPSCALING); aiShadingMode m; if (surf.mSpecularValue && surf.mGlossiness) @@ -281,16 +299,16 @@ void LWOImporter::ConvertMaterial(const LWO::Surface& surf,MaterialHelper* pcMat else fGloss = 80.0f; } - pcMat->AddProperty(&surf.mSpecularValue,1,AI_MATKEY_SHININESS_STRENGTH); - pcMat->AddProperty(&fGloss,1,AI_MATKEY_SHININESS); + pcMat->AddProperty(&surf.mSpecularValue,1,AI_MATKEY_SHININESS_STRENGTH); + pcMat->AddProperty(&fGloss,1,AI_MATKEY_SHININESS); m = aiShadingMode_Phong; } else m = aiShadingMode_Gouraud; // specular color aiColor3D clr = lerp( aiColor3D(1.f,1.f,1.f), surf.mColor, surf.mColorHighlights ); - pcMat->AddProperty(&clr,1,AI_MATKEY_COLOR_SPECULAR); - pcMat->AddProperty(&surf.mSpecularValue,1,AI_MATKEY_SHININESS_STRENGTH); + pcMat->AddProperty(&clr,1,AI_MATKEY_COLOR_SPECULAR); + pcMat->AddProperty(&surf.mSpecularValue,1,AI_MATKEY_SHININESS_STRENGTH); // emissive color // (luminosity is not really the same but it affects the surface in @@ -298,12 +316,21 @@ void LWOImporter::ConvertMaterial(const LWO::Surface& surf,MaterialHelper* pcMat clr.g = clr.b = clr.r = surf.mLuminosity*0.8f; pcMat->AddProperty(&clr,1,AI_MATKEY_COLOR_EMISSIVE); - // opacity - if (10e10f != surf.mTransparency) + // opacity ... either additive or default-blended, please + if (10e10f != surf.mAdditiveTransparency) { - float f = 1.0f-surf.mTransparency; - pcMat->AddProperty(&f,1,AI_MATKEY_OPACITY); + const int add = aiBlendMode_Additive; + pcMat->AddProperty(&surf.mAdditiveTransparency,1,AI_MATKEY_OPACITY); + pcMat->AddProperty(&add,1,AI_MATKEY_BLEND_FUNC); } + else if (10e10f != surf.mTransparency) + { + const int def = aiBlendMode_Default; + const float f = 1.0f-surf.mTransparency; + pcMat->AddProperty(&f,1,AI_MATKEY_OPACITY); + pcMat->AddProperty(&def,1,AI_MATKEY_BLEND_FUNC); + } + // ADD TEXTURES to the material // TODO: find out how we can handle COLOR textures correctly... @@ -315,25 +342,21 @@ void LWOImporter::ConvertMaterial(const LWO::Surface& surf,MaterialHelper* pcMat HandleTextures(pcMat,surf.mOpacityTextures,aiTextureType_OPACITY); HandleTextures(pcMat,surf.mReflectionTextures,aiTextureType_REFLECTION); - // now we need to know which shader we must use + // Now we need to know which shader we must use // iterate through the shader list of the surface and - // search for a name we know + // search for a name which we know ... for (ShaderList::const_iterator it = surf.mShaders.begin(), end = surf.mShaders.end(); it != end;++it) { //if (!(*it).enabled)continue; - if ((*it).functionName == "LW_SuperCelShader" || - (*it).functionName == "AH_CelShader") - { + if ((*it).functionName == "LW_SuperCelShader" || (*it).functionName == "AH_CelShader") { DefaultLogger::get()->info("LWO2: Mapping LW_SuperCelShader/AH_CelShader " "to aiShadingMode_Toon"); m = aiShadingMode_Toon; break; } - else if ((*it).functionName == "LW_RealFresnel" || - (*it).functionName == "LW_FastFresnel") - { + else if ((*it).functionName == "LW_RealFresnel" || (*it).functionName == "LW_FastFresnel") { DefaultLogger::get()->info("LWO2: Mapping LW_RealFresnel/LW_FastFresnel " "to aiShadingMode_Fresnel"); @@ -345,12 +368,13 @@ void LWOImporter::ConvertMaterial(const LWO::Surface& surf,MaterialHelper* pcMat DefaultLogger::get()->warn("LWO2: Unknown surface shader: " + (*it).functionName); } } - if (surf.mMaximumSmoothAngle <= 0.0f)m = aiShadingMode_Flat; + if (surf.mMaximumSmoothAngle <= 0.0f) + m = aiShadingMode_Flat; pcMat->AddProperty((int*)&m,1,AI_MATKEY_SHADING_MODEL); // (the diffuse value is just a scaling factor) // If a diffuse texture is set, we set this value to 1.0 - clr = (b ? aiColor3D(1.f,1.f,1.f) : surf.mColor); + clr = (b && false ? aiColor3D(1.f,1.f,1.f) : surf.mColor); clr.r *= surf.mDiffuseValue; clr.g *= surf.mDiffuseValue; clr.b *= surf.mDiffuseValue; @@ -365,9 +389,7 @@ void LWOImporter::FindUVChannels(LWO::TextureList& list, LWO::Layer& layer, it != end;++it) { // Ignore textures with non-UV mappings for the moment. - if (!(*it).enabled || !(*it).bCanUse || 0xffffffff != (*it).mRealUVIndex || - (*it).mapMode != LWO::Texture::UV) - { + if (!(*it).enabled || !(*it).bCanUse || 0xffffffff != (*it).mRealUVIndex || (*it).mapMode != LWO::Texture::UV) { continue; } for (unsigned int i = 0; i < layer.mUVChannels.size();++i) @@ -379,6 +401,7 @@ void LWOImporter::FindUVChannels(LWO::TextureList& list, LWO::Layer& layer, { if (i == out[m]) { (*it).mRealUVIndex = m; + break; } } if (0xffffffff == (*it).mRealUVIndex) @@ -710,7 +733,9 @@ void LWOImporter::LoadLWO2Surface(unsigned int size) // transparency case AI_LWO_TRAN: { - if (surf.mTransparency == 10e10f)break; + // transparency explicitly disabled? + if (surf.mTransparency == 10e10f) + break; AI_LWO_VALIDATE_CHUNK_LENGTH(head->length,TRAN,4); surf.mTransparency = GetF4(); @@ -741,6 +766,13 @@ void LWOImporter::LoadLWO2Surface(unsigned int size) } break; } + // additive transparency + case AI_LWO_ADTR: + { + AI_LWO_VALIDATE_CHUNK_LENGTH(head->length,ADTR,4); + surf.mAdditiveTransparency = GetF4(); + break; + } // wireframe mode case AI_LWO_LINE: { @@ -788,7 +820,7 @@ void LWOImporter::LoadLWO2Surface(unsigned int size) case AI_LWO_SMAN: { AI_LWO_VALIDATE_CHUNK_LENGTH(head->length,SMAN,4); - surf.mMaximumSmoothAngle = GetF4(); + surf.mMaximumSmoothAngle = fabs( GetF4() ); break; } // vertex color channel to be applied to the surface diff --git a/code/LWSLoader.cpp b/code/LWSLoader.cpp index c0bb78c47..8bc71270b 100644 --- a/code/LWSLoader.cpp +++ b/code/LWSLoader.cpp @@ -39,7 +39,9 @@ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. --------------------------------------------------------------------------- */ -/** @file Implementation of the LWS importer class */ +/** @file LWSLoader.cpp + * @brief Implementation of the LWS importer class + */ #include "AssimpPCH.h" @@ -48,9 +50,60 @@ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. #include "fast_atof.h" #include "SceneCombiner.h" +#include "GenericProperty.h" +#include "SkeletonMeshBuilder.h" using namespace Assimp; +// ------------------------------------------------------------------------------------------------ +// Recursive parsing of LWS files +void LWS::Element::Parse (const char*& buffer) +{ + for (;SkipSpacesAndLineEnd(&buffer);SkipLine(&buffer)) { + + // begin of a new element with children + bool sub = false; + if (*buffer == '{') { + ++buffer; + SkipSpaces(&buffer); + sub = true; + } + else if (*buffer == '}') + return; + + children.push_back(Element()); + + // copy data line - read token per token + + const char* cur = buffer; + while (!IsSpaceOrNewLine(*buffer)) ++buffer; + children.back().tokens[0] = std::string(cur,(size_t) (buffer-cur)); + SkipSpaces(&buffer); + + if (children.back().tokens[0] == "Plugin") + { + DefaultLogger::get()->debug("LWS: Skipping over plugin-specific data"); + + // strange stuff inside Plugin/Endplugin blocks. Needn't + // follow LWS syntax, so we skip over it + for (;SkipSpacesAndLineEnd(&buffer);SkipLine(&buffer)) { + if (!::strncmp(buffer,"EndPlugin",9)) { + //SkipLine(&buffer); + break; + } + } + continue; + } + + cur = buffer; + while (!IsLineEnd(*buffer)) ++buffer; + children.back().tokens[1] = std::string(cur,(size_t) (buffer-cur)); + + // parse more elements recursively + if (sub) + children.back().Parse(buffer); + } +} // ------------------------------------------------------------------------------------------------ // Constructor to be privately used by Importer @@ -68,30 +121,755 @@ LWSImporter::~LWSImporter() // ------------------------------------------------------------------------------------------------ // Returns whether the class can handle the format of the given file. -bool LWSImporter::CanRead( const std::string& pFile, IOSystem* pIOHandler) const +bool LWSImporter::CanRead( const std::string& pFile, IOSystem* pIOHandler,bool checkSig) const { - std::string::size_type pos = pFile.find_last_of('.'); + const std::string extension = GetExtension(pFile); + if (extension == "lws" || extension == "mot") + return true; - // no file extension - can't read - if( pos == std::string::npos) - return false; - - std::string extension = pFile.substr( pos); - for (std::string::iterator i = extension.begin(); i != extension.end();++i) - *i = ::tolower(*i); - - return extension == ".lws"; + // if check for extension is not enough, check for the magic tokens LWSC and LWMO + if (!extension.length() || checkSig) { + uint32_t tokens[2]; + tokens[0] = AI_MAKE_MAGIC("LWSC"); + tokens[1] = AI_MAKE_MAGIC("LWMO"); + return CheckMagicToken(pIOHandler,pFile,tokens,2); + } + return false; } // ------------------------------------------------------------------------------------------------ +// Get list of file extensions void LWSImporter::GetExtensionList(std::string& append) { - append.append("*.lws"); + append.append("*.lws;*.mot"); } // ------------------------------------------------------------------------------------------------ +// Setup configuration properties +void LWSImporter::SetupProperties(const Importer* pImp) +{ + // AI_CONFIG_FAVOUR_SPEED + configSpeedFlag = (0 != pImp->GetPropertyInteger(AI_CONFIG_FAVOUR_SPEED,0)); + + // AI_CONFIG_IMPORT_LWS_ANIM_START + first = pImp->GetPropertyInteger(AI_CONFIG_IMPORT_LWS_ANIM_START, + 150392 /* magic hack */); + + // AI_CONFIG_IMPORT_LWS_ANIM_END + last = pImp->GetPropertyInteger(AI_CONFIG_IMPORT_LWS_ANIM_END, + 150392 /* magic hack */); + + if (last < first) { + std::swap(last,first); + } +} + +// ------------------------------------------------------------------------------------------------ +// Read an envelope description +void LWSImporter::ReadEnvelope(const LWS::Element& dad, LWO::Envelope& fill ) +{ + if (dad.children.empty()) { + DefaultLogger::get()->error("LWS: Envelope descriptions must not be empty"); + return; + } + + // reserve enough storage + std::list< LWS::Element >::const_iterator it = dad.children.begin();; + fill.keys.reserve(strtol10(it->tokens[1].c_str())); + + for (++it; it != dad.children.end(); ++it) { + const char* c = (*it).tokens[1].c_str(); + + if ((*it).tokens[0] == "Key") { + fill.keys.push_back(LWO::Key()); + LWO::Key& key = fill.keys.back(); + + float f; + SkipSpaces(&c); + c = fast_atof_move(c,key.value); + SkipSpaces(&c); + c = fast_atof_move(c,f); + + key.time = f; + + unsigned int span = strtol10(c,&c), num = 0; + switch (span) { + + case 0: + key.inter = LWO::IT_TCB; + num = 5; + break; + case 1: + case 2: + key.inter = LWO::IT_HERM; + num = 5; + break; + case 3: + key.inter = LWO::IT_LINE; + num = 0; + break; + case 4: + key.inter = LWO::IT_STEP; + num = 0; + break; + case 5: + key.inter = LWO::IT_BEZ2; + num = 4; + break; + default: + DefaultLogger::get()->error("LWS: Unknown span type"); + } + for (unsigned int i = 0; i < num;++i) { + SkipSpaces(&c); + c = fast_atof_move(c,key.params[i]); + } + } + else if ((*it).tokens[0] == "Behaviors") { + SkipSpaces(&c); + fill.pre = (LWO::PrePostBehaviour) strtol10(c,&c); + SkipSpaces(&c); + fill.post = (LWO::PrePostBehaviour) strtol10(c,&c); + } + } +} + +// ------------------------------------------------------------------------------------------------ +// Read animation channels in the old LightWave animation format +void LWSImporter::ReadEnvelope_Old( + std::list< LWS::Element >::const_iterator& it, + const std::list< LWS::Element >::const_iterator& end, + LWS::NodeDesc& nodes, + unsigned int version) +{ + unsigned int num,sub_num; + if (++it == end)goto unexpected_end; + + num = strtol10((*it).tokens[0].c_str()); + for (unsigned int i = 0; i < num; ++i) { + + nodes.channels.push_back(LWO::Envelope()); + LWO::Envelope& envl = nodes.channels.back(); + + envl.index = i; + envl.type = (LWO::EnvelopeType)(i+1); + + if (++it == end)goto unexpected_end; + sub_num = strtol10((*it).tokens[0].c_str()); + + for (unsigned int n = 0; n < sub_num;++n) { + + if (++it == end)goto unexpected_end; + + // parse value and time, skip the rest for the moment. + LWO::Key key; + const char* c = fast_atof_move((*it).tokens[0].c_str(),key.value); + SkipSpaces(&c); + float f; + fast_atof_move((*it).tokens[0].c_str(),f); + key.time = f; + + envl.keys.push_back(key); + } + } + return; + +unexpected_end: + DefaultLogger::get()->error("LWS: Encountered unexpected end of file while parsing object motion"); +} + +// ------------------------------------------------------------------------------------------------ +// Setup a nice name for a node +void LWSImporter::SetupNodeName(aiNode* nd, LWS::NodeDesc& src) +{ + const unsigned int combined = src.number | ((unsigned int)src.type) << 28u; + + // the name depends on the type. We break LWS's strange naming convention + // and return human-readable, but still machine-parsable and unique, strings. + if (src.type == LWS::NodeDesc::OBJECT) { + + if (src.path.length()) { + std::string::size_type s = src.path.find_last_of("\\/"); + if (s == std::string::npos) + s = 0; + else ++s; + + nd->mName.length = ::sprintf(nd->mName.data,"%s_(%08X)",src.path.substr(s).c_str(),combined); + return; + } + } + nd->mName.length = ::sprintf(nd->mName.data,"%s_(%08X)",src.name,combined); +} + +// ------------------------------------------------------------------------------------------------ +// Recursively build the scenegraph +void LWSImporter::BuildGraph(aiNode* nd, LWS::NodeDesc& src, std::vector& attach, + BatchLoader& batch, + aiCamera**& camOut, + aiLight**& lightOut, + std::vector& animOut) +{ + // Setup a very cryptic name for the node, we want the user to be happy + SetupNodeName(nd,src); + + // If this is an object from an external file - get the scene + // and setup proper attachment tags + if (src.type == LWS::NodeDesc::OBJECT && src.path.length() ) { + aiScene* obj = batch.GetImport(src.id); + if (!obj) { + DefaultLogger::get()->error("LWS: Failed to read external file " + src.path); + } + else { + attach.push_back(AttachmentInfo(obj,nd)); + } + } + + // If object is a light source - setup a corresponding ai structure + else if (src.type == LWS::NodeDesc::LIGHT) { + aiLight* lit = *lightOut++ = new aiLight(); + + // compute final light color + lit->mColorDiffuse = lit->mColorSpecular = src.lightColor*src.lightIntensity; + + // name to attach light to node -> unique due to LWs indexing system + lit->mName = nd->mName; + + // detemine light type and setup additional members + if (src.lightType == 2) { /* spot light */ + + lit->mType = aiLightSource_SPOT; + lit->mAngleInnerCone = (float)AI_DEG_TO_RAD( src.lightConeAngle ); + lit->mAngleOuterCone = lit->mAngleInnerCone+(float)AI_DEG_TO_RAD( src.lightEdgeAngle ); + + } + else if (src.lightType == 1) { /* directional light source */ + lit->mType = aiLightSource_DIRECTIONAL; + } + else lit->mType = aiLightSource_POINT; + + // fixme: no proper handling of light falloffs yet + if (src.lightFalloffType == 1) + lit->mAttenuationConstant = 1.f; + else if (src.lightFalloffType == 1) + lit->mAttenuationLinear = 1.f; + else + lit->mAttenuationQuadratic = 1.f; + } + + // If object is a camera - setup a corresponding ai structure + else if (src.type == LWS::NodeDesc::CAMERA) { + aiCamera* cam = *camOut++ = new aiCamera(); + + // name to attach cam to node -> unique due to LWs indexing system + cam->mName = nd->mName; + } + + // Get the node transformation from the LWO key + LWO::AnimResolver resolver(src.channels,fps); + resolver.ExtractBindPose(nd->mTransformation); + + // .. and construct animation channels + aiNodeAnim* anim = NULL; +#if 0 /* not yet */ + if (first != last) { + resolver.SetAnimationRange(first,last); + resolver.ExtractAnimChannel(&anim,AI_LWO_ANIM_FLAG_SAMPLE_ANIMS|AI_LWO_ANIM_FLAG_START_AT_ZERO); + if (anim) { + anim->mNodeName = nd->mName; + animOut.push_back(anim); + } + } +#endif + + // process pivot point, if any + if (src.pivotPos != aiVector3D()) { + aiMatrix4x4 tmp; + aiMatrix4x4::Translation(-src.pivotPos,tmp); + + if (anim) { + + // We have an animation channel for this node. Problem: to combine the pivot + // point with the node anims, we'd need to interpolate *all* keys, get + // transformation matrices from them, apply the translation and decompose + // the resulting matrices again in order to reconstruct the keys. This + // solution here is *much* easier ... we're just inserting an extra node + // in the hierarchy. + // Maybe the final optimization here will be done during postprocessing. + + aiNode* pivot = new aiNode(); + pivot->mName.Set("$Pivot"); + pivot->mTransformation = tmp; + + pivot->mChildren = new aiNode*[pivot->mNumChildren = 1]; + pivot->mChildren[0] = nd; + + pivot->mParent = nd->mParent; + nd->mParent = pivot; + + // swap children ad hope the parents wont see a huge difference + pivot->mParent->mChildren[pivot->mParent->mNumChildren-1] = pivot; + } + else { + nd->mTransformation = tmp * nd->mTransformation; + } + } + + // Add children + if (src.children.size()) { + nd->mChildren = new aiNode*[src.children.size()]; + for (std::list::iterator it = src.children.begin(); it != src.children.end(); ++it) { + aiNode* ndd = nd->mChildren[nd->mNumChildren++] = new aiNode(); + ndd->mParent = nd; + + BuildGraph(ndd,**it,attach,batch,camOut,lightOut,animOut); + } + } +} + +// ------------------------------------------------------------------------------------------------ +// Determine the exact location of a LWO file +std::string LWSImporter::FindLWOFile(const std::string& in) +{ + // insert missing directory seperator if necessary + std::string tmp; + if (in.length() > 3 && in[1] == ':'&& in[2] != '\\' && in[2] != '/') + { + tmp = in[0] + ":\\" + in.substr(2); + } + else tmp = in; + + if (io->Exists(tmp)) + return in; + + // file is not accessible for us ... maybe it's packed by + // LightWave's 'Package Scene' command? + + // Relevant for us are the following two directories: + // \Objects\\<*>.lwo + // \Scenes\\<*>.lws + // where is optional. + + std::string test = ".." + io->getOsSeparator() + tmp; + if (io->Exists(test)) + return test; + + test = ".." + io->getOsSeparator() + test; + if (io->Exists(test)) + return test; + + // return original path, maybe the IOsystem knows better + return tmp; +} + +// ------------------------------------------------------------------------------------------------ +// Read file into given scene data structure void LWSImporter::InternReadFile( const std::string& pFile, aiScene* pScene, IOSystem* pIOHandler) { - return; + io = pIOHandler; + boost::scoped_ptr file( pIOHandler->Open( pFile, "rb")); + + // Check whether we can read from the file + if( file.get() == NULL) + throw new ImportErrorException( "Failed to open LWS file " + pFile + "."); + + // Allocate storage and copy the contents of the file to a memory buffer + const size_t fileSize = file->FileSize(); + std::vector< char > mBuffer(fileSize); + file->Read( &mBuffer[0], 1, fileSize); + + // Parse the file structure + LWS::Element root; const char* dummy = &mBuffer[0]; + root.Parse(dummy); + + // Construct a Batchimporter to read more files recursively + BatchLoader batch(pIOHandler); + batch.SetBasePath(pFile); + + // Construct an array to receive the flat output graph + std::list nodes; + + unsigned int cur_light = 0, cur_camera = 0, cur_object = 0; + unsigned int num_light = 0, num_camera = 0, num_object = 0; + + // check magic identifier, 'LWSC' + bool motion_file = false; + std::list< LWS::Element >::const_iterator it = root.children.begin(); + + if ((*it).tokens[0] == "LWMO") + motion_file = true; + + if ((*it).tokens[0] != "LWSC" && !motion_file) + throw new ImportErrorException("LWS: Not a LightWave scene, magic tag LWSC not found"); + + // get file format version and print to log + ++it; + unsigned int version = strtol10((*it).tokens[0].c_str()); + DefaultLogger::get()->info("LWS file format version is " + (*it).tokens[0]); + first = 0.; + last = 60.; + fps = 25.; /* seems to be a good default frame rate */ + + // Now read all elements in a very straghtforward manner + for (; it != root.children.end(); ++it) { + const char* c = (*it).tokens[1].c_str(); + + // 'FirstFrame': begin of animation slice + if ((*it).tokens[0] == "FirstFrame") { + if (150392. != first /* see SetupProperties() */) + first = strtol10(c,&c)-1.; /* we're zero-based */ + } + + // 'LastFrame': end of animation slice + else if ((*it).tokens[0] == "LastFrame") { + if (150392. != last /* see SetupProperties() */) + last = strtol10(c,&c)-1.; /* we're zero-based */ + } + + // 'FramesPerSecond': frames per second + else if ((*it).tokens[0] == "FramesPerSecond") { + fps = strtol10(c,&c); + } + + // 'LoadObjectLayer': load a layer of a specific LWO file + else if ((*it).tokens[0] == "LoadObjectLayer") { + + // get layer index + const int layer = strtol10(c,&c); + + // setup the layer to be loaded + BatchLoader::PropertyMap props; + SetGenericProperty(props.ints,AI_CONFIG_IMPORT_LWO_ONE_LAYER_ONLY,layer); + + // add node to list + LWS::NodeDesc d; + d.type = LWS::NodeDesc::OBJECT; + if (version >= 4) { // handle LWSC 4 explicit ID + SkipSpaces(&c); + d.number = strtol16(c,&c) & AI_LWS_MASK; + } + else d.number = cur_object++; + + // and add the file to the import list + SkipSpaces(&c); + std::string path = FindLWOFile( c ); + d.path = path; + d.id = batch.AddLoadRequest(path,0,&props); + + nodes.push_back(d); + num_object++; + } + // 'LoadObject': load a LWO file into the scenegraph + else if ((*it).tokens[0] == "LoadObject") { + + // add node to list + LWS::NodeDesc d; + d.type = LWS::NodeDesc::OBJECT; + + if (version >= 4) { // handle LWSC 4 explicit ID + d.number = strtol16(c,&c) & AI_LWS_MASK; + SkipSpaces(&c); + } + else d.number = cur_object++; + std::string path = FindLWOFile( c ); + d.id = batch.AddLoadRequest(path,0,NULL); + + d.path = path; + nodes.push_back(d); + num_object++; + } + // 'AddNullObject': add a dummy node to the hierarchy + else if ((*it).tokens[0] == "AddNullObject") { + + // add node to list + LWS::NodeDesc d; + d.type = LWS::NodeDesc::OBJECT; + d.name = c; + if (version >= 4) { // handle LWSC 4 explicit ID + d.number = strtol16(c,&c) & AI_LWS_MASK; + } + else d.number = cur_object++; + nodes.push_back(d); + + num_object++; + } + // 'NumChannels': Number of envelope channels assigned to last layer + else if ((*it).tokens[0] == "NumChannels") { + // ignore for now + } + // 'Channel': preceedes any envelope description + else if ((*it).tokens[0] == "Channel") { + if (nodes.empty()) { + if (motion_file) { + + // LightWave motion file. Add dummy node + LWS::NodeDesc d; + d.type = LWS::NodeDesc::OBJECT; + d.name = c; + d.number = cur_object++; + nodes.push_back(d); + } + else DefaultLogger::get()->error("LWS: Unexpected keyword: \'Channel\'"); + } + + // important: index of channel + nodes.back().channels.push_back(LWO::Envelope()); + LWO::Envelope& env = nodes.back().channels.back(); + + env.index = strtol10(c); + + // currently we can just interpret the standard channels 0...9 + // (hack) assume that index-i yields the binary channel type from LWO + env.type = (LWO::EnvelopeType)(env.index+1); + + } + // 'Envelope': a single animation channel + else if ((*it).tokens[0] == "Envelope") { + if (nodes.empty() || nodes.back().channels.empty()) + DefaultLogger::get()->error("LWS: Unexpected keyword: \'Envelope\'"); + else { + ReadEnvelope((*it),nodes.back().channels.back()); + } + } + // 'ObjectMotion': animation information for older lightwave formats + else if (version < 3 && ((*it).tokens[0] == "ObjectMotion" || + (*it).tokens[0] == "CameraMotion" || + (*it).tokens[0] == "LightMotion")) { + + if (nodes.empty()) + DefaultLogger::get()->error("LWS: Unexpected keyword: \'Motion\'"); + else { + ReadEnvelope_Old(it,root.children.end(),nodes.back(),version); + } + } + // 'Pre/PostBehavior': pre/post animation behaviour for LWSC 2 + else if (version == 2 && (*it).tokens[0] == "Pre/PostBehavior") { + if (nodes.empty()) + DefaultLogger::get()->error("LWS: Unexpected keyword: \'Pre/PostBehavior'"); + else { + for (std::list::iterator it = nodes.back().channels.begin(); it != nodes.back().channels.end(); ++it) { + // two ints per envelope + LWO::Envelope& env = *it; + env.pre = (LWO::PrePostBehaviour) strtol10(c,&c); SkipSpaces(&c); + env.post = (LWO::PrePostBehaviour) strtol10(c,&c); SkipSpaces(&c); + } + } + } + // 'ParentItem': specifies the parent of the current element + else if ((*it).tokens[0] == "ParentItem") { + if (nodes.empty()) + DefaultLogger::get()->error("LWS: Unexpected keyword: \'ParentItem\'"); + + else nodes.back().parent = strtol16(c,&c); + } + // 'ParentObject': deprecated one for older formats + else if (version < 3 && (*it).tokens[0] == "ParentObject") { + if (nodes.empty()) + DefaultLogger::get()->error("LWS: Unexpected keyword: \'ParentObject\'"); + + else { + nodes.back().parent = strtol10(c,&c) | (1u << 28u); + } + } + // 'AddCamera': add a camera to the scenegraph + else if ((*it).tokens[0] == "AddCamera") { + + // add node to list + LWS::NodeDesc d; + d.type = LWS::NodeDesc::CAMERA; + + if (version >= 4) { // handle LWSC 4 explicit ID + d.number = strtol16(c,&c) & AI_LWS_MASK; + } + else d.number = cur_camera++; + nodes.push_back(d); + + num_camera++; + } + // 'CameraName': set name of currently active camera + else if ((*it).tokens[0] == "CameraName") { + if (nodes.empty() || nodes.back().type != LWS::NodeDesc::CAMERA) + DefaultLogger::get()->error("LWS: Unexpected keyword: \'CameraName\'"); + + else nodes.back().name = c; + } + // 'AddLight': add a light to the scenegraph + else if ((*it).tokens[0] == "AddLight") { + + // add node to list + LWS::NodeDesc d; + d.type = LWS::NodeDesc::LIGHT; + + if (version >= 4) { // handle LWSC 4 explicit ID + d.number = strtol16(c,&c) & AI_LWS_MASK; + } + else d.number = cur_light++; + nodes.push_back(d); + + num_light++; + } + // 'LightName': set name of currently active light + else if ((*it).tokens[0] == "LightName") { + if (nodes.empty() || nodes.back().type != LWS::NodeDesc::LIGHT) + DefaultLogger::get()->error("LWS: Unexpected keyword: \'LightName\'"); + + else nodes.back().name = c; + } + // 'LightIntensity': set intensity of currently active light + else if ((*it).tokens[0] == "LightIntensity" || (*it).tokens[0] == "LgtIntensity" ) { + if (nodes.empty() || nodes.back().type != LWS::NodeDesc::LIGHT) + DefaultLogger::get()->error("LWS: Unexpected keyword: \'LightIntensity\'"); + + else fast_atof_move(c, nodes.back().lightIntensity ); + + } + // 'LightType': set type of currently active light + else if ((*it).tokens[0] == "LightType") { + if (nodes.empty() || nodes.back().type != LWS::NodeDesc::LIGHT) + DefaultLogger::get()->error("LWS: Unexpected keyword: \'LightType\'"); + + else nodes.back().lightType = strtol10(c); + + } + // 'LightFalloffType': set falloff type of currently active light + else if ((*it).tokens[0] == "LightFalloffType") { + if (nodes.empty() || nodes.back().type != LWS::NodeDesc::LIGHT) + DefaultLogger::get()->error("LWS: Unexpected keyword: \'LightFalloffType\'"); + + else nodes.back().lightFalloffType = strtol10(c); + + } + // 'LightConeAngle': set cone angle of currently active light + else if ((*it).tokens[0] == "LightConeAngle") { + if (nodes.empty() || nodes.back().type != LWS::NodeDesc::LIGHT) + DefaultLogger::get()->error("LWS: Unexpected keyword: \'LightConeAngle\'"); + + else nodes.back().lightConeAngle = fast_atof(c); + + } + // 'LightEdgeAngle': set area where we're smoothing from min to max intensity + else if ((*it).tokens[0] == "LightEdgeAngle") { + if (nodes.empty() || nodes.back().type != LWS::NodeDesc::LIGHT) + DefaultLogger::get()->error("LWS: Unexpected keyword: \'LightEdgeAngle\'"); + + else nodes.back().lightEdgeAngle = fast_atof(c); + + } + // 'LightColor': set color of currently active light + else if ((*it).tokens[0] == "LightColor") { + if (nodes.empty() || nodes.back().type != LWS::NodeDesc::LIGHT) + DefaultLogger::get()->error("LWS: Unexpected keyword: \'LightColor\'"); + + else { + c = fast_atof_move(c, (float&) nodes.back().lightColor.r ); + SkipSpaces(&c); + c = fast_atof_move(c, (float&) nodes.back().lightColor.g ); + SkipSpaces(&c); + c = fast_atof_move(c, (float&) nodes.back().lightColor.b ); + } + } + + // 'PivotPosition': position of local transformation origin + else if ((*it).tokens[0] == "PivotPosition" || (*it).tokens[0] == "PivotPoint") { + if (nodes.empty()) + DefaultLogger::get()->error("LWS: Unexpected keyword: \'PivotPosition\'"); + else { + c = fast_atof_move(c, (float&) nodes.back().pivotPos.x ); + SkipSpaces(&c); + c = fast_atof_move(c, (float&) nodes.back().pivotPos.y ); + SkipSpaces(&c); + c = fast_atof_move(c, (float&) nodes.back().pivotPos.z ); + } + } + } + + // resolve parenting + for (std::list::iterator it = nodes.begin(); it != nodes.end(); ++it) { + + // check whether there is another node which calls us a parent + for (std::list::iterator dit = nodes.begin(); dit != nodes.end(); ++dit) { + if (dit != it && *it == (*dit).parent) { + if ((*dit).parent_resolved) { + // fixme: it's still possible to produce an overflow due to cross references .. + DefaultLogger::get()->error("LWS: Found cross reference in scenegraph"); + continue; + } + + (*it).children.push_back(&*dit); + (*dit).parent_resolved = &*it; + } + } + } + + // find out how many nodes have no parent yet + unsigned int no_parent = 0; + for (std::list::iterator it = nodes.begin(); it != nodes.end(); ++it) { + if (!(*it).parent_resolved) + ++ no_parent; + } + if (!no_parent) + throw new ImportErrorException("LWS: Unable to find scene root node"); + + + // Load all subsequent files + batch.LoadAll(); + + // and build the final output graph by attaching the loaded external + // files to ourselves. first build a master graph + aiScene* master = new aiScene(); + aiNode* nd = master->mRootNode = new aiNode(); + + // allocate storage for cameras&lights + if (num_camera) { + master->mCameras = new aiCamera*[master->mNumCameras = num_camera]; + } + aiCamera** cams = master->mCameras; + if (num_light) { + master->mLights = new aiLight*[master->mNumLights = num_light]; + } + aiLight** lights = master->mLights; + + std::vector attach; + std::vector anims; + + nd->mName.Set(""); + nd->mChildren = new aiNode*[no_parent]; + for (std::list::iterator it = nodes.begin(); it != nodes.end(); ++it) { + if (!(*it).parent_resolved) { + aiNode* ro = nd->mChildren[ nd->mNumChildren++ ] = new aiNode(); + ro->mParent = nd; + + // ... and build the scene graph. If we encounter object nodes, + // add then to our attachment table. + BuildGraph(ro,*it, attach, batch, cams, lights, anims); + } + } + + // create a master animation channel for us + if (anims.size()) { + master->mAnimations = new aiAnimation*[master->mNumAnimations = 1]; + aiAnimation* anim = master->mAnimations[0] = new aiAnimation(); + anim->mName.Set("LWSMasterAnim"); + + // LWS uses seconds as time units, but we convert to frames + anim->mTicksPerSecond = fps; + anim->mDuration = last-(first-1); /* fixme ... zero or one-based?*/ + + anim->mChannels = new aiNodeAnim*[anim->mNumChannels = anims.size()]; + std::copy(anims.begin(),anims.end(),anim->mChannels); + } + + // OK ... finally build the output graph + SceneCombiner::MergeScenes(&pScene,master,attach, + AI_INT_MERGE_SCENE_GEN_UNIQUE_NAMES | (!configSpeedFlag ? ( + AI_INT_MERGE_SCENE_GEN_UNIQUE_NAMES_IF_NECESSARY | AI_INT_MERGE_SCENE_GEN_UNIQUE_MATNAMES) : 0)); + + // Check flags + if (!pScene->mNumMeshes || !pScene->mNumMaterials) { + pScene->mFlags |= AI_SCENE_FLAGS_INCOMPLETE; + + if (pScene->mNumAnimations) { + // construct skeleton mesh + SkeletonMeshBuilder builder(pScene); + } + } } diff --git a/code/LWSLoader.h b/code/LWSLoader.h index 766a7c3b9..0835748a4 100644 --- a/code/LWSLoader.h +++ b/code/LWSLoader.h @@ -38,10 +38,14 @@ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. ---------------------------------------------------------------------- */ -/** @file Declaration of the .LWS (LightWave Scene Format) importer class. */ +/** @file LWSLoader.h + * @brief Declaration of the LightWave scene importer class. + */ #ifndef AI_LWSLOADER_H_INCLUDED #define AI_LWSLOADER_H_INCLUDED +#include "LWOFileData.h" +#include "SceneCombiner.h" namespace Assimp { namespace LWS { @@ -49,17 +53,107 @@ namespace Assimp { // --------------------------------------------------------------------------- /** Represents an element in a LWS file. * - * This can either be a single data line - or it can - * be a data group - { name ... n } + * This can either be a single data line - or a data + * group - { name ... n } */ class Element { - std::string name, data; +public: + Element() + {} + + // first: name, second: rest + std::string tokens[2]; std::list children; - void Parse (const char* buffer); + //! Recursive parsing function + void Parse (const char*& buffer); }; +#define AI_LWS_MASK (0xffffffff >> 4u) + +// --------------------------------------------------------------------------- +/** Represents a LWS scenegraph element + */ +struct NodeDesc +{ + NodeDesc() + : number (0) + , parent (0) + , name ("") + , parent_resolved (NULL) + , lightIntensity (1.f) + , lightColor (1.f,1.f,1.f) + , lightType (0) + , lightFalloffType (0) + , lightConeAngle (45.f) + {} + + enum { + + OBJECT = 1, + LIGHT = 2, + CAMERA = 3, + BONE = 4, + } type; // type of node + + // if object: path + std::string path; + unsigned int id; + + // number of object + unsigned int number; + + // index of parent index + unsigned int parent; + + // lights & cameras & dummies: name + const char* name; + + // animation channels + std::list< LWO::Envelope > channels; + + // position of pivot point + aiVector3D pivotPos; + + + + // color of light source + aiColor3D lightColor; + + // intensity of light source + float lightIntensity; + + // type of light source + unsigned int lightType; + + // falloff type of light source + unsigned int lightFalloffType; + + // cone angle of (spot) light source + float lightConeAngle; + + // soft cone angle of (spot) light source + float lightEdgeAngle; + + + + // list of resolved children + std::list< NodeDesc* > children; + + // resolved parent node + NodeDesc* parent_resolved; + + + // for std::find() + bool operator == (unsigned int num) const { + if (!num) + return false; + unsigned int _type = num >> 28u; + + return _type == type && (num & AI_LWS_MASK) == number; + } +}; } // end namespace LWS @@ -84,28 +178,63 @@ protected: public: // ------------------------------------------------------------------- - /** Returns whether the class can handle the format of the given file. - * See BaseImporter::CanRead() for details. */ - bool CanRead( const std::string& pFile, IOSystem* pIOHandler) const; + // Check whether we can read a specific file + bool CanRead( const std::string& pFile, IOSystem* pIOHandler, + bool checkSig) const; protected: // ------------------------------------------------------------------- - /** Called by Importer::GetExtensionList() for each loaded importer. - * See BaseImporter::GetExtensionList() for details - */ + // Get list of supported extensions void GetExtensionList(std::string& append); // ------------------------------------------------------------------- - /** Imports the given file into the given scene structure. - * See BaseImporter::InternReadFile() for details - */ + // Import file into given scene data structure void InternReadFile( const std::string& pFile, aiScene* pScene, IOSystem* pIOHandler); + // ------------------------------------------------------------------- + // Setup import properties + void SetupProperties(const Importer* pImp); + private: + // ------------------------------------------------------------------- + // Read an envelope description + void ReadEnvelope(const LWS::Element& dad, LWO::Envelope& out ); + + // ------------------------------------------------------------------- + // Read an envelope description for the older LW file format + void ReadEnvelope_Old(std::list< LWS::Element >::const_iterator& it, + const std::list< LWS::Element >::const_iterator& end, + LWS::NodeDesc& nodes, + unsigned int version); + + // ------------------------------------------------------------------- + // Setup a nice name for a node + void SetupNodeName(aiNode* nd, LWS::NodeDesc& src); + + // ------------------------------------------------------------------- + // Recursively build the scenegraph + void BuildGraph(aiNode* nd, + LWS::NodeDesc& src, + std::vector& attach, + BatchLoader& batch, + aiCamera**& camOut, + aiLight**& lightOut, + std::vector& animOut); + + // ------------------------------------------------------------------- + // Try several dirs until we find the right location of a LWS file. + std::string FindLWOFile(const std::string& in); + +private: + + bool configSpeedFlag; + IOSystem* io; + + double first,last,fps; }; } // end of namespace Assimp diff --git a/code/MD2FileData.h b/code/MD2FileData.h index 7a0ac94c6..45c695fa8 100644 --- a/code/MD2FileData.h +++ b/code/MD2FileData.h @@ -38,21 +38,13 @@ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. ---------------------------------------------------------------------- */ -/** @file Defines the helper data structures for importing MD2 files - -********************************************************************** -File format specification: -//http://linux.ucla.edu/~phaethon/q3/formats/md2-schoenblum.html -********************************************************************** - -*/ +/** @file MD2FileData.h + * @brief Defines helper data structures for importing MD2 files + * http://linux.ucla.edu/~phaethon/q3/formats/md2-schoenblum.html + */ #ifndef AI_MD2FILEHELPER_H_INC #define AI_MD2FILEHELPER_H_INC -#include -#include -#include - #include "../include/aiTypes.h" #include "../include/aiMesh.h" #include "../include/aiAnim.h" @@ -62,11 +54,9 @@ File format specification: namespace Assimp { namespace MD2 { -// to make it easier for ourselfes, we test the magic word against both "endianesses" -#define MD2_MAKE(string) ((uint32_t)((string[0] << 24) + (string[1] << 16) + (string[2] << 8) + string[3])) - -#define AI_MD2_MAGIC_NUMBER_BE MD2_MAKE("IDP2") -#define AI_MD2_MAGIC_NUMBER_LE MD2_MAKE("2PDI") +// to make it easier for us, we test the magic word against both "endianesses" +#define AI_MD2_MAGIC_NUMBER_BE AI_MAKE_MAGIC("IDP2") +#define AI_MD2_MAGIC_NUMBER_LE AI_MAKE_MAGIC("2PDI") // common limitations #define AI_MD2_VERSION 15 diff --git a/code/MD2Loader.cpp b/code/MD2Loader.cpp index e990c44dc..ae3614dd9 100644 --- a/code/MD2Loader.cpp +++ b/code/MD2Loader.cpp @@ -62,11 +62,8 @@ using namespace Assimp::MD2; void MD2::LookupNormalIndex(uint8_t iNormalIndex,aiVector3D& vOut) { // make sure the normal index has a valid value - if (iNormalIndex >= ARRAYSIZE(g_avNormals)) - { - DefaultLogger::get()->warn("Index overflow in Quake II normal vector list (the " - " LUT has only 162 entries). "); - + if (iNormalIndex >= ARRAYSIZE(g_avNormals)) { + DefaultLogger::get()->warn("Index overflow in Quake II normal vector list"); iNormalIndex = ARRAYSIZE(g_avNormals) - 1; } vOut = *((const aiVector3D*)(&g_avNormals[iNormalIndex])); @@ -76,31 +73,37 @@ void MD2::LookupNormalIndex(uint8_t iNormalIndex,aiVector3D& vOut) // ------------------------------------------------------------------------------------------------ // Constructor to be privately used by Importer MD2Importer::MD2Importer() -{ -} +{} // ------------------------------------------------------------------------------------------------ // Destructor, private as well MD2Importer::~MD2Importer() -{ -} +{} // ------------------------------------------------------------------------------------------------ // Returns whether the class can handle the format of the given file. -bool MD2Importer::CanRead( const std::string& pFile, IOSystem* pIOHandler) const +bool MD2Importer::CanRead( const std::string& pFile, IOSystem* pIOHandler, bool checkSig) const { - // simple check of file extension is enough for the moment - std::string::size_type pos = pFile.find_last_of('.'); - // no file extension - can't read - if( pos == std::string::npos) - return false; - - std::string extension = pFile.substr( pos); - for( std::string::iterator it = extension.begin(); it != extension.end(); ++it) - *it = tolower( *it); + const std::string extension = GetExtension(pFile); + if (extension == "md2") + return true; - return ( extension == ".md2"); + // if check for extension is not enough, check for the magic tokens + if (!extension.length() || checkSig) { + uint32_t tokens[1]; + tokens[0] = AI_MD2_MAGIC_NUMBER_LE; + return CheckMagicToken(pIOHandler,pFile,tokens,1); + } + return false; } + +// ------------------------------------------------------------------------------------------------ +// Get a list of all extensions supported by this loader +void MD2Importer::GetExtensionList(std::string& append) +{ + append.append("*.md2"); +} + // ------------------------------------------------------------------------------------------------ // Setup configuration properties void MD2Importer::SetupProperties(const Importer* pImp) @@ -161,8 +164,8 @@ void MD2Importer::ValidateHeader( ) if (m_pcHeader->numFrames <= configFrameID ) throw new ImportErrorException("The requested frame is not existing the file"); - } + // ------------------------------------------------------------------------------------------------ // Imports the given file into the given scene structure. void MD2Importer::InternReadFile( const std::string& pFile, @@ -319,14 +322,14 @@ void MD2Importer::InternReadFile( const std::string& pFile, pcHelper->AddProperty(&clr, 1,AI_MATKEY_COLOR_AMBIENT); aiString szName; - szName.Set("MD2Default"); + szName.Set(AI_DEFAULT_TEXTURED_MATERIAL_NAME); pcHelper->AddProperty(&szName,AI_MATKEY_NAME); aiString sz; // TODO: Try to guess the name of the texture file from the model file name - sz.Set("texture_dummmy.bmp"); + sz.Set("$texture_dummy.bmp"); pcHelper->AddProperty(&sz,AI_MATKEY_TEXTURE_DIFFUSE(0)); } diff --git a/code/MD2Loader.h b/code/MD2Loader.h index faeaeb8e2..314c54747 100644 --- a/code/MD2Loader.h +++ b/code/MD2Loader.h @@ -38,7 +38,9 @@ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. ---------------------------------------------------------------------- */ -/** @file Definition of the .MD2 importer class. */ +/** @file MD2Loader.h + * @brief Declaration of the .MD2 importer class. + */ #ifndef AI_MD2LOADER_H_INCLUDED #define AI_MD2LOADER_H_INCLUDED @@ -48,14 +50,13 @@ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. struct aiNode; #include "MD2FileData.h" -namespace Assimp -{ +namespace Assimp { class MaterialHelper; using namespace MD2; // --------------------------------------------------------------------------- -/** Used to load MD2 files +/** Importer class for MD2 */ class MD2Importer : public BaseImporter { @@ -73,7 +74,8 @@ public: // ------------------------------------------------------------------- /** Returns whether the class can handle the format of the given file. * See BaseImporter::CanRead() for details. */ - bool CanRead( const std::string& pFile, IOSystem* pIOHandler) const; + bool CanRead( const std::string& pFile, IOSystem* pIOHandler, + bool checkSig) const; // ------------------------------------------------------------------- @@ -89,10 +91,7 @@ protected: /** Called by Importer::GetExtensionList() for each loaded importer. * See BaseImporter::GetExtensionList() for details */ - void GetExtensionList(std::string& append) - { - append.append("*.md2"); - } + void GetExtensionList(std::string& append); // ------------------------------------------------------------------- /** Imports the given file into the given scene structure. diff --git a/code/MD3FileData.h b/code/MD3FileData.h index 50a62bf7b..49bcab966 100644 --- a/code/MD3FileData.h +++ b/code/MD3FileData.h @@ -59,11 +59,9 @@ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. namespace Assimp { namespace MD3 { -// to make it easier for ourselfes, we test the magic word against both "endianesses" -#define MD3_MAKE(string) ((uint32_t)((string[0] << 24) + (string[1] << 16) + (string[2] << 8) + string[3])) - -#define AI_MD3_MAGIC_NUMBER_BE MD3_MAKE("IDP3") -#define AI_MD3_MAGIC_NUMBER_LE MD3_MAKE("3PDI") +// to make it easier for us, we test the magic word against both "endianesses" +#define AI_MD3_MAGIC_NUMBER_BE AI_MAKE_MAGIC("IDP3") +#define AI_MD3_MAGIC_NUMBER_LE AI_MAKE_MAGIC("3PDI") // common limitations #define AI_MD3_VERSION 15 diff --git a/code/MD3Loader.cpp b/code/MD3Loader.cpp index ed17302d8..de7f17af8 100644 --- a/code/MD3Loader.cpp +++ b/code/MD3Loader.cpp @@ -344,18 +344,19 @@ MD3Importer::~MD3Importer() // ------------------------------------------------------------------------------------------------ // Returns whether the class can handle the format of the given file. -bool MD3Importer::CanRead( const std::string& pFile, IOSystem* pIOHandler) const +bool MD3Importer::CanRead( const std::string& pFile, IOSystem* pIOHandler, bool checkSig) const { - // simple check of file extension is enough for the moment - std::string::size_type pos = pFile.find_last_of('.'); - // no file extension - can't read - if( pos == std::string::npos) - return false; - std::string extension = pFile.substr( pos); - for( std::string::iterator it = extension.begin(); it != extension.end(); ++it) - *it = tolower( *it); + const std::string extension = GetExtension(pFile); + if (extension == "md3") + return true; - return ( extension == ".md3"); + // if check for extension is not enough, check for the magic tokens + if (!extension.length() || checkSig) { + uint32_t tokens[1]; + tokens[0] = AI_MD3_MAGIC_NUMBER_LE; + return CheckMagicToken(pIOHandler,pFile,tokens,1); + } + return false; } // ------------------------------------------------------------------------------------------------ @@ -436,6 +437,9 @@ void MD3Importer::SetupProperties(const Importer* pImp) // AI_CONFIG_IMPORT_MD3_SHADER_SRC configShaderFile = (pImp->GetPropertyString(AI_CONFIG_IMPORT_MD3_SHADER_SRC,"")); + + // AI_CONFIG_FAVOUR_SPEED + configSpeedFlag = (0 != pImp->GetPropertyInteger(AI_CONFIG_FAVOUR_SPEED,0)); } // ------------------------------------------------------------------------------------------------ @@ -458,10 +462,7 @@ void MD3Importer::ReadSkin(Q3Shader::SkinData& fill) const void MD3Importer::ReadShader(Q3Shader::ShaderData& fill) const { // Determine Q3 model name from given path - std::string::size_type s = path.find_last_of('\\',path.length()-2); - if (s == std::string::npos) - s = path.find_last_of('/',path.length()-2); - + std::string::size_type s = path.find_last_of("\\/",path.length()-2); const std::string model_file = path.substr(s+1,path.length()-(s+2)); // If no specific dir or file is given, use our default search behaviour @@ -486,6 +487,24 @@ void MD3Importer::ReadShader(Q3Shader::ShaderData& fill) const } } +// ------------------------------------------------------------------------------------------------ +// Tiny helper to remove a single node from its parent' list +void RemoveSingleNodeFromList(aiNode* nd) +{ + if (!nd || nd->mNumChildren || !nd->mParent)return; + aiNode* par = nd->mParent; + for (unsigned int i = 0; i < par->mNumChildren;++i) { + if (par->mChildren[i] == nd) { + --par->mNumChildren; + for (;i < par->mNumChildren;++i) { + par->mChildren[i] = par->mChildren[i+1]; + } + delete nd; + break; + } + } +} + // ------------------------------------------------------------------------------------------------ // Read a multi-part Q3 player model bool MD3Importer::ReadMultipartFile() @@ -520,32 +539,32 @@ bool MD3Importer::ReadMultipartFile() // now read these three files BatchLoader batch(mIOHandler); - batch.AddLoadRequest(lower,0,&props); - batch.AddLoadRequest(upper,0,&props); - batch.AddLoadRequest(head,0,&props); + unsigned int _lower = batch.AddLoadRequest(lower,0,&props); + unsigned int _upper = batch.AddLoadRequest(upper,0,&props); + unsigned int _head = batch.AddLoadRequest(head,0,&props); batch.LoadAll(); // now construct a dummy scene to place these three parts in aiScene* master = new aiScene(); aiNode* nd = master->mRootNode = new aiNode(); - nd->mName.Set(""); + nd->mName.Set(""); // ... and get them. We need all of them. - scene_lower = batch.GetImport(lower); + scene_lower = batch.GetImport(_lower); if (!scene_lower) { DefaultLogger::get()->error("M3D: Failed to read multipart model, lower.md3 fails to load"); failure = "lower"; goto error_cleanup; } - scene_upper = batch.GetImport(upper); + scene_upper = batch.GetImport(_upper); if (!scene_upper) { DefaultLogger::get()->error("M3D: Failed to read multipart model, upper.md3 fails to load"); failure = "upper"; goto error_cleanup; } - scene_head = batch.GetImport(head); + scene_head = batch.GetImport(_head); if (!scene_head) { DefaultLogger::get()->error("M3D: Failed to read multipart model, head.md3 fails to load"); failure = "head"; @@ -555,6 +574,7 @@ bool MD3Importer::ReadMultipartFile() // build attachment infos. search for typical Q3 tags // original root + scene_lower->mRootNode->mName.Set("lower"); attach.push_back(AttachmentInfo(scene_lower, nd)); // tag_torso @@ -563,6 +583,7 @@ bool MD3Importer::ReadMultipartFile() DefaultLogger::get()->error("M3D: Failed to find attachment tag for multipart model: tag_torso expected"); goto error_cleanup; } + scene_upper->mRootNode->mName.Set("upper"); attach.push_back(AttachmentInfo(scene_upper,tag_torso)); // tag_head @@ -571,13 +592,21 @@ bool MD3Importer::ReadMultipartFile() DefaultLogger::get()->error("M3D: Failed to find attachment tag for multipart model: tag_head expected"); goto error_cleanup; } + scene_head->mRootNode->mName.Set("head"); attach.push_back(AttachmentInfo(scene_head,tag_head)); + // Remove tag_head and tag_torso from all other model parts ... + // this ensures (together with AI_INT_MERGE_SCENE_GEN_UNIQUE_NAMES_IF_NECESSARY) + // that tag_torso/tag_head is also the name of the (unique) output node + RemoveSingleNodeFromList (scene_upper->mRootNode->FindNode("tag_torso")); + RemoveSingleNodeFromList (scene_head-> mRootNode->FindNode("tag_head" )); + // and merge the scenes SceneCombiner::MergeScenes(&mScene,master, attach, - AI_INT_MERGE_SCENE_GEN_UNIQUE_NAMES | - AI_INT_MERGE_SCENE_GEN_UNIQUE_MATNAMES | - AI_INT_MERGE_SCENE_RESOLVE_CROSS_ATTACHMENTS); + AI_INT_MERGE_SCENE_GEN_UNIQUE_NAMES | + AI_INT_MERGE_SCENE_GEN_UNIQUE_MATNAMES | + AI_INT_MERGE_SCENE_RESOLVE_CROSS_ATTACHMENTS | + (!configSpeedFlag ? AI_INT_MERGE_SCENE_GEN_UNIQUE_NAMES_IF_NECESSARY : 0)); return true; diff --git a/code/MD3Loader.h b/code/MD3Loader.h index 57cd14f4d..f2795963e 100644 --- a/code/MD3Loader.h +++ b/code/MD3Loader.h @@ -225,7 +225,8 @@ public: // ------------------------------------------------------------------- /** Returns whether the class can handle the format of the given file. * See BaseImporter::CanRead() for details. */ - bool CanRead( const std::string& pFile, IOSystem* pIOHandler) const; + bool CanRead( const std::string& pFile, IOSystem* pIOHandler, + bool checkSig) const; // ------------------------------------------------------------------- @@ -297,6 +298,9 @@ protected: /** Configuration option: name or path of shader */ std::string configShaderFile; + /** Configuration option: speed flag was set? */ + bool configSpeedFlag; + /** Header of the MD3 file */ BE_NCONST MD3::Header* pcHeader; diff --git a/code/MD5Loader.cpp b/code/MD5Loader.cpp index c78202978..1b59f01a2 100644 --- a/code/MD5Loader.cpp +++ b/code/MD5Loader.cpp @@ -39,7 +39,9 @@ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. --------------------------------------------------------------------------- */ -/** @file Implementation of the MD5 importer class */ +/** @file MD5Loader.cpp + * @brief Implementation of the MD5 importer class + */ #include "AssimpPCH.h" #ifndef ASSIMP_BUILD_NO_MD5_IMPORTER @@ -56,34 +58,35 @@ using namespace Assimp; // ------------------------------------------------------------------------------------------------ // Constructor to be privately used by Importer MD5Importer::MD5Importer() -{ - // nothing to do here -} +{} // ------------------------------------------------------------------------------------------------ // Destructor, private as well MD5Importer::~MD5Importer() -{ - // nothing to do here -} +{} + // ------------------------------------------------------------------------------------------------ // Returns whether the class can handle the format of the given file. -bool MD5Importer::CanRead( const std::string& pFile, IOSystem* pIOHandler) const +bool MD5Importer::CanRead( const std::string& pFile, IOSystem* pIOHandler, bool checkSig) const { - // simple check of file extension is enough for the moment - std::string::size_type pos = pFile.find_last_of('.'); - // no file extension - can't read - if( pos == std::string::npos) - return false; - std::string extension = pFile.substr( pos); + const std::string extension = GetExtension(pFile); - if (extension.length() < 4)return false; - if (extension[0] != '.')return false; + if (extension == "md5anim" || extension == "md5mesh") + return true; + else if (!extension.length() || checkSig) { + if (!pIOHandler) + return true; + const char* tokens[] = {"MD5Version"}; + return SearchFileHeaderForToken(pIOHandler,pFile,tokens,1); + } + return false; +} - if (extension[1] != 'm' && extension[1] != 'M')return false; - if (extension[2] != 'd' && extension[2] != 'D')return false; - if (extension[3] != '5')return false; - return true; +// ------------------------------------------------------------------------------------------------ +// Get list of all supported extensions +void MD5Importer::GetExtensionList(std::string& append) +{ + append.append("*.md5mesh;*.md5anim"); } // ------------------------------------------------------------------------------------------------ @@ -93,17 +96,17 @@ void MD5Importer::InternReadFile( { // remove the file extension std::string::size_type pos = pFile.find_last_of('.'); - this->mFile = pFile.substr(0,pos+1); + mFile = pFile.substr(0,pos+1); this->pIOHandler = pIOHandler; this->pScene = pScene; bHadMD5Mesh = bHadMD5Anim = false; // load the animation keyframes - this->LoadMD5AnimFile(); + LoadMD5AnimFile(); // load the mesh vertices and bones - this->LoadMD5MeshFile(); + LoadMD5MeshFile(); // make sure we return no incomplete data if (!bHadMD5Mesh && !bHadMD5Anim) @@ -260,7 +263,7 @@ void MD5Importer::LoadMD5MeshFile () bHadMD5Mesh = true; // now load the file into memory - this->LoadFileIntoMemory(file.get()); + LoadFileIntoMemory(file.get()); // now construct a parser and parse the file MD5::MD5Parser parser(mBuffer,fileSize); @@ -341,10 +344,7 @@ void MD5Importer::LoadMD5MeshFile () unsigned int* piCount = new unsigned int[meshParser.mJoints.size()]; ::memset(piCount,0,sizeof(unsigned int)*meshParser.mJoints.size()); - for (MD5::VertexList::const_iterator - iter = meshSrc.mVertices.begin(); - iter != meshSrc.mVertices.end();++iter,++pv) - { + for (MD5::VertexList::const_iterator iter = meshSrc.mVertices.begin();iter != meshSrc.mVertices.end();++iter,++pv) { for (unsigned int jub = (*iter).mFirstWeight, w = jub; w < jub + (*iter).mNumWeights;++w) { MD5::WeightDesc& desc = meshSrc.mWeights[w]; @@ -444,7 +444,7 @@ void MD5Importer::LoadMD5MeshFile () // ------------------------------------------------------------------------------------------------ void MD5Importer::LoadMD5AnimFile () { - std::string pFile = this->mFile + "MD5ANIM"; + std::string pFile = mFile + "MD5ANIM"; boost::scoped_ptr file( pIOHandler->Open( pFile, "rb")); // Check whether we can read from the file diff --git a/code/MD5Loader.h b/code/MD5Loader.h index 9ced176b2..c2c7d8981 100644 --- a/code/MD5Loader.h +++ b/code/MD5Loader.h @@ -39,8 +39,9 @@ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ -/** @file Definition of the .MD5 importer class. -http://www.modwiki.net/wiki/MD5_(file_format) +/** @file MD5Loader.h + * @brief Definition of the .MD5 importer class. + * http://www.modwiki.net/wiki/MD5_(file_format) */ #ifndef AI_MD5LOADER_H_INCLUDED #define AI_MD5LOADER_H_INCLUDED @@ -74,7 +75,8 @@ public: // ------------------------------------------------------------------- /** Returns whether the class can handle the format of the given file. * See BaseImporter::CanRead() for details. */ - bool CanRead( const std::string& pFile, IOSystem* pIOHandler) const; + bool CanRead( const std::string& pFile, IOSystem* pIOHandler, + bool checkSig) const; protected: @@ -82,11 +84,8 @@ protected: /** Called by Importer::GetExtensionList() for each loaded importer. * See BaseImporter::GetExtensionList() for details */ - void GetExtensionList(std::string& append) - { - append.append("*.md5mesh;*.md5anim"); - } - + void GetExtensionList(std::string& append); + // ------------------------------------------------------------------- /** Imports the given file into the given scene structure. * See BaseImporter::InternReadFile() for details diff --git a/code/MD5Parser.cpp b/code/MD5Parser.cpp index c253da2ed..bd25b6dbe 100644 --- a/code/MD5Parser.cpp +++ b/code/MD5Parser.cpp @@ -112,21 +112,22 @@ void MD5Parser::ParseHeader() if (0 != ASSIMP_strincmp(buffer,"MD5Version",10) || !IsSpace(*(buffer+=10))) { - this->ReportError("Invalid MD5 file: MD5Version tag has not been found"); + ReportError("Invalid MD5 file: MD5Version tag has not been found"); } SkipSpaces(); unsigned int iVer = ::strtol10(buffer,(const char**)&buffer); if (10 != iVer) { - this->ReportWarning("MD5 version tag is unknown (10 is expected)"); + ReportWarning("MD5 version tag is unknown (10 is expected)"); } - this->SkipLine(); + SkipLine(); // print the command line options to the console + // fix: can break the log length limit ... char* sz = buffer; while (!IsLineEnd( *buffer++)); - DefaultLogger::get()->info(std::string(sz,(uintptr_t)(buffer-sz))); - this->SkipSpacesAndLineEnd(); + DefaultLogger::get()->info(std::string(sz,std::min((uintptr_t)MAX_LOG_MESSAGE_LENGTH, (uintptr_t)(buffer-sz)))); + SkipSpacesAndLineEnd(); } // ------------------------------------------------------------------------------------------------ bool MD5Parser::ParseSection(Section& out) diff --git a/code/MD5Parser.h b/code/MD5Parser.h index 41156d7e5..5ad5a92fc 100644 --- a/code/MD5Parser.h +++ b/code/MD5Parser.h @@ -39,21 +39,20 @@ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ -/** @file Definition of the .MD5 parser class. -http://www.modwiki.net/wiki/MD5_(file_format) -*/ +/** @file MD5Parser.h + * @brief Definition of the .MD5 parser class. + * http://www.modwiki.net/wiki/MD5_(file_format) + */ #ifndef AI_MD5PARSER_H_INCLUDED #define AI_MD5PARSER_H_INCLUDED #include "../include/aiTypes.h" #include "ParsingUtils.h" -#include struct aiFace; namespace Assimp { -namespace MD5 { - +namespace MD5 { // --------------------------------------------------------------------------- /** Represents a single element in a MD5 file @@ -335,12 +334,13 @@ public: static void ReportWarning (const char* warn, unsigned int line); - inline void ReportError (const char* error) - {return ReportError(error, this->lineNumber);} - - inline void ReportWarning (const char* warn) - {return ReportWarning(warn, this->lineNumber);} + void ReportError (const char* error) { + return ReportError(error, lineNumber); + } + void ReportWarning (const char* warn) { + return ReportWarning(warn, lineNumber); + } public: @@ -367,24 +367,22 @@ private: // override these functions to make sure the line counter gets incremented // ------------------------------------------------------------------- - inline bool SkipLine( const char* in, const char** out) + bool SkipLine( const char* in, const char** out) { ++lineNumber; return Assimp::SkipLine(in,out); } // ------------------------------------------------------------------- - inline bool SkipLine( ) + bool SkipLine( ) { return SkipLine(buffer,(const char**)&buffer); } // ------------------------------------------------------------------- - inline bool SkipSpacesAndLineEnd( const char* in, const char** out) + bool SkipSpacesAndLineEnd( const char* in, const char** out) { bool bHad = false; - while (true) - { - if( *in == '\r' || *in == '\n') - { + while (true) { + if( *in == '\r' || *in == '\n') { if (!bHad) // we open files in binary mode, so there could be \r\n sequences ... { bHad = true; @@ -400,12 +398,12 @@ private: return *in != '\0'; } // ------------------------------------------------------------------- - inline bool SkipSpacesAndLineEnd( ) + bool SkipSpacesAndLineEnd( ) { return SkipSpacesAndLineEnd(buffer,(const char**)&buffer); } // ------------------------------------------------------------------- - inline bool SkipSpaces( ) + bool SkipSpaces( ) { return Assimp::SkipSpaces((const char**)&buffer); } diff --git a/code/MDCFileData.h b/code/MDCFileData.h index e2438f0d0..99bfc2ccd 100644 --- a/code/MDCFileData.h +++ b/code/MDCFileData.h @@ -60,11 +60,9 @@ namespace Assimp { namespace MDC { -// to make it easier for ourselfes, we test the magic word against both "endianesses" -#define MDC_MAKE(string) ((uint32_t)((string[0] << 24) + (string[1] << 16) + (string[2] << 8) + string[3])) - -#define AI_MDC_MAGIC_NUMBER_BE MDC_MAKE("CPDI") -#define AI_MDC_MAGIC_NUMBER_LE MDC_MAKE("IDPC") +// to make it easier for us, we test the magic word against both "endianesses" +#define AI_MDC_MAGIC_NUMBER_BE AI_MAKE_MAGIC("CPDI") +#define AI_MDC_MAGIC_NUMBER_LE AI_MAKE_MAGIC("IDPC") // common limitations #define AI_MDC_VERSION 2 diff --git a/code/MDCLoader.cpp b/code/MDCLoader.cpp index 24038f774..6a137d1e5 100644 --- a/code/MDCLoader.cpp +++ b/code/MDCLoader.cpp @@ -87,23 +87,25 @@ MDCImporter::~MDCImporter() } // ------------------------------------------------------------------------------------------------ // Returns whether the class can handle the format of the given file. -bool MDCImporter::CanRead( const std::string& pFile, IOSystem* pIOHandler) const +bool MDCImporter::CanRead( const std::string& pFile, IOSystem* pIOHandler, bool checkSig) const { - // simple check of file extension is enough for the moment - std::string::size_type pos = pFile.find_last_of('.'); - // no file extension - can't read - if( pos == std::string::npos) - return false; - std::string extension = pFile.substr( pos); + const std::string extension = GetExtension(pFile); + if (extension == "mdc") + return true; - if (extension.length() < 4)return false; - if (extension[0] != '.')return false; - - if( extension[1] != 'M' && extension[1] != 'm')return false; - if( extension[2] != 'D' && extension[2] != 'd')return false; - if( extension[3] != 'C' && extension[3] != 'c')return false; + // if check for extension is not enough, check for the magic tokens + if (!extension.length() || checkSig) { + uint32_t tokens[1]; + tokens[0] = AI_MDC_MAGIC_NUMBER_LE; + return CheckMagicToken(pIOHandler,pFile,tokens,1); + } + return false; +} - return true; +// ------------------------------------------------------------------------------------------------ +void MDCImporter::GetExtensionList(std::string& append) +{ + append.append("*.mdc"); } // ------------------------------------------------------------------------------------------------ diff --git a/code/MDCLoader.h b/code/MDCLoader.h index 08d24b392..60ef038d0 100644 --- a/code/MDCLoader.h +++ b/code/MDCLoader.h @@ -38,7 +38,9 @@ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. ---------------------------------------------------------------------- */ -/** @file Definition of the MDC importer class. */ +/** @file MDCLoader.h + * @brief Definition of the MDC importer class. + */ #ifndef AI_MDCLOADER_H_INCLUDED #define AI_MDCLOADER_H_INCLUDED @@ -48,12 +50,11 @@ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. #include "MDCFileData.h" #include "ByteSwap.h" -namespace Assimp -{ +namespace Assimp { using namespace MDC; // --------------------------------------------------------------------------- -/** Used to load MDC files +/** Importer class to load the RtCW MDC file format */ class MDCImporter : public BaseImporter { @@ -71,7 +72,8 @@ public: // ------------------------------------------------------------------- /** Returns whether the class can handle the format of the given file. * See BaseImporter::CanRead() for details. */ - bool CanRead( const std::string& pFile, IOSystem* pIOHandler) const; + bool CanRead( const std::string& pFile, IOSystem* pIOHandler, + bool checkSig) const; // ------------------------------------------------------------------- /** Called prior to ReadFile(). @@ -86,10 +88,7 @@ protected: /** Called by Importer::GetExtensionList() for each loaded importer. * See BaseImporter::GetExtensionList() for details */ - void GetExtensionList(std::string& append) - { - append.append("*.mdc"); - } + void GetExtensionList(std::string& append); // ------------------------------------------------------------------- /** Imports the given file into the given scene structure. diff --git a/code/MDLFileData.h b/code/MDLFileData.h index 1dc936bc9..0982fd343 100644 --- a/code/MDLFileData.h +++ b/code/MDLFileData.h @@ -58,30 +58,29 @@ namespace Assimp { namespace MDL { // ------------------------------------------------------------------------------------- -// to make it easier for ourselfes, we test the magic word against both "endianesses" -#define MDL_MAKE(string) ((uint32_t)((string[0] << 24) + (string[1] << 16) + (string[2] << 8) + string[3])) +// to make it easier for us, we test the magic word against both "endianesses" // magic bytes used in Quake 1 MDL meshes -#define AI_MDL_MAGIC_NUMBER_BE MDL_MAKE("IDPO") -#define AI_MDL_MAGIC_NUMBER_LE MDL_MAKE("OPDI") +#define AI_MDL_MAGIC_NUMBER_BE AI_MAKE_MAGIC("IDPO") +#define AI_MDL_MAGIC_NUMBER_LE AI_MAKE_MAGIC("OPDI") // magic bytes used in GameStudio A MDL meshes -#define AI_MDL_MAGIC_NUMBER_BE_GS3 MDL_MAKE("MDL2") -#define AI_MDL_MAGIC_NUMBER_LE_GS3 MDL_MAKE("2LDM") +#define AI_MDL_MAGIC_NUMBER_BE_GS3 AI_MAKE_MAGIC("MDL2") +#define AI_MDL_MAGIC_NUMBER_LE_GS3 AI_MAKE_MAGIC("2LDM") // magic bytes used in GameStudio A4 MDL meshes -#define AI_MDL_MAGIC_NUMBER_BE_GS4 MDL_MAKE("MDL3") -#define AI_MDL_MAGIC_NUMBER_LE_GS4 MDL_MAKE("3LDM") +#define AI_MDL_MAGIC_NUMBER_BE_GS4 AI_MAKE_MAGIC("MDL3") +#define AI_MDL_MAGIC_NUMBER_LE_GS4 AI_MAKE_MAGIC("3LDM") // magic bytes used in GameStudio A5+ MDL meshes -#define AI_MDL_MAGIC_NUMBER_BE_GS5a MDL_MAKE("MDL4") -#define AI_MDL_MAGIC_NUMBER_LE_GS5a MDL_MAKE("4LDM") -#define AI_MDL_MAGIC_NUMBER_BE_GS5b MDL_MAKE("MDL5") -#define AI_MDL_MAGIC_NUMBER_LE_GS5b MDL_MAKE("5LDM") +#define AI_MDL_MAGIC_NUMBER_BE_GS5a AI_MAKE_MAGIC("MDL4") +#define AI_MDL_MAGIC_NUMBER_LE_GS5a AI_MAKE_MAGIC("4LDM") +#define AI_MDL_MAGIC_NUMBER_BE_GS5b AI_MAKE_MAGIC("MDL5") +#define AI_MDL_MAGIC_NUMBER_LE_GS5b AI_MAKE_MAGIC("5LDM") // magic bytes used in GameStudio A7+ MDL meshes -#define AI_MDL_MAGIC_NUMBER_BE_GS7 MDL_MAKE("MDL7") -#define AI_MDL_MAGIC_NUMBER_LE_GS7 MDL_MAKE("7LDM") +#define AI_MDL_MAGIC_NUMBER_BE_GS7 AI_MAKE_MAGIC("MDL7") +#define AI_MDL_MAGIC_NUMBER_LE_GS7 AI_MAKE_MAGIC("7LDM") // common limitations for Quake1 meshes. The loader does not check them, diff --git a/code/MDLLoader.cpp b/code/MDLLoader.cpp index 28a4b8146..dcb061b2f 100644 --- a/code/MDLLoader.cpp +++ b/code/MDLLoader.cpp @@ -77,32 +77,41 @@ MDLImporter::~MDLImporter() // ------------------------------------------------------------------------------------------------ // Returns whether the class can handle the format of the given file. -bool MDLImporter::CanRead( const std::string& pFile, IOSystem* pIOHandler) const +bool MDLImporter::CanRead( const std::string& pFile, IOSystem* pIOHandler, bool checkSig) const { - (void)pIOHandler; //this avoids the compiler warning of unused element - // simple check of file extension is enough for the moment - std::string::size_type pos = pFile.find_last_of('.'); - // no file extension - can't read - if( pos == std::string::npos) - return false; + const std::string extension = GetExtension(pFile); + if (extension == "mdl" ) + return true; - std::string extension = pFile.substr( pos); - for( std::string::iterator it = extension.begin(); it != extension.end(); ++it) - *it = tolower( *it); - - return extension == ".mdl"; + // if check for extension is not enough, check for the magic tokens + if (!extension.length() || checkSig) { + uint32_t tokens[8]; + tokens[0] = AI_MDL_MAGIC_NUMBER_LE_HL2a; + tokens[1] = AI_MDL_MAGIC_NUMBER_LE_HL2b; + tokens[2] = AI_MDL_MAGIC_NUMBER_LE_GS7; + tokens[3] = AI_MDL_MAGIC_NUMBER_LE_GS5b; + tokens[4] = AI_MDL_MAGIC_NUMBER_LE_GS5a; + tokens[5] = AI_MDL_MAGIC_NUMBER_LE_GS4; + tokens[6] = AI_MDL_MAGIC_NUMBER_LE_GS3; + tokens[7] = AI_MDL_MAGIC_NUMBER_LE; + return CheckMagicToken(pIOHandler,pFile,tokens,7,0); + } + return false; } // ------------------------------------------------------------------------------------------------ // Setup configuration properties void MDLImporter::SetupProperties(const Importer* pImp) { - // The AI_CONFIG_IMPORT_MDL_KEYFRAME option overrides the + configFrameID = pImp->GetPropertyInteger(AI_CONFIG_IMPORT_MDL_KEYFRAME,0xffffffff); + + // The + // AI_CONFIG_IMPORT_MDL_KEYFRAME option overrides the // AI_CONFIG_IMPORT_GLOBAL_KEYFRAME option. - if(0xffffffff == (configFrameID = pImp->GetPropertyInteger( - AI_CONFIG_IMPORT_MDL_KEYFRAME,0xffffffff))) - { + if(0xffffffff == configFrameID) { configFrameID = pImp->GetPropertyInteger(AI_CONFIG_IMPORT_GLOBAL_KEYFRAME,0); } + + // AI_CONFIG_IMPORT_MDL_COLORMAP - pallette file configPalette = pImp->GetPropertyString(AI_CONFIG_IMPORT_MDL_COLORMAP,"colormap.lmp"); } diff --git a/code/MDLLoader.h b/code/MDLLoader.h index 4eaef778b..9f4bd302a 100644 --- a/code/MDLLoader.h +++ b/code/MDLLoader.h @@ -96,7 +96,8 @@ public: // ------------------------------------------------------------------- /** Returns whether the class can handle the format of the given file. * See BaseImporter::CanRead() for details. */ - bool CanRead( const std::string& pFile, IOSystem* pIOHandler) const; + bool CanRead( const std::string& pFile, IOSystem* pIOHandler, + bool checkSig) const; // ------------------------------------------------------------------- diff --git a/code/MDLMaterialLoader.cpp b/code/MDLMaterialLoader.cpp index 119914a4f..e7b3fa975 100644 --- a/code/MDLMaterialLoader.cpp +++ b/code/MDLMaterialLoader.cpp @@ -89,7 +89,7 @@ aiColor4D MDLImporter::ReplaceTextureWithColor(const aiTexture* pcTexture) ai_assert(NULL != pcTexture); aiColor4D clrOut; - clrOut.r = std::numeric_limits::quiet_NaN(); + clrOut.r = get_qnan(); if (!pcTexture->mHeight || !pcTexture->mWidth) return clrOut; @@ -572,7 +572,7 @@ void MDLImporter::ParseSkinLump_3DGS_MDL7( // been converted to MDL7 from other formats, such as MDL5 aiColor4D clrTexture; if (pcNew)clrTexture = this->ReplaceTextureWithColor(pcNew); - else clrTexture.r = std::numeric_limits::quiet_NaN(); + else clrTexture.r = get_qnan(); // check whether a material definition is contained in the skin if (iType & AI_MDL7_SKINTYPE_MATERIAL) diff --git a/code/NFFLoader.cpp b/code/NFFLoader.cpp index a806545ff..983119808 100644 --- a/code/NFFLoader.cpp +++ b/code/NFFLoader.cpp @@ -65,22 +65,16 @@ NFFImporter::~NFFImporter() // ------------------------------------------------------------------------------------------------ // Returns whether the class can handle the format of the given file. -bool NFFImporter::CanRead( const std::string& pFile, IOSystem* pIOHandler) const +bool NFFImporter::CanRead( const std::string& pFile, IOSystem* pIOHandler, bool checkSig) const { - // simple check of file extension is enough for the moment - std::string::size_type pos = pFile.find_last_of('.'); - // no file extension - can't read - if( pos == std::string::npos)return false; - std::string extension = pFile.substr( pos); + return SimpleExtensionCheck(pFile,"nff","enff"); +} - // extensions: enff and nff - for( std::string::iterator it = extension.begin(); it != extension.end(); ++it) - *it = tolower( *it); - - if( extension == ".nff" || extension == ".enff") - return true; - - return false; +// ------------------------------------------------------------------------------------------------ +// Get the list of all supported file extensions +void NFFImporter::GetExtensionList(std::string& append) +{ + append.append("*.nff;*.enff"); } // ------------------------------------------------------------------------------------------------ @@ -96,7 +90,7 @@ bool NFFImporter::CanRead( const std::string& pFile, IOSystem* pIOHandler) const // ------------------------------------------------------------------------------------------------ #define AI_NFF_PARSE_SHAPE_INFORMATION() \ - aiVector3D center, radius(1.0f,std::numeric_limits::quiet_NaN(),std::numeric_limits::quiet_NaN()); \ + aiVector3D center, radius(1.0f,get_qnan(),get_qnan()); \ AI_NFF_PARSE_TRIPLE(center); \ AI_NFF_PARSE_TRIPLE(radius); \ if (is_qnan(radius.z))radius.z = radius.x; \ @@ -282,7 +276,7 @@ void NFFImporter::InternReadFile( const std::string& pFile, // check whether this is the NFF2 file format if (TokenMatch(buffer,"nff",3)) { - const float qnan = std::numeric_limits::quiet_NaN(); + const float qnan = get_qnan(); const aiColor4D cQNAN = aiColor4D (qnan,0.f,0.f,1.f); const aiVector3D vQNAN = aiVector3D(qnan,0.f,0.f); diff --git a/code/NFFLoader.h b/code/NFFLoader.h index 3bc1bbffc..65d612a4a 100644 --- a/code/NFFLoader.h +++ b/code/NFFLoader.h @@ -38,7 +38,9 @@ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. ---------------------------------------------------------------------- */ -/** @file Declaration of the NFF importer class. */ +/** @file NFFLoader.h + * @brief Declaration of the NFF importer class. + */ #ifndef AI_NFFLOADER_H_INCLUDED #define AI_NFFLOADER_H_INCLUDED @@ -49,7 +51,7 @@ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. namespace Assimp { -// --------------------------------------------------------------------------- +// ---------------------------------------------------------------------------------- /** NFF (Neutral File Format) Importer class. * * The class implements both Eric Haynes NFF format and Sense8's NFF (NFF2) format. @@ -71,8 +73,10 @@ public: // ------------------------------------------------------------------- /** Returns whether the class can handle the format of the given file. - * See BaseImporter::CanRead() for details. */ - bool CanRead( const std::string& pFile, IOSystem* pIOHandler) const; + * See BaseImporter::CanRead() for details. + */ + bool CanRead( const std::string& pFile, IOSystem* pIOHandler, + bool checkSig) const; protected: @@ -80,10 +84,7 @@ protected: /** Called by Importer::GetExtensionList() for each loaded importer. * See BaseImporter::GetExtensionList() for details */ - void GetExtensionList(std::string& append) - { - append.append("*.nff;*.enff"); - } + void GetExtensionList(std::string& append); // ------------------------------------------------------------------- /** Imports the given file into the given scene structure. diff --git a/code/OFFLoader.cpp b/code/OFFLoader.cpp index 13b858c23..869c3acf9 100644 --- a/code/OFFLoader.cpp +++ b/code/OFFLoader.cpp @@ -39,7 +39,9 @@ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. --------------------------------------------------------------------------- */ -/** @file Implementation of the OFF importer class */ +/** @file OFFLoader.cpp + * @brief Implementation of the OFF importer class + */ #include "AssimpPCH.h" #ifndef ASSIMP_BUILD_NO_OFF_IMPORTER @@ -64,25 +66,31 @@ OFFImporter::~OFFImporter() // ------------------------------------------------------------------------------------------------ // Returns whether the class can handle the format of the given file. -bool OFFImporter::CanRead( const std::string& pFile, IOSystem* pIOHandler) const +bool OFFImporter::CanRead( const std::string& pFile, IOSystem* pIOHandler, bool checkSig) const { - // simple check of file extension is enough for the moment - std::string::size_type pos = pFile.find_last_of('.'); - // no file extension - can't read - if( pos == std::string::npos)return false; - std::string extension = pFile.substr( pos); + const std::string extension = GetExtension(pFile); + if (extension == "off") + return true; + else if (!extension.length() || checkSig) + { + if (!pIOHandler)return true; + const char* tokens[] = {"off"}; + return SearchFileHeaderForToken(pIOHandler,pFile,tokens,1); + } + return false; +} - return !(extension.length() != 4 || extension[0] != '.' || - extension[1] != 'o' && extension[1] != 'O' || - extension[2] != 'f' && extension[2] != 'F' || - extension[3] != 'f' && extension[3] != 'F'); +// ------------------------------------------------------------------------------------------------ +void OFFImporter::GetExtensionList(std::string& append) +{ + append.append("*.off"); } // ------------------------------------------------------------------------------------------------ // Imports the given file into the given scene structure. void OFFImporter::InternReadFile( const std::string& pFile, - aiScene* pScene, IOSystem* pIOHandler) + aiScene* pScene, IOSystem* pIOHandler) { boost::scoped_ptr file( pIOHandler->Open( pFile, "rb")); diff --git a/code/OFFLoader.h b/code/OFFLoader.h index 1007b5731..9e6dd13a9 100644 --- a/code/OFFLoader.h +++ b/code/OFFLoader.h @@ -38,7 +38,9 @@ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. ---------------------------------------------------------------------- */ -/** @file Declaration of the OFF importer class. */ +/** @file OFFLoader.h + * @brief Declaration of the OFF importer class. + */ #ifndef AI_OFFLOADER_H_INCLUDED #define AI_OFFLOADER_H_INCLUDED @@ -67,7 +69,8 @@ public: // ------------------------------------------------------------------- /** Returns whether the class can handle the format of the given file. * See BaseImporter::CanRead() for details. */ - bool CanRead( const std::string& pFile, IOSystem* pIOHandler) const; + bool CanRead( const std::string& pFile, IOSystem* pIOHandler, + bool checkSig) const; protected: @@ -75,10 +78,7 @@ protected: /** Called by Importer::GetExtensionList() for each loaded importer. * See BaseImporter::GetExtensionList() for details */ - void GetExtensionList(std::string& append) - { - append.append("*.off"); - } + void GetExtensionList(std::string& append); // ------------------------------------------------------------------- /** Imports the given file into the given scene structure. diff --git a/code/ObjFileImporter.cpp b/code/ObjFileImporter.cpp index 8b3d3ff8f..dc7953ff8 100644 --- a/code/ObjFileImporter.cpp +++ b/code/ObjFileImporter.cpp @@ -51,9 +51,6 @@ namespace Assimp { using namespace std; -//! Obj-file-format extention -const string ObjFileImporter::OBJ_EXT = "obj"; - // ------------------------------------------------------------------------------------------------ // Default constructor ObjFileImporter::ObjFileImporter() : @@ -76,20 +73,10 @@ ObjFileImporter::~ObjFileImporter() // ------------------------------------------------------------------------------------------------ // Returns true, fi file is an obj file -bool ObjFileImporter::CanRead( const std::string& pFile, IOSystem* pIOHandler) const +bool ObjFileImporter::CanRead( const std::string& pFile, IOSystem* pIOHandler, bool checkSig) const { - if (pFile.empty()) - return false; - - string::size_type pos = pFile.find_last_of("."); - if (string::npos == pos) - return false; - - const string ext = pFile.substr(pos+1, pFile.size() - pos - 1); - if (ext == OBJ_EXT) - return true; - - return false; + // fixme: auto detection + return SimpleExtensionCheck(pFile,"obj"); } // ------------------------------------------------------------------------------------------------ diff --git a/code/ObjFileImporter.h b/code/ObjFileImporter.h index 78017953b..bbfc48c9c 100644 --- a/code/ObjFileImporter.h +++ b/code/ObjFileImporter.h @@ -66,9 +66,6 @@ class ObjFileImporter : { friend class Importer; - //! OB file extention - static const std::string OBJ_EXT; - protected: /// \brief Default constructor ObjFileImporter(); @@ -79,7 +76,7 @@ protected: public: /// \brief Returns whether the class can handle the format of the given file. /// \remark See BaseImporter::CanRead() for details. - bool CanRead( const std::string& pFile, IOSystem* pIOHandler) const; + bool CanRead( const std::string& pFile, IOSystem* pIOHandler, bool checkSig) const; private: diff --git a/code/PlyLoader.cpp b/code/PlyLoader.cpp index 1dd380b64..cea27033c 100644 --- a/code/PlyLoader.cpp +++ b/code/PlyLoader.cpp @@ -64,27 +64,31 @@ PLYImporter::~PLYImporter() // ------------------------------------------------------------------------------------------------ // Returns whether the class can handle the format of the given file. -bool PLYImporter::CanRead( const std::string& pFile, IOSystem* pIOHandler) const +bool PLYImporter::CanRead( const std::string& pFile, IOSystem* pIOHandler, bool checkSig) const { - // simple check of file extension is enough for the moment - std::string::size_type pos = pFile.find_last_of('.'); - // no file extension - can't read - if( pos == std::string::npos) - return false; - std::string extension = pFile.substr( pos); + const std::string extension = GetExtension(pFile); - if (extension.length() < 4)return false; - if (extension[0] != '.') return false; - if (extension[1] != 'p' && extension[1] != 'P')return false; - if (extension[2] != 'l' && extension[2] != 'L')return false; - if (extension[3] != 'y' && extension[3] != 'Y')return false; - return true; + if (extension == "ply") + return true; + else if (!extension.length() || checkSig) + { + if (!pIOHandler)return true; + const char* tokens[] = {"ply"}; + return SearchFileHeaderForToken(pIOHandler,pFile,tokens,1); + } + return false; +} + +// ------------------------------------------------------------------------------------------------ +void PLYImporter::GetExtensionList(std::string& append) +{ + append.append("*.ply"); } // ------------------------------------------------------------------------------------------------ // Imports the given file into the given scene structure. void PLYImporter::InternReadFile( - const std::string& pFile, aiScene* pScene, IOSystem* pIOHandler) + const std::string& pFile, aiScene* pScene, IOSystem* pIOHandler) { boost::scoped_ptr file( pIOHandler->Open( pFile)); @@ -108,8 +112,7 @@ void PLYImporter::InternReadFile( // the beginning of the file must be PLY - magic, magic if (mBuffer[0] != 'P' && mBuffer[0] != 'p' || mBuffer[1] != 'L' && mBuffer[1] != 'l' || - mBuffer[2] != 'Y' && mBuffer[2] != 'y') - { + mBuffer[2] != 'Y' && mBuffer[2] != 'y') { throw new ImportErrorException( "Invalid .ply file: Magic number \'ply\' is no there"); } @@ -789,19 +792,17 @@ void PLYImporter::LoadFaces(std::vector* pvOut) } else // triangle strips { - // HUGE TODO: MAKE THAT FUCK WORK! - // normally we have only one triangle strip instance where // a value of -1 indicates a restart of the strip for (std::vector::const_iterator i = pcList->alInstances.begin(); i != pcList->alInstances.end();++i) { + const std::vector& quak = (*i).alProperties[iProperty].avList; + pvOut->reserve(pvOut->size() + quak.size() + (quak.size()>>2u)); + int aiTable[2] = {-1,-1}; - for (std::vector::const_iterator - a = (*i).alProperties[iProperty].avList.begin(); - a != (*i).alProperties[iProperty].avList.end();++a) - { - int p = PLY::PropertyInstance::ConvertTo(*a,eType); + for (std::vector::const_iterator a = quak.begin();a != quak.end();++a) { + const int p = PLY::PropertyInstance::ConvertTo(*a,eType); if (-1 == p) { // restart the strip ... @@ -819,12 +820,12 @@ void PLYImporter::LoadFaces(std::vector* pvOut) continue; } - PLY::Face sFace; + pvOut->push_back(PLY::Face()); + PLY::Face& sFace = pvOut->back(); sFace.mIndices.push_back((unsigned int)aiTable[0]); sFace.mIndices.push_back((unsigned int)aiTable[1]); sFace.mIndices.push_back((unsigned int)p); - pvOut->push_back(sFace); - + aiTable[0] = aiTable[1]; aiTable[1] = p; } @@ -1054,4 +1055,4 @@ void PLYImporter::LoadMaterial(std::vector* pvOut) } } -#endif // !! ASSIMP_BUILD_NO_PLY_IMPORTER \ No newline at end of file +#endif // !! ASSIMP_BUILD_NO_PLY_IMPORTER diff --git a/code/PlyLoader.h b/code/PlyLoader.h index ab857e3e1..11c423fef 100644 --- a/code/PlyLoader.h +++ b/code/PlyLoader.h @@ -38,8 +38,9 @@ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. ---------------------------------------------------------------------- */ - -/** @file Declaration of the .ply importer class. */ +/** @file PLYLoader.h + * @brief Declaration of the .ply importer class. + */ #ifndef AI_PLYLOADER_H_INCLUDED #define AI_PLYLOADER_H_INCLUDED @@ -50,15 +51,13 @@ struct aiNode; #include "PlyParser.h" -namespace Assimp -{ +namespace Assimp { class MaterialHelper; - using namespace PLY; // --------------------------------------------------------------------------- -/** Used to load PLY files +/** Importer class to load the stanford PLY file format */ class PLYImporter : public BaseImporter { @@ -75,8 +74,10 @@ public: // ------------------------------------------------------------------- /** Returns whether the class can handle the format of the given file. - * See BaseImporter::CanRead() for details. */ - bool CanRead( const std::string& pFile, IOSystem* pIOHandler) const; + * See BaseImporter::CanRead() for details. + */ + bool CanRead( const std::string& pFile, IOSystem* pIOHandler, + bool checkSig) const; protected: @@ -84,10 +85,7 @@ protected: /** Called by Importer::GetExtensionList() for each loaded importer. * See BaseImporter::GetExtensionList() for details */ - void GetExtensionList(std::string& append) - { - append.append("*.ply"); - } + void GetExtensionList(std::string& append); // ------------------------------------------------------------------- /** Imports the given file into the given scene structure. diff --git a/code/PlyParser.cpp b/code/PlyParser.cpp index 310280367..a5f3300d0 100644 --- a/code/PlyParser.cpp +++ b/code/PlyParser.cpp @@ -744,10 +744,9 @@ bool PLY::PropertyInstance::ParseInstanceBinary ( unsigned int iNum = PLY::PropertyInstance::ConvertTo(v,prop->eFirstType); // parse all list elements - for (unsigned int i = 0; i < iNum;++i) - { - PLY::PropertyInstance::ParseValueBinary(pCur, &pCur,prop->eType,&v,p_bBE); - p_pcOut->avList.push_back(v); + p_pcOut->avList.resize(iNum); + for (unsigned int i = 0; i < iNum;++i){ + PLY::PropertyInstance::ParseValueBinary(pCur, &pCur,prop->eType,&p_pcOut->avList[i],p_bBE); } } else diff --git a/code/PretransformVertices.cpp b/code/PretransformVertices.cpp index 181aaa13d..d9c9bbc99 100644 --- a/code/PretransformVertices.cpp +++ b/code/PretransformVertices.cpp @@ -39,12 +39,14 @@ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. --------------------------------------------------------------------------- */ -/** @file Implementation of the "PretransformVertices" post processing step +/** @file PretransformVertices.cpp + * @brief Implementation of the "PretransformVertices" post processing step */ #include "AssimpPCH.h" #include "PretransformVertices.h" #include "ProcessHelper.h" +#include "SceneCombiner.h" using namespace Assimp; @@ -55,6 +57,7 @@ using namespace Assimp; // ------------------------------------------------------------------------------------------------ // Constructor to be privately used by Importer PretransformVertices::PretransformVertices() +: configKeepHierarchy (false) { } @@ -72,9 +75,17 @@ bool PretransformVertices::IsActive( unsigned int pFlags) const return (pFlags & aiProcess_PreTransformVertices) != 0; } +// ------------------------------------------------------------------------------------------------ +// Setup import configuration +void PretransformVertices::SetupProperties(const Importer* pImp) +{ + // Get the current value of AI_CONFIG_PP_PTV_KEEP_HIERARCHY + configKeepHierarchy = (0 != pImp->GetPropertyInteger(AI_CONFIG_PP_PTV_KEEP_HIERARCHY,0)); +} + // ------------------------------------------------------------------------------------------------ // Count the number of nodes -unsigned int CountNodes( aiNode* pcNode ) +unsigned int PretransformVertices::CountNodes( aiNode* pcNode ) { unsigned int iRet = 1; for (unsigned int i = 0;i < pcNode->mNumChildren;++i) @@ -86,7 +97,7 @@ unsigned int CountNodes( aiNode* pcNode ) // ------------------------------------------------------------------------------------------------ // Get a bitwise combination identifying the vertex format of a mesh -unsigned int GetMeshVFormat(aiMesh* pcMesh) +unsigned int PretransformVertices::GetMeshVFormat(aiMesh* pcMesh) { // the vertex format is stored in aiMesh::mBones for later retrieval. // there isn't a good reason to compute it a few hundred times @@ -106,7 +117,7 @@ unsigned int GetMeshVFormat(aiMesh* pcMesh) // ------------------------------------------------------------------------------------------------ // Count the number of vertices in the whole scene and a given // material index -void CountVerticesAndFaces( aiScene* pcScene, aiNode* pcNode, unsigned int iMat, +void PretransformVertices::CountVerticesAndFaces( aiScene* pcScene, aiNode* pcNode, unsigned int iMat, unsigned int iVFormat, unsigned int* piFaces, unsigned int* piVertices) { for (unsigned int i = 0; i < pcNode->mNumMeshes;++i) @@ -127,39 +138,73 @@ void CountVerticesAndFaces( aiScene* pcScene, aiNode* pcNode, unsigned int iMat, // ------------------------------------------------------------------------------------------------ // Collect vertex/face data -void CollectData( aiScene* pcScene, aiNode* pcNode, unsigned int iMat, +void PretransformVertices::CollectData( aiScene* pcScene, aiNode* pcNode, unsigned int iMat, unsigned int iVFormat, aiMesh* pcMeshOut, - unsigned int aiCurrent[2]) + unsigned int aiCurrent[2], unsigned int* num_refs) { + // No need to multiply if there's no transformation + const bool identity = pcNode->mTransformation.IsIdentity(); for (unsigned int i = 0; i < pcNode->mNumMeshes;++i) { aiMesh* pcMesh = pcScene->mMeshes[ pcNode->mMeshes[i] ]; if (iMat == pcMesh->mMaterialIndex && iVFormat == GetMeshVFormat(pcMesh)) { - // copy positions, transform them to worldspace - for (unsigned int n = 0; n < pcMesh->mNumVertices;++n) - pcMeshOut->mVertices[aiCurrent[AI_PTVS_VERTEX]+n] = pcNode->mTransformation * pcMesh->mVertices[n]; - + // Decrement mesh reference counter + unsigned int& num_ref = num_refs[pcNode->mMeshes[i]]; + ai_assert(0 != num_ref); + --num_ref; - aiMatrix4x4 mWorldIT = pcNode->mTransformation; - mWorldIT.Inverse().Transpose(); + if (identity) { + // copy positions without modifying them + ::memcpy(pcMeshOut->mVertices + aiCurrent[AI_PTVS_VERTEX], + pcMesh->mVertices, + pcMesh->mNumVertices * sizeof(aiVector3D)); - // TODO: implement Inverse() for aiMatrix3x3 - aiMatrix3x3 m = aiMatrix3x3(mWorldIT); - - if (iVFormat & 0x2) - { - // copy normals, transform them to worldspace - for (unsigned int n = 0; n < pcMesh->mNumVertices;++n) { - pcMeshOut->mNormals[aiCurrent[AI_PTVS_VERTEX]+n] = m * pcMesh->mNormals[n]; + if (iVFormat & 0x2) { + // copy normals without modifying them + ::memcpy(pcMeshOut->mNormals + aiCurrent[AI_PTVS_VERTEX], + pcMesh->mNormals, + pcMesh->mNumVertices * sizeof(aiVector3D)); + } + if (iVFormat & 0x4) + { + // copy tangents without modifying them + ::memcpy(pcMeshOut->mTangents + aiCurrent[AI_PTVS_VERTEX], + pcMesh->mTangents, + pcMesh->mNumVertices * sizeof(aiVector3D)); + // copy bitangents without modifying them + ::memcpy(pcMeshOut->mBitangents + aiCurrent[AI_PTVS_VERTEX], + pcMesh->mBitangents, + pcMesh->mNumVertices * sizeof(aiVector3D)); } } - if (iVFormat & 0x4) + else { - // copy tangents and bitangents, transform them to worldspace + // copy positions, transform them to worldspace for (unsigned int n = 0; n < pcMesh->mNumVertices;++n) { - pcMeshOut->mTangents [aiCurrent[AI_PTVS_VERTEX]+n] = m * pcMesh->mTangents[n]; - pcMeshOut->mBitangents[aiCurrent[AI_PTVS_VERTEX]+n] = m * pcMesh->mBitangents[n]; + pcMeshOut->mVertices[aiCurrent[AI_PTVS_VERTEX]+n] = pcNode->mTransformation * pcMesh->mVertices[n]; + } + aiMatrix4x4 mWorldIT = pcNode->mTransformation; + mWorldIT.Inverse().Transpose(); + + // TODO: implement Inverse() for aiMatrix3x3 + aiMatrix3x3 m = aiMatrix3x3(mWorldIT); + + if (iVFormat & 0x2) + { + // copy normals, transform them to worldspace + for (unsigned int n = 0; n < pcMesh->mNumVertices;++n) { + pcMeshOut->mNormals[aiCurrent[AI_PTVS_VERTEX]+n] = + m * pcMesh->mNormals[n]; + } + } + if (iVFormat & 0x4) + { + // copy tangents and bitangents, transform them to worldspace + for (unsigned int n = 0; n < pcMesh->mNumVertices;++n) { + pcMeshOut->mTangents [aiCurrent[AI_PTVS_VERTEX]+n] = m * pcMesh->mTangents[n]; + pcMeshOut->mBitangents[aiCurrent[AI_PTVS_VERTEX]+n] = m * pcMesh->mBitangents[n]; + } } } unsigned int p = 0; @@ -180,26 +225,35 @@ void CollectData( aiScene* pcScene, aiNode* pcNode, unsigned int iMat, pcMesh->mNumVertices * sizeof(aiColor4D)); ++p; } - // now we need to copy all faces - // since we will delete the source mesh afterwards, - // we don't need to reallocate the array of indices - for (unsigned int planck = 0;planckmNumFaces;++planck) + // now we need to copy all faces. since we will delete the source mesh afterwards, + // we don't need to reallocate the array of indices except if this mesh is + // referenced multiple times. + for (unsigned int planck = 0;planck < pcMesh->mNumFaces;++planck) { - pcMeshOut->mFaces[aiCurrent[AI_PTVS_FACE]+planck].mNumIndices = - pcMesh->mFaces[planck].mNumIndices; + aiFace& f_src = pcMesh->mFaces[planck]; + aiFace& f_dst = pcMeshOut->mFaces[aiCurrent[AI_PTVS_FACE]+planck]; - unsigned int* pi = pcMeshOut->mFaces[aiCurrent[AI_PTVS_FACE]+planck]. - mIndices = pcMesh->mFaces[planck].mIndices; + const unsigned int num_idx = f_src.mNumIndices; - // offset all vrtex indices - for (unsigned int hahn = 0; hahn < pcMesh->mFaces[planck].mNumIndices;++hahn) - { - pi[hahn] += aiCurrent[AI_PTVS_VERTEX]; + f_dst.mNumIndices = num_idx; + + unsigned int* pi; + if (!num_ref) { /* if last time the mesh is referenced -> no reallocation */ + pi = f_dst.mIndices = f_src.mIndices; + + // offset all vertex indices + for (unsigned int hahn = 0; hahn < num_idx;++hahn){ + pi[hahn] += aiCurrent[AI_PTVS_VERTEX]; + } + } + else { + pi = f_dst.mIndices = new unsigned int[num_idx]; + + // copy and offset all vertex indices + for (unsigned int hahn = 0; hahn < num_idx;++hahn){ + pi[hahn] = f_src.mIndices[hahn] + aiCurrent[AI_PTVS_VERTEX]; + } } - - // just make sure the array won't be deleted by the - // aiFace destructor ... - pcMesh->mFaces[planck].mIndices = NULL; // Update the mPrimitiveTypes member of the mesh switch (pcMesh->mFaces[planck].mNumIndices) @@ -222,24 +276,24 @@ void CollectData( aiScene* pcScene, aiNode* pcNode, unsigned int iMat, aiCurrent[AI_PTVS_FACE] += pcMesh->mNumFaces; } } - for (unsigned int i = 0;i < pcNode->mNumChildren;++i) - { + + // append all children of us + for (unsigned int i = 0;i < pcNode->mNumChildren;++i) { CollectData(pcScene,pcNode->mChildren[i],iMat, - iVFormat,pcMeshOut,aiCurrent); + iVFormat,pcMeshOut,aiCurrent,num_refs); } } // ------------------------------------------------------------------------------------------------ // Get a list of all vertex formats that occur for a given material index // The output list contains duplicate elements -void GetVFormatList( aiScene* pcScene, unsigned int iMat, +void PretransformVertices::GetVFormatList( aiScene* pcScene, unsigned int iMat, std::list& aiOut) { for (unsigned int i = 0; i < pcScene->mNumMeshes;++i) { aiMesh* pcMesh = pcScene->mMeshes[ i ]; - if (iMat == pcMesh->mMaterialIndex) - { + if (iMat == pcMesh->mMaterialIndex) { aiOut.push_back(GetMeshVFormat(pcMesh)); } } @@ -247,7 +301,7 @@ void GetVFormatList( aiScene* pcScene, unsigned int iMat, // ------------------------------------------------------------------------------------------------ // Compute the absolute transformation matrices of each node -void ComputeAbsoluteTransform( aiNode* pcNode ) +void PretransformVertices::ComputeAbsoluteTransform( aiNode* pcNode ) { if (pcNode->mParent) { pcNode->mTransformation = pcNode->mParent->mTransformation*pcNode->mTransformation; @@ -258,12 +312,126 @@ void ComputeAbsoluteTransform( aiNode* pcNode ) } } +// ------------------------------------------------------------------------------------------------ +// Apply the node transformation to a mesh +void PretransformVertices::ApplyTransform(aiMesh* mesh, const aiMatrix4x4& mat) +{ + // Check whether we need to transform the coordinates at all + if (!mat.IsIdentity()) { + + if (mesh->HasPositions()) { + for (unsigned int i = 0; i < mesh->mNumVertices; ++i) { + mesh->mVertices[i] = mat * mesh->mVertices[i]; + } + } + if (mesh->HasNormals() || mesh->HasTangentsAndBitangents()) { + aiMatrix4x4 mWorldIT = mat; + mWorldIT.Inverse().Transpose(); + + // TODO: implement Inverse() for aiMatrix3x3 + aiMatrix3x3 m = aiMatrix3x3(mWorldIT); + + if (mesh->HasNormals()) { + for (unsigned int i = 0; i < mesh->mNumVertices; ++i) { + mesh->mNormals[i] = m * mesh->mNormals[i]; + } + } + if (mesh->HasTangentsAndBitangents()) { + for (unsigned int i = 0; i < mesh->mNumVertices; ++i) { + mesh->mTangents[i] = m * mesh->mTangents[i]; + mesh->mBitangents[i] = m * mesh->mBitangents[i]; + } + } + } + } +} + +// ------------------------------------------------------------------------------------------------ +// Simple routine to build meshes in worldspace, no further optimization +void PretransformVertices::BuildWCSMeshes(std::vector& out, aiMesh** in, + unsigned int numIn, aiNode* node) +{ + // NOTE: + // aiMesh::mNumBones store original source mesh, or 0xffffffff if not a copy + // aiMesh::mBones store reference to abs. transform we multiplied with + + // process meshes + for (unsigned int i = 0; i < node->mNumMeshes;++i) { + aiMesh* mesh = in[node->mMeshes[i]]; + + // check whether we can operate on this mesh + if (!mesh->mBones || *reinterpret_cast(mesh->mBones) == node->mTransformation) { + // yes, we can. + mesh->mBones = reinterpret_cast (&node->mTransformation); + mesh->mNumBones = 0xffffffff; + } + else { + + // try to find us in the list of newly created meshes + for (unsigned int n = 0; n < out.size(); ++n) { + aiMesh* ctz = out[n]; + if (ctz->mNumBones == node->mMeshes[i] && *reinterpret_cast(ctz->mBones) == node->mTransformation) { + + // ok, use this one. Update node mesh index + node->mMeshes[i] = numIn + n; + } + } + if (node->mMeshes[i] < numIn) { + // Worst case. Need to operate on a full copy of the mesh + DefaultLogger::get()->info("PretransformVertices: Copying mesh due to mismatching transforms"); + aiMesh* ntz; + + const unsigned int tmp = mesh->mNumBones; // + mesh->mNumBones = 0; + SceneCombiner::Copy(&ntz,mesh); + mesh->mNumBones = tmp; + + ntz->mNumBones = node->mMeshes[i]; + ntz->mBones = reinterpret_cast (&node->mTransformation); + + out.push_back(ntz); + } + } + } + + // call children + for (unsigned int i = 0; i < node->mNumChildren;++i) + BuildWCSMeshes(out,in,numIn,node->mChildren[i]); +} + +// ------------------------------------------------------------------------------------------------ +// Reset transformation matrices to identity +void PretransformVertices::MakeIdentityTransform(aiNode* nd) +{ + nd->mTransformation = aiMatrix4x4(); + + // call children + for (unsigned int i = 0; i < nd->mNumChildren;++i) + MakeIdentityTransform(nd->mChildren[i]); +} + +// ------------------------------------------------------------------------------------------------ +// Build reference counters for all meshes +void PretransformVertices::BuildMeshRefCountArray(aiNode* nd, unsigned int * refs) +{ + for (unsigned int i = 0; i< nd->mNumMeshes;++i) + refs[nd->mMeshes[i]]++; + + // call children + for (unsigned int i = 0; i < nd->mNumChildren;++i) + BuildMeshRefCountArray(nd->mChildren[i],refs); +} + // ------------------------------------------------------------------------------------------------ // Executes the post processing step on the given imported data. void PretransformVertices::Execute( aiScene* pScene) { DefaultLogger::get()->debug("PretransformVerticesProcess begin"); + // Return immediately if we have no meshes + if (!pScene->mNumMeshes) + return; + const unsigned int iOldMeshes = pScene->mNumMeshes; const unsigned int iOldAnimationChannels = pScene->mNumAnimations; const unsigned int iOldNodes = CountNodes(pScene->mRootNode); @@ -271,11 +439,10 @@ void PretransformVertices::Execute( aiScene* pScene) // first compute absolute transformation matrices for all nodes ComputeAbsoluteTransform(pScene->mRootNode); - // delete aiMesh::mBones for all meshes. The bones are + // Delete aiMesh::mBones for all meshes. The bones are // removed during this step and we need the pointer as // temporary storage - for (unsigned int i = 0; i < pScene->mNumMeshes;++i) - { + for (unsigned int i = 0; i < pScene->mNumMeshes;++i) { aiMesh* mesh = pScene->mMeshes[i]; for (unsigned int a = 0; a < mesh->mNumBones;++a) @@ -287,50 +454,123 @@ void PretransformVertices::Execute( aiScene* pScene) // now build a list of output meshes std::vector apcOutMeshes; - apcOutMeshes.reserve(pScene->mNumMaterials<<1u); - std::list aiVFormats; - for (unsigned int i = 0; i < pScene->mNumMaterials;++i) { - // get the list of all vertex formats for this material - aiVFormats.clear(); - GetVFormatList(pScene,i,aiVFormats); - aiVFormats.sort(); - aiVFormats.unique(); - for (std::list::const_iterator j = aiVFormats.begin();j != aiVFormats.end();++j) { - unsigned int iVertices = 0; - unsigned int iFaces = 0; - CountVerticesAndFaces(pScene,pScene->mRootNode,i,*j,&iFaces,&iVertices); - if (iFaces && iVertices) - { - apcOutMeshes.push_back(new aiMesh()); - aiMesh* pcMesh = apcOutMeshes.back(); - pcMesh->mNumFaces = iFaces; - pcMesh->mNumVertices = iVertices; - pcMesh->mFaces = new aiFace[iFaces]; - pcMesh->mVertices = new aiVector3D[iVertices]; - pcMesh->mMaterialIndex = i; - if ((*j) & 0x2)pcMesh->mNormals = new aiVector3D[iVertices]; - if ((*j) & 0x4) - { - pcMesh->mTangents = new aiVector3D[iVertices]; - pcMesh->mBitangents = new aiVector3D[iVertices]; - } - iFaces = 0; - while ((*j) & (0x100 << iFaces)) - { - pcMesh->mTextureCoords[iFaces] = new aiVector3D[iVertices]; - if ((*j) & (0x10000 << iFaces))pcMesh->mNumUVComponents[iFaces] = 3; - else pcMesh->mNumUVComponents[iFaces] = 2; - iFaces++; - } - iFaces = 0; - while ((*j) & (0x1000000 << iFaces)) - pcMesh->mColors[iFaces++] = new aiColor4D[iVertices]; - // fill the mesh ... - unsigned int aiTemp[2] = {0,0}; - CollectData(pScene,pScene->mRootNode,i,*j,pcMesh,aiTemp); + // Keep scene hierarchy? It's an easy job in this case ... + // we go on and transform all meshes, if one is referenced by nodes + // with different absolute transformations a depth copy of the mesh + // is required. + if( configKeepHierarchy ) { + + // Hack: store the matrix we're transforming a mesh with in aiMesh::mBones + BuildWCSMeshes(apcOutMeshes,pScene->mMeshes,pScene->mNumMeshes, pScene->mRootNode); + + // ... if new meshes have been generated, append them to the end of the scene + if (apcOutMeshes.size() > 0) { + aiMesh** npp = new aiMesh*[pScene->mNumMeshes + apcOutMeshes.size()]; + + ::memcpy(npp,pScene->mMeshes,sizeof(aiMesh*)*pScene->mNumMeshes); + ::memcpy(npp+pScene->mNumMeshes,&apcOutMeshes[0],sizeof(aiMesh*)*apcOutMeshes.size()); + + pScene->mNumMeshes += apcOutMeshes.size(); + delete[] pScene->mMeshes; pScene->mMeshes = npp; + } + + // now iterate through all meshes and transform them to worldspace + for (unsigned int i = 0; i < pScene->mNumMeshes; ++i) { + ApplyTransform(pScene->mMeshes[i],*reinterpret_cast( pScene->mMeshes[i]->mBones )); + + // prevent improper destruction + pScene->mMeshes[i]->mBones = NULL; + pScene->mMeshes[i]->mNumBones = 0; + } + } + else { + + apcOutMeshes.reserve(pScene->mNumMaterials<<1u); + std::list aiVFormats; + + std::vector s(pScene->mNumMeshes,0); + BuildMeshRefCountArray(pScene->mRootNode,&s[0]); + + for (unsigned int i = 0; i < pScene->mNumMaterials;++i) { + // get the list of all vertex formats for this material + aiVFormats.clear(); + GetVFormatList(pScene,i,aiVFormats); + aiVFormats.sort(); + aiVFormats.unique(); + for (std::list::const_iterator j = aiVFormats.begin();j != aiVFormats.end();++j) { + unsigned int iVertices = 0; + unsigned int iFaces = 0; + CountVerticesAndFaces(pScene,pScene->mRootNode,i,*j,&iFaces,&iVertices); + if (0 != iFaces && 0 != iVertices) + { + apcOutMeshes.push_back(new aiMesh()); + aiMesh* pcMesh = apcOutMeshes.back(); + pcMesh->mNumFaces = iFaces; + pcMesh->mNumVertices = iVertices; + pcMesh->mFaces = new aiFace[iFaces]; + pcMesh->mVertices = new aiVector3D[iVertices]; + pcMesh->mMaterialIndex = i; + if ((*j) & 0x2)pcMesh->mNormals = new aiVector3D[iVertices]; + if ((*j) & 0x4) + { + pcMesh->mTangents = new aiVector3D[iVertices]; + pcMesh->mBitangents = new aiVector3D[iVertices]; + } + iFaces = 0; + while ((*j) & (0x100 << iFaces)) + { + pcMesh->mTextureCoords[iFaces] = new aiVector3D[iVertices]; + if ((*j) & (0x10000 << iFaces))pcMesh->mNumUVComponents[iFaces] = 3; + else pcMesh->mNumUVComponents[iFaces] = 2; + iFaces++; + } + iFaces = 0; + while ((*j) & (0x1000000 << iFaces)) + pcMesh->mColors[iFaces++] = new aiColor4D[iVertices]; + + // fill the mesh ... + unsigned int aiTemp[2] = {0,0}; + CollectData(pScene,pScene->mRootNode,i,*j,pcMesh,aiTemp,&s[0]); + } } } + + // now delete all meshes in the scene and build a new mesh list + for (unsigned int i = 0; i < pScene->mNumMeshes;++i) + { + aiMesh* mesh = pScene->mMeshes[i]; + mesh->mNumBones = 0; + mesh->mBones = NULL; + + // we're reusing the face index arrays. avoid destruction + for (unsigned int a = 0; a < mesh->mNumFaces; ++a) { + mesh->mFaces[a].mNumIndices = 0; + mesh->mFaces[a].mIndices = NULL; + } + + delete mesh; + + // Invalidate the contents of the old mesh array. We will most + // likely have less output meshes now, so the last entries of + // the mesh array are not overridden. We set them to NULL to + // make sure the developer gets notified when his application + // attempts to access these fields ... + mesh = NULL; + } + + // If no meshes are referenced in the node graph it is possible that we get no output meshes. + if (apcOutMeshes.empty()) { + throw new ImportErrorException("No output meshes: all meshes are orphaned and are not referenced by nodes"); + } + else + { + // It is impossible that we have more output meshes than + // input meshes, so we can easily reuse the old mesh array + pScene->mNumMeshes = (unsigned int)apcOutMeshes.size(); + for (unsigned int i = 0; i < pScene->mNumMeshes;++i) + pScene->mMeshes[i] = apcOutMeshes[i]; + } } // remove all animations from the scene @@ -341,40 +581,6 @@ void PretransformVertices::Execute( aiScene* pScene) pScene->mAnimations = NULL; pScene->mNumAnimations = 0; - // now delete all meshes in the scene and build a new mesh list - for (unsigned int i = 0; i < pScene->mNumMeshes;++i) - { - pScene->mMeshes[i]->mBones = NULL; - delete pScene->mMeshes[i]; - - // invalidate the contents of the old mesh array. We will most - // likely have less output meshes now, so the last entries of - // the mesh array are not overridden. We set them to NULL to - // make sure the developer gets notified when his application - // attempts to access these fields ... - pScene->mMeshes[i] = NULL; - } - - // If no meshes are referenced in the node graph it is - // possible that we get no output meshes. However, this - // is OK if we had no input meshes, too - if (apcOutMeshes.empty()) - { - if (pScene->mNumMeshes) - { - throw new ImportErrorException("No output meshes: all meshes are orphaned " - "and have no node references"); - } - } - else - { - // It is impossible that we have more output meshes than - // input meshes, so we can easily reuse the old mesh array - pScene->mNumMeshes = (unsigned int)apcOutMeshes.size(); - for (unsigned int i = 0; i < pScene->mNumMeshes;++i) - pScene->mMeshes[i] = apcOutMeshes[i]; - } - // --- we need to keep all cameras and lights for (unsigned int i = 0; i < pScene->mNumCameras;++i) { @@ -401,51 +607,58 @@ void PretransformVertices::Execute( aiScene* pScene) l->mDirection = aiMatrix3x3( nd->mTransformation ) * l->mDirection; } - // now delete all nodes in the scene and build a new - // flat node graph with a root node and some level 1 children - delete pScene->mRootNode; - pScene->mRootNode = new aiNode(); - pScene->mRootNode->mName.Set(""); + if( !configKeepHierarchy ) { - if (1 == pScene->mNumMeshes && !pScene->mNumLights && !pScene->mNumCameras) - { - pScene->mRootNode->mNumMeshes = 1; - pScene->mRootNode->mMeshes = new unsigned int[1]; - pScene->mRootNode->mMeshes[0] = 0; + // now delete all nodes in the scene and build a new + // flat node graph with a root node and some level 1 children + delete pScene->mRootNode; + pScene->mRootNode = new aiNode(); + pScene->mRootNode->mName.Set(""); + + if (1 == pScene->mNumMeshes && !pScene->mNumLights && !pScene->mNumCameras) + { + pScene->mRootNode->mNumMeshes = 1; + pScene->mRootNode->mMeshes = new unsigned int[1]; + pScene->mRootNode->mMeshes[0] = 0; + } + else + { + pScene->mRootNode->mNumChildren = pScene->mNumMeshes+pScene->mNumLights+pScene->mNumCameras; + aiNode** nodes = pScene->mRootNode->mChildren = new aiNode*[pScene->mRootNode->mNumChildren]; + + // generate mesh nodes + for (unsigned int i = 0; i < pScene->mNumMeshes;++i,++nodes) + { + aiNode* pcNode = *nodes = new aiNode(); + pcNode->mParent = pScene->mRootNode; + pcNode->mName.length = ::sprintf(pcNode->mName.data,"mesh_%i",i); + + // setup mesh indices + pcNode->mNumMeshes = 1; + pcNode->mMeshes = new unsigned int[1]; + pcNode->mMeshes[0] = i; + } + // generate light nodes + for (unsigned int i = 0; i < pScene->mNumLights;++i,++nodes) + { + aiNode* pcNode = *nodes = new aiNode(); + pcNode->mParent = pScene->mRootNode; + pcNode->mName.length = ::sprintf(pcNode->mName.data,"light_%i",i); + pScene->mLights[i]->mName = pcNode->mName; + } + // generate camera nodes + for (unsigned int i = 0; i < pScene->mNumCameras;++i,++nodes) + { + aiNode* pcNode = *nodes = new aiNode(); + pcNode->mParent = pScene->mRootNode; + pcNode->mName.length = ::sprintf(pcNode->mName.data,"cam_%i",i); + pScene->mCameras[i]->mName = pcNode->mName; + } + } } - else - { - pScene->mRootNode->mNumChildren = pScene->mNumMeshes+pScene->mNumLights+pScene->mNumCameras; - aiNode** nodes = pScene->mRootNode->mChildren = new aiNode*[pScene->mRootNode->mNumChildren]; - - // generate mesh nodes - for (unsigned int i = 0; i < pScene->mNumMeshes;++i,++nodes) - { - aiNode* pcNode = *nodes = new aiNode(); - pcNode->mParent = pScene->mRootNode; - pcNode->mName.length = ::sprintf(pcNode->mName.data,"mesh_%i",i); - - // setup mesh indices - pcNode->mNumMeshes = 1; - pcNode->mMeshes = new unsigned int[1]; - pcNode->mMeshes[0] = i; - } - // generate light nodes - for (unsigned int i = 0; i < pScene->mNumLights;++i,++nodes) - { - aiNode* pcNode = *nodes = new aiNode(); - pcNode->mParent = pScene->mRootNode; - pcNode->mName.length = ::sprintf(pcNode->mName.data,"light_%i",i); - pScene->mLights[i]->mName = pcNode->mName; - } - // generate camera nodes - for (unsigned int i = 0; i < pScene->mNumCameras;++i,++nodes) - { - aiNode* pcNode = *nodes = new aiNode(); - pcNode->mParent = pScene->mRootNode; - pcNode->mName.length = ::sprintf(pcNode->mName.data,"cam_%i",i); - pScene->mCameras[i]->mName = pcNode->mName; - } + else { + // ... and finally set the transformation matrix of all nodes to identity + MakeIdentityTransform(pScene->mRootNode); } // print statistics @@ -467,7 +680,5 @@ void PretransformVertices::Execute( aiScene* pScene) iOldMeshes,pScene->mNumMeshes); DefaultLogger::get()->info(buffer); } - - return; } diff --git a/code/PretransformVertices.h b/code/PretransformVertices.h index 9e1cb2685..2327cc0e3 100644 --- a/code/PretransformVertices.h +++ b/code/PretransformVertices.h @@ -38,16 +38,18 @@ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. ---------------------------------------------------------------------- */ -/** @file Defines a post processing step to pretransform all - vertices in the scenegraph */ +/** @file PretransformVertices.h + * @brief Defines a post processing step to pretransform all + * vertices in the scenegraph + */ #ifndef AI_PRETRANSFORMVERTICES_H_INC #define AI_PRETRANSFORMVERTICES_H_INC #include "BaseProcess.h" #include "../include/aiMesh.h" -namespace Assimp -{ +class PretransformVerticesTest; +namespace Assimp { // --------------------------------------------------------------------------- /** The PretransformVertices pretransforms all vertices in the nodegraph @@ -57,6 +59,7 @@ namespace Assimp class ASSIMP_API PretransformVertices : public BaseProcess { friend class Importer; + friend class ::PretransformVerticesTest; protected: /** Constructor to be privately used by Importer */ @@ -66,21 +69,96 @@ protected: ~PretransformVertices (); public: + // ------------------------------------------------------------------- - /** Returns whether the processing step is present in the given flag field. - * @param pFlags The processing flags the importer was called with. A bitwise - * combination of #aiPostProcessSteps. - * @return true if the process is present in this flag fields, false if not. - */ + // Check whether step is active bool IsActive( unsigned int pFlags) const; // ------------------------------------------------------------------- - /** Executes the post processing step on the given imported data. - * At the moment a process is not supposed to fail. - * @param pScene The imported data to work at. - */ + // Execute step on a given scene void Execute( aiScene* pScene); + // ------------------------------------------------------------------- + // Setup import settings + void SetupProperties(const Importer* pImp); + + + // ------------------------------------------------------------------- + /** @brief Toggle the 'keep hierarchy' option + * @param d hm ... difficult to guess what this means, hu!? + */ + void KeepHierarchy(bool d) { + configKeepHierarchy = d; + } + + // ------------------------------------------------------------------- + /** @brief Check whether 'keep hierarchy' is currently enabled. + * @return ... + */ + bool IsHierarchyKept() const { + return configKeepHierarchy; + } + +private: + + // ------------------------------------------------------------------- + // Count the number of nodes + unsigned int CountNodes( aiNode* pcNode ); + + // ------------------------------------------------------------------- + // Get a bitwise combination identifying the vertex format of a mesh + unsigned int GetMeshVFormat(aiMesh* pcMesh); + + // ------------------------------------------------------------------- + // Count the number of vertices in the whole scene and a given + // material index + void CountVerticesAndFaces( aiScene* pcScene, aiNode* pcNode, + unsigned int iMat, + unsigned int iVFormat, + unsigned int* piFaces, + unsigned int* piVertices); + + // ------------------------------------------------------------------- + // Collect vertex/face data + void CollectData( aiScene* pcScene, aiNode* pcNode, + unsigned int iMat, + unsigned int iVFormat, + aiMesh* pcMeshOut, + unsigned int aiCurrent[2], + unsigned int* num_refs); + + // ------------------------------------------------------------------- + // Get a list of all vertex formats that occur for a given material + // The output list contains duplicate elements + void GetVFormatList( aiScene* pcScene, unsigned int iMat, + std::list& aiOut); + + // ------------------------------------------------------------------- + // Compute the absolute transformation matrices of each node + void ComputeAbsoluteTransform( aiNode* pcNode ); + + // ------------------------------------------------------------------- + // Simple routine to build meshes in worldspace, no further optimization + void BuildWCSMeshes(std::vector& out, aiMesh** in, + unsigned int numIn, aiNode* node); + + // ------------------------------------------------------------------- + // Apply the node transformation to a mesh + void ApplyTransform(aiMesh* mesh, const aiMatrix4x4& mat); + + // ------------------------------------------------------------------- + // Reset transformation matrices to identity + void MakeIdentityTransform(aiNode* nd); + + // ------------------------------------------------------------------- + // Build reference counters for all meshes + void BuildMeshRefCountArray(aiNode* nd, unsigned int * refs); + + + + //! Configuration option: keep scene hierarchy as long as possible + bool configKeepHierarchy; + }; } // end of namespace Assimp diff --git a/code/ProcessHelper.h b/code/ProcessHelper.h index c076ba0fc..9c67e35fb 100644 --- a/code/ProcessHelper.h +++ b/code/ProcessHelper.h @@ -46,11 +46,144 @@ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. #include "SpatialSort.h" #include "BaseProcess.h" +// ------------------------------------------------------------------------------- +// Some extensions to std namespace. Mainly std::min and std::max for all +// flat data types in the aiScene. They're used to quickly determine the +// min/max bounds of data arrays. +#ifdef __cplusplus +namespace std { + + // std::min for aiVector3D + inline ::aiVector3D min (const ::aiVector3D& a, const ::aiVector3D& b) { + return ::aiVector3D (min(a.x,b.x),min(a.y,b.y),min(a.z,b.z)); + } + + // std::max for aiVector3D + inline ::aiVector3D max (const ::aiVector3D& a, const ::aiVector3D& b) { + return ::aiVector3D (max(a.x,b.x),max(a.y,b.y),max(a.z,b.z)); + } + + // std::min for aiColor4D + inline ::aiColor4D min (const ::aiColor4D& a, const ::aiColor4D& b) { + return ::aiColor4D (min(a.r,b.r),min(a.g,b.g),min(a.b,b.b),min(a.a,b.a)); + } + + // std::max for aiColor4D + inline ::aiColor4D max (const ::aiColor4D& a, const ::aiColor4D& b) { + return ::aiColor4D (max(a.r,b.r),max(a.g,b.g),max(a.b,b.b),max(a.a,b.a)); + } + + // std::min for aiQuaternion + inline ::aiQuaternion min (const ::aiQuaternion& a, const ::aiQuaternion& b) { + return ::aiQuaternion (min(a.w,b.w),min(a.x,b.x),min(a.y,b.y),min(a.z,b.z)); + } + + // std::max for aiQuaternion + inline ::aiQuaternion max (const ::aiQuaternion& a, const ::aiQuaternion& b) { + return ::aiQuaternion (max(a.w,b.w),max(a.x,b.x),max(a.y,b.y),max(a.z,b.z)); + } + + // std::min for aiVectorKey + inline ::aiVectorKey min (const ::aiVectorKey& a, const ::aiVectorKey& b) { + return ::aiVectorKey (min(a.mTime,b.mTime),min(a.mValue,b.mValue)); + } + + // std::max for aiVectorKey + inline ::aiVectorKey max (const ::aiVectorKey& a, const ::aiVectorKey& b) { + return ::aiVectorKey (max(a.mTime,b.mTime),max(a.mValue,b.mValue)); + } + + // std::min for aiQuatKey + inline ::aiQuatKey min (const ::aiQuatKey& a, const ::aiQuatKey& b) { + return ::aiQuatKey (min(a.mTime,b.mTime),min(a.mValue,b.mValue)); + } + + // std::max for aiQuatKey + inline ::aiQuatKey max (const ::aiQuatKey& a, const ::aiQuatKey& b) { + return ::aiQuatKey (max(a.mTime,b.mTime),max(a.mValue,b.mValue)); + } + + // std::min for aiVertexWeight + inline ::aiVertexWeight min (const ::aiVertexWeight& a, const ::aiVertexWeight& b) { + return ::aiVertexWeight (min(a.mVertexId,b.mVertexId),min(a.mWeight,b.mWeight)); + } + + // std::max for aiVertexWeight + inline ::aiVertexWeight max (const ::aiVertexWeight& a, const ::aiVertexWeight& b) { + return ::aiVertexWeight (max(a.mVertexId,b.mVertexId),max(a.mWeight,b.mWeight)); + } + +} // end namespace std +#endif // !! C++ + namespace Assimp { -// some aliases to make the whole stuff easier to read -typedef std::pair < unsigned int,float > PerVertexWeight; -typedef std::vector < PerVertexWeight > VertexWeightTable; +// ------------------------------------------------------------------------------- +// Start points for ArrayBounds for all supported Ts +template +struct MinMaxChooser; + +template <> struct MinMaxChooser { + void operator ()(float& min,float& max) { + max = -10e10f; + min = 10e10f; +}}; +template <> struct MinMaxChooser { + void operator ()(double& min,double& max) { + max = -10e10; + min = 10e10; +}}; +template <> struct MinMaxChooser { + void operator ()(unsigned int& min,unsigned int& max) { + max = 0; + min = (1u<<(sizeof(unsigned int)*8-1)); +}}; + +template <> struct MinMaxChooser { + void operator ()(aiVector3D& min,aiVector3D& max) { + max = aiVector3D(-10e10f,-10e10f,-10e10f); + min = aiVector3D( 10e10f, 10e10f, 10e10f); +}}; +template <> struct MinMaxChooser { + void operator ()(aiColor4D& min,aiColor4D& max) { + max = aiColor4D(-10e10f,-10e10f,-10e10f,-10e10f); + min = aiColor4D( 10e10f, 10e10f, 10e10f, 10e10f); +}}; + +template <> struct MinMaxChooser { + void operator ()(aiQuaternion& min,aiQuaternion& max) { + max = aiQuaternion(-10e10f,-10e10f,-10e10f,-10e10f); + min = aiQuaternion( 10e10f, 10e10f, 10e10f, 10e10f); +}}; + +template <> struct MinMaxChooser { + void operator ()(aiVectorKey& min,aiVectorKey& max) { + MinMaxChooser()(min.mTime,max.mTime); + MinMaxChooser()(min.mValue,max.mValue); +}}; +template <> struct MinMaxChooser { + void operator ()(aiQuatKey& min,aiQuatKey& max) { + MinMaxChooser()(min.mTime,max.mTime); + MinMaxChooser()(min.mValue,max.mValue); +}}; + +template <> struct MinMaxChooser { + void operator ()(aiVertexWeight& min,aiVertexWeight& max) { + MinMaxChooser()(min.mVertexId,max.mVertexId); + MinMaxChooser()(min.mWeight,max.mWeight); +}}; + +// ------------------------------------------------------------------------------- +// Find the min/max values of an array of Ts +template +inline void ArrayBounds(const T* in, unsigned int size, T& min, T& max) +{ + MinMaxChooser ()(min,max); + for (unsigned int i = 0; i < size;++i) { + min = std::min(in[i],min); + max = std::max(in[i],max); + } +} // ------------------------------------------------------------------------------- /** Little helper function to calculate the quadratic difference @@ -67,24 +200,6 @@ inline float GetColorDifference( const aiColor4D& pColor1, const aiColor4D& pCol return c.r*c.r + c.g*c.g + c.b*c.b + c.a*c.a; } -// ------------------------------------------------------------------------------- -// Compute the AABB of a mesh -inline void FindAABB (const aiMesh* mesh, aiVector3D& min, aiVector3D& max) -{ - min = aiVector3D (10e10f, 10e10f, 10e10f); - max = aiVector3D (-10e10f,-10e10f,-10e10f); - for (unsigned int i = 0;i < mesh->mNumVertices;++i) - { - const aiVector3D& v = mesh->mVertices[i]; - min.x = ::std::min(v.x,min.x); - min.y = ::std::min(v.y,min.y); - min.z = ::std::min(v.z,min.z); - max.x = ::std::max(v.x,max.x); - max.y = ::std::max(v.y,max.y); - max.z = ::std::max(v.z,max.z); - } -} - // ------------------------------------------------------------------------------- // Compute the AABB of a mesh after applying a given transform inline void FindAABBTransformed (const aiMesh* mesh, aiVector3D& min, aiVector3D& max, @@ -95,12 +210,8 @@ inline void FindAABBTransformed (const aiMesh* mesh, aiVector3D& min, aiVector3D for (unsigned int i = 0;i < mesh->mNumVertices;++i) { const aiVector3D v = m * mesh->mVertices[i]; - min.x = ::std::min(v.x,min.x); - min.y = ::std::min(v.y,min.y); - min.z = ::std::min(v.z,min.z); - max.x = ::std::max(v.x,max.x); - max.y = ::std::max(v.y,max.y); - max.z = ::std::max(v.z,max.z); + min = std::min(v,min); + max = std::max(v,max); } } @@ -108,7 +219,7 @@ inline void FindAABBTransformed (const aiMesh* mesh, aiVector3D& min, aiVector3D // Helper function to determine the 'real' center of a mesh inline void FindMeshCenter (aiMesh* mesh, aiVector3D& out, aiVector3D& min, aiVector3D& max) { - FindAABB(mesh,min,max); + ArrayBounds(mesh->mVertices,mesh->mNumVertices, min,max); out = min + (max-min)*0.5f; } @@ -146,7 +257,7 @@ inline float ComputePositionEpsilon(const aiMesh* pMesh) // calculate the position bounds so we have a reliable epsilon to check position differences against aiVector3D minVec, maxVec; - FindAABB(pMesh,minVec,maxVec); + ArrayBounds(pMesh->mVertices,pMesh->mNumVertices,minVec,maxVec); return (maxVec - minVec).Length() * epsilon; } @@ -165,8 +276,10 @@ inline unsigned int GetMeshVFormatUnique(aiMesh* pcMesh) // tangents and bitangents if (pcMesh->HasTangentsAndBitangents())iRet |= 0x4; +#ifdef BOOST_STATIC_ASSERT BOOST_STATIC_ASSERT(8 >= AI_MAX_NUMBER_OF_COLOR_SETS); BOOST_STATIC_ASSERT(8 >= AI_MAX_NUMBER_OF_TEXTURECOORDS); +#endif // texture coordinates unsigned int p = 0; @@ -184,6 +297,9 @@ inline unsigned int GetMeshVFormatUnique(aiMesh* pcMesh) return iRet; } +typedef std::pair PerVertexWeight; +typedef std::vector VertexWeightTable; + // ------------------------------------------------------------------------------- // Compute a per-vertex bone weight table // please .... delete result with operator delete[] ... @@ -205,13 +321,14 @@ inline VertexWeightTable* ComputeVertexBoneWeightTable(aiMesh* pMesh) return avPerVertexWeights; } - // ------------------------------------------------------------------------------- // Get a string for a given aiTextureType inline const char* TextureTypeToString(aiTextureType in) { switch (in) { + case aiTextureType_NONE: + return "n/a"; case aiTextureType_DIFFUSE: return "Diffuse"; case aiTextureType_SPECULAR: @@ -237,7 +354,7 @@ inline const char* TextureTypeToString(aiTextureType in) case aiTextureType_UNKNOWN: return "Unknown"; default: - return "HUGE ERROR, please leave the room immediately and call the police"; + return "HUGE ERROR. Expect BSOD (linux guys: kernel panic ...)."; } } @@ -260,7 +377,7 @@ inline const char* MappingTypeToString(aiTextureMapping in) case aiTextureMapping_OTHER: return "Other"; default: - return "HUGE ERROR, please leave the room immediately and call the police"; + return "HUGE ERROR. Expect BSOD (linux guys: kernel panic ...)."; } } diff --git a/code/Q3DLoader.cpp b/code/Q3DLoader.cpp index 6c61ef9e2..0a0653715 100644 --- a/code/Q3DLoader.cpp +++ b/code/Q3DLoader.cpp @@ -39,7 +39,9 @@ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. --------------------------------------------------------------------------- */ -/** @file Implementation of the Q3D importer class */ +/** @file Q3DLoader.cpp + * @brief Implementation of the Q3D importer class + */ #include "AssimpPCH.h" #ifndef ASSIMP_BUILD_NO_Q3D_IMPORTER @@ -54,30 +56,34 @@ using namespace Assimp; // ------------------------------------------------------------------------------------------------ // Constructor to be privately used by Importer Q3DImporter::Q3DImporter() -{ -} +{} // ------------------------------------------------------------------------------------------------ // Destructor, private as well Q3DImporter::~Q3DImporter() -{ -} +{} // ------------------------------------------------------------------------------------------------ // Returns whether the class can handle the format of the given file. -bool Q3DImporter::CanRead( const std::string& pFile, IOSystem* pIOHandler) const +bool Q3DImporter::CanRead( const std::string& pFile, IOSystem* pIOHandler, bool checkSig) const { - // simple check of file extension is enough for the moment - std::string::size_type pos = pFile.find_last_of('.'); - // no file extension - can't read - if( pos == std::string::npos)return false; + const std::string extension = GetExtension(pFile); - std::string extension = pFile.substr( pos); - for (std::string::iterator it = extension.begin(); - it != extension.end(); ++it) - *it = ::tolower(*it); + if (extension == "q3s" || extension == "q3o") + return true; + else if (!extension.length() || checkSig) { + if (!pIOHandler) + return true; + const char* tokens[] = {"quick3Do","quick3Ds"}; + return SearchFileHeaderForToken(pIOHandler,pFile,tokens,2); + } + return false; +} - return (extension == ".q3o" || extension == ".q3s"); +// ------------------------------------------------------------------------------------------------ +void Q3DImporter::GetExtensionList(std::string& append) +{ + append.append("*.q3o;*.q3s"); } // ------------------------------------------------------------------------------------------------ @@ -91,11 +97,11 @@ void Q3DImporter::InternReadFile( const std::string& pFile, if (stream.GetRemainingSize() < 22) throw new ImportErrorException("File is either empty or corrupt: " + pFile); - // Check the file signature + // Check the file's signature if (ASSIMP_strincmp( (const char*)stream.GetPtr(), "quick3Do", 8 ) && ASSIMP_strincmp( (const char*)stream.GetPtr(), "quick3Ds", 8 )) { - throw new ImportErrorException("No Quick3D file. Signature is: " + + throw new ImportErrorException("Not a Quick3D file. Signature string is: " + std::string((const char*)stream.GetPtr(),8)); } diff --git a/code/Q3DLoader.h b/code/Q3DLoader.h index ca4b0f7d3..a80b978f9 100644 --- a/code/Q3DLoader.h +++ b/code/Q3DLoader.h @@ -38,7 +38,9 @@ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. ---------------------------------------------------------------------- */ -/** @file Declaration of the Q3D importer class. */ +/** @file Q3DLoader.h + * @brief Declaration of the Q3D importer class. + */ #ifndef AI_Q3DLOADER_H_INCLUDED #define AI_Q3DLOADER_H_INCLUDED @@ -67,7 +69,8 @@ public: // ------------------------------------------------------------------- /** Returns whether the class can handle the format of the given file. * See BaseImporter::CanRead() for details. */ - bool CanRead( const std::string& pFile, IOSystem* pIOHandler) const; + bool CanRead( const std::string& pFile, IOSystem* pIOHandler, + bool checkSig) const; protected: @@ -75,10 +78,7 @@ protected: /** Called by Importer::GetExtensionList() for each loaded importer. * See BaseImporter::GetExtensionList() for details */ - void GetExtensionList(std::string& append) - { - append.append("*.q3o;*.q3s"); - } + void GetExtensionList(std::string& append); // ------------------------------------------------------------------- /** Imports the given file into the given scene structure. diff --git a/code/RawLoader.cpp b/code/RawLoader.cpp index 674054183..1a2e89b6d 100644 --- a/code/RawLoader.cpp +++ b/code/RawLoader.cpp @@ -39,7 +39,9 @@ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. --------------------------------------------------------------------------- */ -/** @file Implementation of the RAW importer class */ +/** @file RawLoader.cpp + * @brief Implementation of the RAW importer class + */ #include "AssimpPCH.h" #ifndef ASSIMP_BUILD_NO_RAW_IMPORTER @@ -63,21 +65,16 @@ RAWImporter::~RAWImporter() // ------------------------------------------------------------------------------------------------ // Returns whether the class can handle the format of the given file. -bool RAWImporter::CanRead( const std::string& pFile, IOSystem* pIOHandler) const +bool RAWImporter::CanRead( const std::string& pFile, IOSystem* pIOHandler, bool checkSig) const { - // simple check of file extension is enough for the moment - std::string::size_type pos = pFile.find_last_of('.'); - // no file extension - can't read - if( pos == std::string::npos)return false; - std::string extension = pFile.substr( pos); + return SimpleExtensionCheck(pFile,"raw"); +} - if (extension.length() < 4)return false; - if (extension[0] != '.')return false; - - return !(extension.length() != 4 || extension[0] != '.' || - extension[1] != 'r' && extension[1] != 'R' || - extension[2] != 'a' && extension[2] != 'A' || - extension[3] != 'w' && extension[3] != 'W'); +// ------------------------------------------------------------------------------------------------ +// Get the list of all supported file extensions +void RAWImporter::GetExtensionList(std::string& append) +{ + append.append("*.raw"); } // ------------------------------------------------------------------------------------------------ diff --git a/code/RawLoader.h b/code/RawLoader.h index 2d0366527..f91449246 100644 --- a/code/RawLoader.h +++ b/code/RawLoader.h @@ -38,7 +38,9 @@ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. ---------------------------------------------------------------------- */ -/** @file Declaration of the RAW importer class. */ +/** @file RAWLoader.h + * @brief Declaration of the RAW importer class. + */ #ifndef AI_RAWLOADER_H_INCLUDED #define AI_RAWLOADER_H_INCLUDED @@ -66,8 +68,10 @@ public: // ------------------------------------------------------------------- /** Returns whether the class can handle the format of the given file. - * See BaseImporter::CanRead() for details. */ - bool CanRead( const std::string& pFile, IOSystem* pIOHandler) const; + * See BaseImporter::CanRead() for details. + */ + bool CanRead( const std::string& pFile, IOSystem* pIOHandler, + bool checkSig) const; protected: @@ -75,10 +79,7 @@ protected: /** Called by Importer::GetExtensionList() for each loaded importer. * See BaseImporter::GetExtensionList() for details */ - void GetExtensionList(std::string& append) - { - append.append("*.raw"); - } + void GetExtensionList(std::string& append); // ------------------------------------------------------------------- /** Imports the given file into the given scene structure. diff --git a/code/RemoveRedundantMaterials.cpp b/code/RemoveRedundantMaterials.cpp index 70611a0e8..9132f8552 100644 --- a/code/RemoveRedundantMaterials.cpp +++ b/code/RemoveRedundantMaterials.cpp @@ -38,12 +38,14 @@ THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. --------------------------------------------------------------------------- */ -/** @file Implementation of the "RemoveRedundantMaterials" post processing step +/** @file RemoveRedundantMaterials.cpp + * @brief Implementation of the "RemoveRedundantMaterials" post processing step */ // internal headers #include "AssimpPCH.h" #include "RemoveRedundantMaterials.h" +#include "ParsingUtils.h" using namespace Assimp; @@ -68,6 +70,39 @@ bool RemoveRedundantMatsProcess::IsActive( unsigned int pFlags) const return (pFlags & aiProcess_RemoveRedundantMaterials) != 0; } +// ------------------------------------------------------------------------------------------------ +// Setup import properties +void RemoveRedundantMatsProcess::SetupProperties(const Importer* pImp) +{ + // Get value of AI_CONFIG_PP_RRM_EXCLUDE_LIST + configFixedMaterials = pImp->GetPropertyString(AI_CONFIG_PP_RRM_EXCLUDE_LIST,""); +} + +// ------------------------------------------------------------------------------------------------ +// Extract single strings from a list of identifiers +void ConvertListToStrings(const std::string& in, std::list& out) +{ + const char* s = in.c_str(); + while (*s) { + SkipSpacesAndLineEnd(&s); + if (*s == '\'') { + const char* base = ++s; + while (*s != '\'') { + ++s; + if (*s == '\0') { + DefaultLogger::get()->error("RemoveRedundantMaterials: String list is ill-formatted"); + return; + } + } + out.push_back(std::string(base,(size_t)(s-base))); + ++s; + } + else { + out.push_back(GetNextToken(s)); + } + } +} + // ------------------------------------------------------------------------------------------------ // Executes the post processing step on the given imported data. void RemoveRedundantMatsProcess::Execute( aiScene* pScene) @@ -77,16 +112,49 @@ void RemoveRedundantMatsProcess::Execute( aiScene* pScene) unsigned int iCnt = 0, unreferenced = 0; if (pScene->mNumMaterials) { + // Find out which materials are referenced by meshes + std::vector abReferenced(pScene->mNumMaterials,false); + for (unsigned int i = 0;i < pScene->mNumMeshes;++i) + abReferenced[pScene->mMeshes[i]->mMaterialIndex] = true; + + // If a list of materials to be excluded was given, match the list with + // our imported materials and 'salt' all positive matches to ensure that + // we get unique hashes later. + if (configFixedMaterials.length()) { + + std::list strings; + ConvertListToStrings(configFixedMaterials,strings); + + for (unsigned int i = 0; i < pScene->mNumMaterials;++i) { + aiMaterial* mat = pScene->mMaterials[i]; + + aiString name; + mat->Get(AI_MATKEY_NAME,name); + + if (name.length) { + std::list::const_iterator it = std::find(strings.begin(), strings.end(), name.data); + if (it != strings.end()) { + + // Our brilliant 'salt': A single material property with ~ as first + // character to mark it as internal and temporary. + const int dummy = 1; + ((MaterialHelper*)mat)->AddProperty(&dummy,1,"~RRM.UniqueMaterial",0,0); + + // Keep this material even if no mesh references it + abReferenced[i] = true; + DefaultLogger::get()->debug(std::string("Found positive match in exclusion list: \'") + name.data + "\'"); + } + } + } + } + + // TODO: reimplement this algorithm to work in-place unsigned int* aiMappingTable = new unsigned int[pScene->mNumMaterials]; unsigned int iNewNum = 0; - std::vector abReferenced(pScene->mNumMaterials,false); - for (unsigned int i = 0;i < pScene->mNumMeshes;++i) - abReferenced[pScene->mMeshes[i]->mMaterialIndex] = true; - - // iterate through all materials and calculate a hash for them + // Iterate through all materials and calculate a hash for them // store all hashes in a list and so a quick search whether // we do already have a specific hash. This allows us to // determine which materials are identical. @@ -136,8 +204,7 @@ void RemoveRedundantMatsProcess::Execute( aiScene* pScene) else ppcMaterials[idx] = pScene->mMaterials[p]; } // update all material indices - for (unsigned int p = 0; p < pScene->mNumMeshes;++p) - { + for (unsigned int p = 0; p < pScene->mNumMeshes;++p) { aiMesh* mesh = pScene->mMeshes[p]; mesh->mMaterialIndex = aiMappingTable[mesh->mMaterialIndex]; } diff --git a/code/RemoveRedundantMaterials.h b/code/RemoveRedundantMaterials.h index 4578ddb31..9a6270003 100644 --- a/code/RemoveRedundantMaterials.h +++ b/code/RemoveRedundantMaterials.h @@ -38,7 +38,9 @@ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. ---------------------------------------------------------------------- */ -/** @file Defines a post processing step to remove redundant materials */ +/** @file RemoveRedundantMaterials.h + * @brief Defines a post processing step to remove redundant materials + */ #ifndef AI_REMOVEREDUNDANTMATERIALS_H_INC #define AI_REMOVEREDUNDANTMATERIALS_H_INC @@ -46,12 +48,12 @@ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. #include "../include/aiMesh.h" class RemoveRedundantMatsTest; -namespace Assimp - { +namespace Assimp { // --------------------------------------------------------------------------- -/** RemoveRedundantMatsProcess: Class to remove redundant materials -*/ +/** RemoveRedundantMatsProcess: Postprocessing steo to remove redundant + * materials from the imported scene. + */ class ASSIMP_API RemoveRedundantMatsProcess : public BaseProcess { friend class Importer; @@ -66,19 +68,38 @@ protected: public: // ------------------------------------------------------------------- - /** Returns whether the processing step is present in the given flag field. - * @param pFlags The processing flags the importer was called with. A bitwise - * combination of #aiPostProcessSteps. - * @return true if the process is present in this flag fields, false if not. - */ + // Check whether step is active bool IsActive( unsigned int pFlags) const; // ------------------------------------------------------------------- - /** Executes the post processing step on the given imported data. - * At the moment a process is not supposed to fail. - * @param pScene The imported data to work at. - */ + // Execute step on a given scene void Execute( aiScene* pScene); + + // ------------------------------------------------------------------- + // Setup import settings + void SetupProperties(const Importer* pImp); + + + // ------------------------------------------------------------------- + /** @brief Set list of fixed (unmutable) materials + * @param fixed See #AI_CONFIG_PP_RRM_EXCLUDE_LIST + */ + void SetFixedMaterialsString(const std::string& fixed = "") { + configFixedMaterials = fixed; + } + + // ------------------------------------------------------------------- + /** @brief Get list of fixed (unmutable) materials + * @return See #AI_CONFIG_PP_RRM_EXCLUDE_LIST + */ + const std::string& GetFixedMaterialsString() const { + return configFixedMaterials; + } + +private: + + //! Configuration option: list of all fixed materials + std::string configFixedMaterials; }; } // end of namespace Assimp diff --git a/code/RemoveVCProcess.cpp b/code/RemoveVCProcess.cpp index b6a832b78..23a2eb28e 100644 --- a/code/RemoveVCProcess.cpp +++ b/code/RemoveVCProcess.cpp @@ -51,15 +51,12 @@ using namespace Assimp; // ------------------------------------------------------------------------------------------------ // Constructor to be privately used by Importer RemoveVCProcess::RemoveVCProcess() -{ -} +{} // ------------------------------------------------------------------------------------------------ // Destructor, private as well RemoveVCProcess::~RemoveVCProcess() -{ - // nothing to do here -} +{} // ------------------------------------------------------------------------------------------------ // Returns whether the processing step is present in the given flag field. diff --git a/code/SMDLoader.cpp b/code/SMDLoader.cpp index 0b6eec9c3..226b7f2d0 100644 --- a/code/SMDLoader.cpp +++ b/code/SMDLoader.cpp @@ -39,7 +39,9 @@ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. --------------------------------------------------------------------------- */ -/** @file Implementation of the SMD importer class */ +/** @file SMDLoader.cpp + * @brief Implementation of the SMD importer class + */ #include "AssimpPCH.h" #ifndef ASSIMP_BUILD_NO_SMD_IMPORTER @@ -54,56 +56,37 @@ using namespace Assimp; // ------------------------------------------------------------------------------------------------ // Constructor to be privately used by Importer SMDImporter::SMDImporter() -{ - // nothing to do here -} +{} // ------------------------------------------------------------------------------------------------ // Destructor, private as well SMDImporter::~SMDImporter() -{ - // nothing to do here -} +{} // ------------------------------------------------------------------------------------------------ // Returns whether the class can handle the format of the given file. -bool SMDImporter::CanRead( const std::string& pFile, IOSystem* pIOHandler) const +bool SMDImporter::CanRead( const std::string& pFile, IOSystem* pIOHandler, bool) const { - // simple check of file extension is enough for the moment - std::string::size_type pos = pFile.find_last_of('.'); - // no file extension - can't read - if( pos == std::string::npos) - return false; - std::string extension = pFile.substr( pos); + // fixme: auto format detection + return SimpleExtensionCheck(pFile,"smd","vta"); +} - if (extension.length() < 4)return false; - if (extension[0] != '.')return false; - - // VTA is not really supported as it contains vertex animations. - // However, at least the first keyframe can be loaded - if ((extension[1] != 's' && extension[1] != 'S') || - (extension[2] != 'm' && extension[2] != 'M') || - (extension[3] != 'd' && extension[3] != 'D')) - { - if ((extension[1] != 'v' && extension[1] != 'V') || - (extension[2] != 't' && extension[2] != 'T') || - (extension[3] != 'a' && extension[3] != 'A')) - { - return false; - } - } - return true; +// ------------------------------------------------------------------------------------------------ +// Get a list of all supported file extensions +void SMDImporter::GetExtensionList(std::string& append) +{ + append.append("*.smd;*.vta"); } // ------------------------------------------------------------------------------------------------ // Setup configuration properties void SMDImporter::SetupProperties(const Importer* pImp) { - // The AI_CONFIG_IMPORT_SMD_KEYFRAME option overrides the + // The + // AI_CONFIG_IMPORT_SMD_KEYFRAME option overrides the // AI_CONFIG_IMPORT_GLOBAL_KEYFRAME option. - if(0xffffffff == (configFrameID = pImp->GetPropertyInteger( - AI_CONFIG_IMPORT_SMD_KEYFRAME,0xffffffff))) - { + configFrameID = pImp->GetPropertyInteger(AI_CONFIG_IMPORT_SMD_KEYFRAME,0xffffffff); + if(0xffffffff == configFrameID) { configFrameID = pImp->GetPropertyInteger(AI_CONFIG_IMPORT_GLOBAL_KEYFRAME,0); } } diff --git a/code/SMDLoader.h b/code/SMDLoader.h index b5e9f12bb..e3f863df4 100644 --- a/code/SMDLoader.h +++ b/code/SMDLoader.h @@ -38,10 +38,9 @@ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. ---------------------------------------------------------------------- */ - -//! -//! @file Definition of SMD importer class -//! +/** @file SMDLoader.h + * @brief Defintion of the Valve SMD file format + */ #ifndef AI_SMDLOADER_H_INCLUDED #define AI_SMDLOADER_H_INCLUDED @@ -186,14 +185,16 @@ public: // ------------------------------------------------------------------- /** Returns whether the class can handle the format of the given file. - * See BaseImporter::CanRead() for details. */ - bool CanRead( const std::string& pFile, IOSystem* pIOHandler) const; + * See BaseImporter::CanRead() for details. + */ + bool CanRead( const std::string& pFile, IOSystem* pIOHandler, + bool checkSig) const; // ------------------------------------------------------------------- /** Called prior to ReadFile(). - * The function is a request to the importer to update its configuration - * basing on the Importer's configuration property list. - */ + * The function is a request to the importer to update its configuration + * basing on the Importer's configuration property list. + */ void SetupProperties(const Importer* pImp); protected: @@ -203,10 +204,7 @@ protected: /** Called by Importer::GetExtensionList() for each loaded importer. * See BaseImporter::GetExtensionList() for details */ - void GetExtensionList(std::string& append) - { - append.append("*.smd;*.vta"); - } + void GetExtensionList(std::string& append); // ------------------------------------------------------------------- /** Imports the given file into the given scene structure. diff --git a/code/STLLoader.cpp b/code/STLLoader.cpp index 8e96a0157..60baf3ce7 100644 --- a/code/STLLoader.cpp +++ b/code/STLLoader.cpp @@ -64,27 +64,31 @@ STLImporter::~STLImporter() // ------------------------------------------------------------------------------------------------ // Returns whether the class can handle the format of the given file. -bool STLImporter::CanRead( const std::string& pFile, IOSystem* pIOHandler) const +bool STLImporter::CanRead( const std::string& pFile, IOSystem* pIOHandler, bool checkSig) const { - // simple check of file extension is enough for the moment - std::string::size_type pos = pFile.find_last_of('.'); - // no file extension - can't read - if( pos == std::string::npos)return false; - std::string extension = pFile.substr( pos); + const std::string extension = GetExtension(pFile); - if (extension.length() < 4)return false; - if (extension[0] != '.')return false; - - if (extension[1] != 's' && extension[1] != 'S')return false; - if (extension[2] != 't' && extension[2] != 'T')return false; - if (extension[3] != 'l' && extension[3] != 'L')return false; - - return true; + if (extension == "stl") + return true; + else if (!extension.length() || checkSig) { + if (!pIOHandler) + return true; + const char* tokens[] = {"STL","solid"}; + return SearchFileHeaderForToken(pIOHandler,pFile,tokens,2); + } + return false; } + +// ------------------------------------------------------------------------------------------------ +void STLImporter::GetExtensionList(std::string& append) +{ + append.append("*.stl"); +} + // ------------------------------------------------------------------------------------------------ // Imports the given file into the given scene structure. void STLImporter::InternReadFile( - const std::string& pFile, aiScene* pScene, IOSystem* pIOHandler) + const std::string& pFile, aiScene* pScene, IOSystem* pIOHandler) { boost::scoped_ptr file( pIOHandler->Open( pFile, "rb")); @@ -183,7 +187,7 @@ void STLImporter::LoadASCIIFile() pMesh->mVertices = new aiVector3D[pMesh->mNumVertices]; pMesh->mNormals = new aiVector3D[pMesh->mNumVertices]; - unsigned int curFace = 0, curVertex = 0; + unsigned int curFace = 0, curVertex = 3; while (true) { // go to the next token diff --git a/code/STLLoader.h b/code/STLLoader.h index a89d551d9..4a59736de 100644 --- a/code/STLLoader.h +++ b/code/STLLoader.h @@ -38,7 +38,9 @@ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. ---------------------------------------------------------------------- */ -/** @file Declaration of the STL importer class. */ +/** @file STLLoader.h + * Declaration of the STL importer class. + */ #ifndef AI_STLLOADER_H_INCLUDED #define AI_STLLOADER_H_INCLUDED @@ -48,7 +50,7 @@ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. namespace Assimp { // --------------------------------------------------------------------------- -/** Clas to load STL files +/** Importer class for the sterolithography STL file format */ class STLImporter : public BaseImporter { @@ -65,8 +67,10 @@ public: // ------------------------------------------------------------------- /** Returns whether the class can handle the format of the given file. - * See BaseImporter::CanRead() for details. */ - bool CanRead( const std::string& pFile, IOSystem* pIOHandler) const; + * See BaseImporter::CanRead() for details. + */ + bool CanRead( const std::string& pFile, IOSystem* pIOHandler, + bool checkSig) const; protected: @@ -74,10 +78,7 @@ protected: /** Called by Importer::GetExtensionList() for each loaded importer. * See BaseImporter::GetExtensionList() for details */ - void GetExtensionList(std::string& append) - { - append.append("*.stl"); - } + void GetExtensionList(std::string& append); // ------------------------------------------------------------------- /** Imports the given file into the given scene structure. diff --git a/code/SceneCombiner.cpp b/code/SceneCombiner.cpp index 1d426e201..97e3a790f 100644 --- a/code/SceneCombiner.cpp +++ b/code/SceneCombiner.cpp @@ -74,40 +74,6 @@ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. namespace Assimp { -// ------------------------------------------------------------------------------------------------ -/** This is a small helper data structure simplifying our work - */ -struct SceneHelper -{ - SceneHelper () - : scene (NULL) - , idlen (0) - { - id[0] = 0; - } - - SceneHelper (aiScene* _scene) - : scene (_scene) - , idlen (0) - { - id[0] = 0; - } - - AI_FORCE_INLINE aiScene* operator-> () const - { - return scene; - } - - // scene we're working on - aiScene* scene; - - // prefix to be added to all identifiers in the scene ... - char id [32]; - - // and its strlen() - unsigned int idlen; -}; - // ------------------------------------------------------------------------------------------------ // Add a prefix to a string inline void PrefixString(aiString& string,const char* prefix, unsigned int len) @@ -124,6 +90,21 @@ inline void PrefixString(aiString& string,const char* prefix, unsigned int len) string.length += len; } +// ------------------------------------------------------------------------------------------------ +// Add node identifiers to a hashing set +void SceneCombiner::AddNodeHashes(aiNode* node, std::set& hashes) +{ + // Add node name to hashing set if it is non-empty - empty nodes are allowed + // and they can't have any anims assigned so its absolutely safe to duplicate them. + if (node->mName.length) { + hashes.insert( SuperFastHash(node->mName.data,node->mName.length) ); + } + + // Process all children recursively + for (unsigned int i = 0; i < node->mNumChildren;++i) + AddNodeHashes(node->mChildren[i],hashes); +} + // ------------------------------------------------------------------------------------------------ // Add a name prefix to all nodes in a hierarchy void SceneCombiner::AddNodePrefixes(aiNode* node, const char* prefix, unsigned int len) @@ -136,6 +117,44 @@ void SceneCombiner::AddNodePrefixes(aiNode* node, const char* prefix, unsigned i AddNodePrefixes(node->mChildren[i],prefix,len); } +// ------------------------------------------------------------------------------------------------ +// Search for matching names +bool SceneCombiner::FindNameMatch(const aiString& name, std::vector& input, unsigned int cur) +{ + const unsigned int hash = SuperFastHash(name.data, name.length); + + // Check whether we find a positive match in one of the given sets + for (unsigned int i = 0; i < input.size(); ++i) { + + if (cur != i && input[i].hashes.find(hash) != input[i].hashes.end()) { + return true; + } + } + return false; +} + +// ------------------------------------------------------------------------------------------------ +// Add a name prefix to all nodes in a hierarchy if a hash match is found +void SceneCombiner::AddNodePrefixesChecked(aiNode* node, const char* prefix, unsigned int len, + std::vector& input, unsigned int cur) +{ + ai_assert(NULL != prefix); + const unsigned int hash = SuperFastHash(node->mName.data,node->mName.length); + + // Check whether we find a positive match in one of the given sets + for (unsigned int i = 0; i < input.size(); ++i) { + + if (cur != i && input[i].hashes.find(hash) != input[i].hashes.end()) { + PrefixString(node->mName,prefix,len); + break; + } + } + + // Process all children recursively + for (unsigned int i = 0; i < node->mNumChildren;++i) + AddNodePrefixesChecked(node->mChildren[i],prefix,len,input,cur); +} + // ------------------------------------------------------------------------------------------------ // Add an offset to all mesh indices in a node graph void SceneCombiner::OffsetNodeMeshIndices (aiNode* node, unsigned int offset) @@ -300,6 +319,20 @@ void SceneCombiner::MergeScenes(aiScene** _dest, aiScene* master, const unsigned int random = rndGen(); src[i].idlen = ::sprintf(src[i].id,"$%.6X$_",random); + + if (flags & AI_INT_MERGE_SCENE_GEN_UNIQUE_NAMES_IF_NECESSARY) { + + // Compute hashes for all identifiers in this scene and store them + // in a sorted table (for convenience I'm using std::set). We hash + // just the node and animation channel names, all identifiers except + // the material names should be caught by doing this. + AddNodeHashes(src[i]->mRootNode,src[i].hashes); + + for (unsigned int a = 0; a < src[i]->mNumAnimations;++a) { + aiAnimation* anim = src[i]->mAnimations[a]; + src[i].hashes.insert(SuperFastHash(anim->mName.data,anim->mName.length)); + } + } } } @@ -321,7 +354,11 @@ void SceneCombiner::MergeScenes(aiScene** _dest, aiScene* master, dest->mNumAnimations += (*cur)->mNumAnimations; // Combine the flags of all scenes - dest->mFlags |= (*cur)->mFlags; + // We need to process them flag-by-flag here to get correct results + // dest->mFlags ; //|= (*cur)->mFlags; + if ((*cur)->mFlags & AI_SCENE_FLAGS_NON_VERBOSE_FORMAT) { + dest->mFlags |= AI_SCENE_FLAGS_NON_VERBOSE_FORMAT; + } } // generate the output texture list + an offset table for all texture indices @@ -352,11 +389,10 @@ void SceneCombiner::MergeScenes(aiScene** _dest, aiScene* master, // generate the output material list + an offset table for all material indices if (dest->mNumMaterials) - { + { aiMaterial** pip = dest->mMaterials = new aiMaterial*[dest->mNumMaterials]; cnt = 0; - for ( unsigned int n = 0; n < src.size();++n ) - { + for ( unsigned int n = 0; n < src.size();++n ) { SceneHelper* cur = &src[n]; for (unsigned int i = 0; i < (*cur)->mNumMaterials;++i) { @@ -369,8 +405,7 @@ void SceneCombiner::MergeScenes(aiScene** _dest, aiScene* master, } else *pip = (*cur)->mMaterials[i]; - if ((*cur)->mNumTextures != dest->mNumTextures) - { + if ((*cur)->mNumTextures != dest->mNumTextures) { // We need to update all texture indices of the mesh. So we need to search for // a material property called '$tex.file' @@ -391,8 +426,7 @@ void SceneCombiner::MergeScenes(aiScene** _dest, aiScene* master, } // Need to generate new, unique material names? - else if (!::strcmp( prop->mKey.data,"$mat.name" ) && - flags & AI_INT_MERGE_SCENE_GEN_UNIQUE_MATNAMES) + else if (!::strcmp( prop->mKey.data,"$mat.name" ) && flags & AI_INT_MERGE_SCENE_GEN_UNIQUE_MATNAMES) { aiString* pcSrc = (aiString*) prop->mData; PrefixString(*pcSrc, (*cur).id, (*cur).idlen); @@ -458,7 +492,7 @@ void SceneCombiner::MergeScenes(aiScene** _dest, aiScene* master, aiAnimation** ppAnims = dest->mAnimations = (dest->mNumAnimations ? new aiAnimation*[dest->mNumAnimations] : NULL); - for ( unsigned int n = 0; n < src.size();++n ) + for ( int n = src.size()-1; n >= 0 ;--n ) /* !!! important !!! */ { SceneHelper* cur = &src[n]; aiNode* node; @@ -466,7 +500,9 @@ void SceneCombiner::MergeScenes(aiScene** _dest, aiScene* master, // To offset or not to offset, this is the question if (n != duplicates[n]) { + // Get full scenegraph copy Copy( &node, (*cur)->mRootNode ); + OffsetNodeMeshIndices(node,offset[duplicates[n]]); if (flags & AI_INT_MERGE_SCENE_DUPLICATES_DEEP_CPY) { // (note:) they are already 'offseted' by offset[duplicates[n]] @@ -481,6 +517,30 @@ void SceneCombiner::MergeScenes(aiScene** _dest, aiScene* master, if (n) // src[0] is the master node nodes.push_back(NodeAttachmentInfo( node,srcList[n-1].attachToNode,n )); + // add name prefixes? + if (flags & AI_INT_MERGE_SCENE_GEN_UNIQUE_NAMES) { + + // or the whole scenegraph + if (flags & AI_INT_MERGE_SCENE_GEN_UNIQUE_NAMES_IF_NECESSARY) { + AddNodePrefixesChecked(node,(*cur).id,(*cur).idlen,src,n); + } + else AddNodePrefixes(node,(*cur).id,(*cur).idlen); + + // meshes + for (unsigned int i = 0; i < (*cur)->mNumMeshes;++i) { + aiMesh* mesh = (*cur)->mMeshes[i]; + + // rename all bones + for (unsigned int a = 0; a < mesh->mNumBones;++a) { + if (flags & AI_INT_MERGE_SCENE_GEN_UNIQUE_NAMES_IF_NECESSARY) { + if (!FindNameMatch(mesh->mBones[a]->mName,src,n)) + continue; + } + PrefixString(mesh->mBones[a]->mName,(*cur).id,(*cur).idlen); + } + } + } + // -------------------------------------------------------------------- // Copy light sources for (unsigned int i = 0; i < (*cur)->mNumLights;++i,++ppLights) @@ -490,6 +550,17 @@ void SceneCombiner::MergeScenes(aiScene** _dest, aiScene* master, Copy(ppLights, (*cur)->mLights[i]); } else *ppLights = (*cur)->mLights[i]; + + + // Add name prefixes? + if (flags & AI_INT_MERGE_SCENE_GEN_UNIQUE_NAMES) { + if (flags & AI_INT_MERGE_SCENE_GEN_UNIQUE_NAMES_IF_NECESSARY) { + if (!FindNameMatch((*ppLights)->mName,src,n)) + continue; + } + + PrefixString((*ppLights)->mName,(*cur).id,(*cur).idlen); + } } // -------------------------------------------------------------------- @@ -500,6 +571,16 @@ void SceneCombiner::MergeScenes(aiScene** _dest, aiScene* master, Copy(ppCameras, (*cur)->mCameras[i]); } else *ppCameras = (*cur)->mCameras[i]; + + // Add name prefixes? + if (flags & AI_INT_MERGE_SCENE_GEN_UNIQUE_NAMES) { + if (flags & AI_INT_MERGE_SCENE_GEN_UNIQUE_NAMES_IF_NECESSARY) { + if (!FindNameMatch((*ppCameras)->mName,src,n)) + continue; + } + + PrefixString((*ppCameras)->mName,(*cur).id,(*cur).idlen); + } } // -------------------------------------------------------------------- @@ -510,30 +591,26 @@ void SceneCombiner::MergeScenes(aiScene** _dest, aiScene* master, Copy(ppAnims, (*cur)->mAnimations[i]); } else *ppAnims = (*cur)->mAnimations[i]; - } - } - for ( unsigned int n = 1; n < src.size();++n ) { - SceneHelper* cur = &src[n]; - // -------------------------------------------------------------------- - // Add prefixes - if (flags & AI_INT_MERGE_SCENE_GEN_UNIQUE_NAMES) - { - for (unsigned int i = 0; i < (*cur)->mNumLights;++i) - PrefixString(dest->mLights[i]->mName,(*cur).id,(*cur).idlen); + // Add name prefixes? + if (flags & AI_INT_MERGE_SCENE_GEN_UNIQUE_NAMES) { + if (flags & AI_INT_MERGE_SCENE_GEN_UNIQUE_NAMES_IF_NECESSARY) { + if (!FindNameMatch((*ppAnims)->mName,src,n)) + continue; + } - for (unsigned int i = 0; i < (*cur)->mNumCameras;++i) - PrefixString(dest->mCameras[i]->mName,(*cur).id,(*cur).idlen); - - for (unsigned int i = 0; i < (*cur)->mNumAnimations;++i) { - aiAnimation* anim = dest->mAnimations[i]; - PrefixString(anim->mName,(*cur).id,(*cur).idlen); + PrefixString((*ppAnims)->mName,(*cur).id,(*cur).idlen); // don't forget to update all node animation channels - for (unsigned int a = 0; a < anim->mNumChannels;++a) - PrefixString(anim->mChannels[a]->mNodeName,(*cur).id,(*cur).idlen); + for (unsigned int a = 0; a < (*ppAnims)->mNumChannels;++a) { + if (flags & AI_INT_MERGE_SCENE_GEN_UNIQUE_NAMES_IF_NECESSARY) { + if (!FindNameMatch((*ppAnims)->mChannels[a]->mNodeName,src,n)) + continue; + } + + PrefixString((*ppAnims)->mChannels[a]->mNodeName,(*cur).id,(*cur).idlen); + } } - AddNodePrefixes(nodes[n-1].node,(*cur).id,(*cur).idlen); } } @@ -585,6 +662,11 @@ void SceneCombiner::MergeScenes(aiScene** _dest, aiScene* master, delete deleteMe; } + // Check flags + if (!dest->mNumMeshes || !dest->mNumMaterials) { + dest->mFlags |= AI_SCENE_FLAGS_INCOMPLETE; + } + // We're finished } @@ -605,10 +687,8 @@ void SceneCombiner::BuildUniqueBoneList(std::list& asBones, std::list::iterator it2 = asBones.begin(); std::list::iterator end2 = asBones.end(); - for (;it2 != end2;++it2) - { - if ((*it2).first == itml) - { + for (;it2 != end2;++it2) { + if ((*it2).first == itml) { (*it2).pSrcBones.push_back(BoneSrcIndex(p,iOffset)); break; } @@ -666,10 +746,7 @@ void SceneCombiner::MergeBones(aiMesh* out,std::vector::const_iterator if (wmit != (*it).pSrcBones.begin() && pc->mOffsetMatrix != (*wmit).first->mOffsetMatrix) { - DefaultLogger::get()->warn("Bones with equal names but different " - "offset matrices can't be joined at the moment. If this causes " - "problems, deactivate the OptimizeGraph-Step"); - + DefaultLogger::get()->warn("Bones with equal names but different offset matrices can't be joined at the moment"); continue; } pc->mOffsetMatrix = (*wmit).first->mOffsetMatrix; @@ -1026,7 +1103,7 @@ void SceneCombiner::Copy (aiAnimation** _dest, const aiAnimation* src) ::memcpy(dest,src,sizeof(aiAnimation)); // and reallocate all arrays - GetArrayCopy( dest->mChannels, dest->mNumChannels ); + CopyPtrArray( dest->mChannels, src->mChannels, dest->mNumChannels ); } // ------------------------------------------------------------------------------------------------ diff --git a/code/SceneCombiner.h b/code/SceneCombiner.h index 769403bfa..497224d03 100644 --- a/code/SceneCombiner.h +++ b/code/SceneCombiner.h @@ -118,7 +118,7 @@ struct NodeAttachmentInfo /** @def AI_INT_MERGE_SCENE_GEN_UNIQUE_NAMES_IF_NECESSARY * Can be combined with AI_INT_MERGE_SCENE_GEN_UNIQUE_NAMES. * Unique names are generated, but only if this is absolutely - * required (if there would be conflicts otherwuse.) + * required to avoid name conflicts. */ #define AI_INT_MERGE_SCENE_GEN_UNIQUE_NAMES_IF_NECESSARY 0x10 @@ -133,6 +133,43 @@ struct BoneWithHash : public std::pair { }; +// --------------------------------------------------------------------------- +/** @brief Utility for SceneCombiner + */ +struct SceneHelper +{ + SceneHelper () + : scene (NULL) + , idlen (0) + { + id[0] = 0; + } + + SceneHelper (aiScene* _scene) + : scene (_scene) + , idlen (0) + { + id[0] = 0; + } + + AI_FORCE_INLINE aiScene* operator-> () const + { + return scene; + } + + // scene we're working on + aiScene* scene; + + // prefix to be added to all identifiers in the scene ... + char id [32]; + + // and its strlen() + unsigned int idlen; + + // hash table to quickly check whether a name is contained in the scene + std::set hashes; +}; + // --------------------------------------------------------------------------- /** \brief Static helper class providing various utilities to merge two * scenes. It is intended as internal utility and NOT for use by @@ -301,6 +338,26 @@ public: // recursive, of course static void Copy (aiNode** dest, const aiNode* src); + + +private: + + // ------------------------------------------------------------------- + // Same as AddNodePrefixes, but with an additional check + static void AddNodePrefixesChecked(aiNode* node, const char* prefix, + unsigned int len, + std::vector& input, + unsigned int cur); + + // ------------------------------------------------------------------- + // Add node identifiers to a hashing set + static void AddNodeHashes(aiNode* node, std::set& hashes); + + + // ------------------------------------------------------------------- + // Search for duplicate names + static bool FindNameMatch(const aiString& name, + std::vector& input, unsigned int cur); }; } diff --git a/code/ScenePreprocessor.cpp b/code/ScenePreprocessor.cpp index 384b7c9b5..e678cc602 100644 --- a/code/ScenePreprocessor.cpp +++ b/code/ScenePreprocessor.cpp @@ -64,26 +64,56 @@ void ScenePreprocessor::ProcessScene () // Generate a default material if none was specified if (!scene->mNumMaterials && scene->mNumMeshes) { - scene->mMaterials = new aiMaterial*[scene->mNumMaterials = 1]; - MaterialHelper* helper = new MaterialHelper(); - scene->mMaterials[0] = helper; + scene->mMaterials = new aiMaterial*[2]; + MaterialHelper* helper; - // gray - aiColor3D clr(0.6f,0.6f,0.6f); - helper->AddProperty(&clr,1,AI_MATKEY_COLOR_DIFFUSE); + aiString name; - // add a small ambient color value - clr = aiColor3D(0.05f,0.05f,0.05f); - helper->AddProperty(&clr,1,AI_MATKEY_COLOR_AMBIENT); + // Check whether there are meshes with at least one set of uv coordinates ... add a dummy texture for them + // meshes without texture coordinates receive a boring gray default material. + unsigned int mat0 = 0xffffffff, mat1 = 0xffffffff; + for (unsigned int i = 0; i < scene->mNumMeshes;++i) { + if (scene->mMeshes[i]->mTextureCoords[0]) { - // setup the default name - aiString name(AI_DEFAULT_MATERIAL_NAME); - helper->AddProperty(&name,AI_MATKEY_NAME); + if (mat0 == 0xffffffff) { + scene->mMaterials[scene->mNumMaterials] = helper = new MaterialHelper(); - for (unsigned int i = 0; i < scene->mNumMeshes;++i) - scene->mMeshes[i]->mMaterialIndex = 0; + // dummy texture + name.Set("texture.png"); + helper->AddProperty(&name,AI_MATKEY_TEXTURE_DIFFUSE(0)); - DefaultLogger::get()->debug("ScenePreprocessor: Added default material \'" AI_DEFAULT_MATERIAL_NAME "\'"); + // setup default name + name.Set(AI_DEFAULT_TEXTURED_MATERIAL_NAME); + helper->AddProperty(&name,AI_MATKEY_NAME); + + mat0 = scene->mNumMaterials++; + DefaultLogger::get()->debug("ScenePreprocessor: Adding textured material \'" AI_DEFAULT_TEXTURED_MATERIAL_NAME "\'"); + } + scene->mMeshes[i]->mMaterialIndex = mat0; + } + else + { + if (mat1 == 0xffffffff) { + scene->mMaterials[scene->mNumMaterials] = helper = new MaterialHelper(); + + // gray + aiColor3D clr(0.6f,0.6f,0.6f); + helper->AddProperty(&clr,1,AI_MATKEY_COLOR_DIFFUSE); + + // add a small ambient color value + clr = aiColor3D(0.05f,0.05f,0.05f); + helper->AddProperty(&clr,1,AI_MATKEY_COLOR_AMBIENT); + + // setup the default name + name.Set(AI_DEFAULT_MATERIAL_NAME); + helper->AddProperty(&name,AI_MATKEY_NAME); + + mat1 = scene->mNumMaterials++; + DefaultLogger::get()->debug("ScenePreprocessor: Adding grey material \'" AI_DEFAULT_MATERIAL_NAME "\'"); + } + scene->mMeshes[i]->mMaterialIndex = mat1; + } + } } } @@ -96,8 +126,22 @@ void ScenePreprocessor::ProcessMesh (aiMesh* mesh) if (!mesh->mTextureCoords[i]) mesh->mNumUVComponents[i] = 0; - else if( !mesh->mNumUVComponents[i]) - mesh->mNumUVComponents[i] = 2; + else { + if( !mesh->mNumUVComponents[i]) + mesh->mNumUVComponents[i] = 2; + + // Ensure unsued components are zeroed. This will make 1D texture channels work + // as if they were 2D channels .. just in case an application doesn't handle + // this case + if (2 == mesh->mNumUVComponents[i]) { + for (aiVector3D* p = mesh->mTextureCoords[i], *end = p+mesh->mNumVertices; p != end; ++p) + p->z = 0.f; + } + else if (1 == mesh->mNumUVComponents[i]) { + for (aiVector3D* p = mesh->mTextureCoords[i], *end = p+mesh->mNumVertices; p != end; ++p) + p->z = p->y = 0.f; + } + } } // If the information which primitive types are there in the @@ -127,6 +171,15 @@ void ScenePreprocessor::ProcessMesh (aiMesh* mesh) } } } + + // If tangents and normals are given but no bitangents compute them + if (mesh->mTangents && mesh->mNormals && !mesh->mBitangents) + { + mesh->mBitangents = new aiVector3D[mesh->mNumVertices]; + for (unsigned int i = 0; i < mesh->mNumVertices;++i) { + mesh->mBitangents[i] = mesh->mNormals[i] ^ mesh->mTangents[i]; + } + } } // --------------------------------------------------------------------------------------------- diff --git a/code/SkeletonMeshBuilder.cpp b/code/SkeletonMeshBuilder.cpp index e411720f5..776ddb260 100644 --- a/code/SkeletonMeshBuilder.cpp +++ b/code/SkeletonMeshBuilder.cpp @@ -120,11 +120,12 @@ void SkeletonMeshBuilder::CreateGeometry( const aiNode* pNode) mFaces.push_back( Face( localVertexStart + 6, localVertexStart + 7, localVertexStart + 8)); mFaces.push_back( Face( localVertexStart + 9, localVertexStart + 10, localVertexStart + 11)); } - } else + } + else { // if the node has no children, it's an end node. Put a little knob there instead aiVector3D ownpos( pNode->mTransformation.a4, pNode->mTransformation.b4, pNode->mTransformation.c4); - float sizeEstimate = ownpos.Length() * 0.2f; + float sizeEstimate = ownpos.Length() * 0.18f; mVertices.push_back( aiVector3D( -sizeEstimate, 0.0f, 0.0f)); mVertices.push_back( aiVector3D( 0.0f, sizeEstimate, 0.0f)); diff --git a/code/SortByPTypeProcess.cpp b/code/SortByPTypeProcess.cpp index 9b7bbbbde..279aa5651 100644 --- a/code/SortByPTypeProcess.cpp +++ b/code/SortByPTypeProcess.cpp @@ -303,7 +303,7 @@ void SortByPTypeProcess::Execute( aiScene* pScene) if (vert) { *vert++ = mesh->mVertices[idx]; - //mesh->mVertices[idx].x = std::numeric_limits::quiet_NaN(); + //mesh->mVertices[idx].x = get_qnan(); } if (nor )*nor++ = mesh->mNormals[idx]; if (tan ) diff --git a/code/SpatialSort.cpp b/code/SpatialSort.cpp index ecf3048c2..4d4da7908 100644 --- a/code/SpatialSort.cpp +++ b/code/SpatialSort.cpp @@ -75,7 +75,7 @@ void SpatialSort::Fill( const aiVector3D* pPositions, unsigned int pNumPositions for( unsigned int a = 0; a < pNumPositions; a++) { const char* tempPointer = reinterpret_cast (pPositions); - const aiVector3D* vec = reinterpret_cast (tempPointer + a * pElementOffset); + const aiVector3D* vec = reinterpret_cast (tempPointer + a * pElementOffset); // store position by index and distance float distance = *vec * mPlaneNormal; @@ -90,8 +90,8 @@ void SpatialSort::Fill( const aiVector3D* pPositions, unsigned int pNumPositions // Returns an iterator for all positions close to the given position. void SpatialSort::FindPositions( const aiVector3D& pPosition, float pRadius, std::vector& poResults) const { - float dist = pPosition * mPlaneNormal; - float minDist = dist - pRadius, maxDist = dist + pRadius; + const float dist = pPosition * mPlaneNormal; + const float minDist = dist - pRadius, maxDist = dist + pRadius; // clear the array in this strange fashion because a simple clear() would also deallocate // the array which we want to avoid @@ -128,10 +128,10 @@ void SpatialSort::FindPositions( const aiVector3D& pPosition, float pRadius, std // Mow start iterating from there until the first position lays outside of the distance range. // Add all positions inside the distance range within the given radius to the result aray std::vector::const_iterator it = mPositions.begin() + index; - float squareEpsilon = pRadius * pRadius; + const float pSquared = pRadius*pRadius; while( it->mDistance < maxDist) { - if( (it->mPosition - pPosition).SquareLength() < squareEpsilon) + if( (it->mPosition - pPosition).SquareLength() < pSquared) poResults.push_back( it->mIndex); ++it; if( it == mPositions.end()) diff --git a/code/StreamReader.h b/code/StreamReader.h index 64ab2739c..143ec9957 100644 --- a/code/StreamReader.h +++ b/code/StreamReader.h @@ -68,13 +68,15 @@ public: * The stream will be deleted afterwards. * @param stream Input stream */ - StreamReader(IOStream* stream) + StreamReader(IOStream* _stream) { - ai_assert(NULL != stream); - this->stream = stream; + if (!_stream) + throw new ImportErrorException("StreamReader: Unable to open file"); + stream = _stream; size_t s = stream->FileSize(); - if (!s)throw new ImportErrorException("File is empty"); + if (!s) + throw new ImportErrorException("StreamReader: File is empty"); current = buffer = new int8_t[s]; stream->Read(current,s,1); diff --git a/code/StringComparison.h b/code/StringComparison.h index 6b919506e..18e316b28 100644 --- a/code/StringComparison.h +++ b/code/StringComparison.h @@ -89,7 +89,7 @@ inline unsigned int ASSIMP_itoa10( char* out, unsigned int max, int32_t number) *out++ = lookup[digit]; ++written; - number -= digit*10; + number -= digit*cur; } cur /= 10; } diff --git a/code/TerragenLoader.cpp b/code/TerragenLoader.cpp index 4f336777a..8f4907398 100644 --- a/code/TerragenLoader.cpp +++ b/code/TerragenLoader.cpp @@ -51,6 +51,7 @@ using namespace Assimp; // ------------------------------------------------------------------------------------------------ // Constructor to be privately used by Importer TerragenImporter::TerragenImporter() +: configComputeUVs (false) {} // ------------------------------------------------------------------------------------------------ @@ -60,19 +61,24 @@ TerragenImporter::~TerragenImporter() // ------------------------------------------------------------------------------------------------ // Returns whether the class can handle the format of the given file. -bool TerragenImporter::CanRead( const std::string& pFile, IOSystem* pIOHandler) const +bool TerragenImporter::CanRead( const std::string& pFile, IOSystem* pIOHandler, bool checkSig) const { - // simple check of file extension is enough for the moment - std::string::size_type pos = pFile.find_last_of('.'); + // check file extension + std::string extension = GetExtension(pFile); + + if( extension == "ter") + return true; - // no file extension - can't read - if( pos == std::string::npos)return false; - std::string extension = pFile.substr( pos); - - for( std::string::iterator it = extension.begin(); it != extension.end(); ++it) - *it = tolower( *it); - - return extension == ".ter"; + if( !extension.length() || checkSig) { + /* If CanRead() is called in order to check whether we + * support a specific file extension in general pIOHandler + * might be NULL and it's our duty to return true here. + */ + if (!pIOHandler)return true; + const char* tokens[] = {"terragen"}; + return SearchFileHeaderForToken(pIOHandler,pFile,tokens,1); + } + return false; } // ------------------------------------------------------------------------------------------------ @@ -82,6 +88,14 @@ void TerragenImporter::GetExtensionList(std::string& append) append.append("*.ter;"); } +// ------------------------------------------------------------------------------------------------ +// Setup import properties +void TerragenImporter::SetupProperties(const Importer* pImp) +{ + // AI_CONFIG_IMPORT_TER_MAKE_UVS + configComputeUVs = ( 0 != pImp->GetPropertyInteger(AI_CONFIG_IMPORT_TER_MAKE_UVS,0) ); +} + // ------------------------------------------------------------------------------------------------ // Imports the given file into the given scene structure. void TerragenImporter::InternReadFile( const std::string& pFile, @@ -182,7 +196,14 @@ void TerragenImporter::InternReadFile( const std::string& pFile, // We return quads aiFace* f = m->mFaces = new aiFace[m->mNumFaces = (x-1)*(y-1)]; aiVector3D* pv = m->mVertices = new aiVector3D[m->mNumVertices = m->mNumFaces*4]; - + + aiVector3D* uv; + float step_y,step_x; + if (configComputeUVs) { + uv = m->mTextureCoords[0] = new aiVector3D[m->mNumVertices]; + step_y = 1.f/y; + step_x = 1.f/x; + } const int16_t* data = (const int16_t*)reader.GetPtr(); for (unsigned int yy = 0, t = 0; yy < y-1;++yy) { @@ -196,6 +217,14 @@ void TerragenImporter::InternReadFile( const std::string& pFile, *pv++ = aiVector3D(fx+1,fy+1,(float)data[tmp + xx+1] * hscale + bheight); *pv++ = aiVector3D(fx+1,fy, (float)data[tmp2 + xx+1] * hscale + bheight); + // also make texture coordinates, if necessary + if (configComputeUVs) { + *uv++ = aiVector3D( step_x*xx, step_y*yy, 0.f ); + *uv++ = aiVector3D( step_x*xx, step_y*(yy+1), 0.f ); + *uv++ = aiVector3D( step_x*(xx+1), step_y*(yy+1), 0.f ); + *uv++ = aiVector3D( step_x*(xx+1), step_y*yy, 0.f ); + } + // make indices f->mIndices = new unsigned int[f->mNumIndices = 4]; for (unsigned int i = 0; i < 4;++i) diff --git a/code/TerragenLoader.h b/code/TerragenLoader.h index 7567d6be6..8e84cf5e8 100644 --- a/code/TerragenLoader.h +++ b/code/TerragenLoader.h @@ -38,7 +38,9 @@ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. ---------------------------------------------------------------------- */ -/** @file Declaration of the .ter importer class. */ +/** @file TerragenLoader.h + * @brief Declaration of the .ter importer class. + */ #ifndef INCLUDED_AI_TERRAGEN_TERRAIN_LOADER_H #define INCLUDED_AI_TERRAGEN_TERRAIN_LOADER_H @@ -79,29 +81,25 @@ protected: public: // ------------------------------------------------------------------- - /** @brief Returns whether we can handle the format of the given file - * - * See BaseImporter::CanRead() for details. - **/ - bool CanRead( const std::string& pFile, IOSystem* pIOHandler) const; + bool CanRead( const std::string& pFile, IOSystem* pIOHandler, + bool checkSig) const; protected: // ------------------------------------------------------------------- - /** @brief Called by Importer::GetExtensionList() - * - * See BaseImporter::GetExtensionList() for details - */ void GetExtensionList(std::string& append); // ------------------------------------------------------------------- - /** @brief Imports the given file into the given scene structure. - * - * See BaseImporter::InternReadFile() for details - */ void InternReadFile( const std::string& pFile, aiScene* pScene, IOSystem* pIOHandler); + // ------------------------------------------------------------------- + void SetupProperties(const Importer* pImp); + +private: + + bool configComputeUVs; + }; //! class TerragenImporter } // end of namespace Assimp diff --git a/code/UnrealLoader.cpp b/code/UnrealLoader.cpp new file mode 100644 index 000000000..760cb6a7b --- /dev/null +++ b/code/UnrealLoader.cpp @@ -0,0 +1,448 @@ +/* +--------------------------------------------------------------------------- +Open Asset Import Library (ASSIMP) +--------------------------------------------------------------------------- + +Copyright (c) 2006-2008, ASSIMP Development Team + +All rights reserved. + +Redistribution and use of this software in source and binary forms, +with or without modification, are permitted provided that the following +conditions are met: + +* Redistributions of source code must retain the above + copyright notice, this list of conditions and the + following disclaimer. + +* Redistributions in binary form must reproduce the above + copyright notice, this list of conditions and the + following disclaimer in the documentation and/or other + materials provided with the distribution. + +* Neither the name of the ASSIMP team, nor the names of its + contributors may be used to endorse or promote products + derived from this software without specific prior + written permission of the ASSIMP Development Team. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +--------------------------------------------------------------------------- +*/ + +/** @file UnrealLoader.cpp + * @brief Implementation of the UNREAL (*.3D) importer class + * + * Sources: + * http://local.wasp.uwa.edu.au/~pbourke/dataformats/unreal/ + */ + +#include "AssimpPCH.h" + +#ifndef AI_BUILD_NO_3D_IMPORTER + +#include "UnrealLoader.h" +#include "StreamReader.h" +#include "ParsingUtils.h" +#include "fast_atof.h" + +using namespace Assimp; + +// ------------------------------------------------------------------------------------------------ +// Constructor to be privately used by Importer +UnrealImporter::UnrealImporter() +: configFrameID (0) +, configHandleFlags (true) +{} + +// ------------------------------------------------------------------------------------------------ +// Destructor, private as well +UnrealImporter::~UnrealImporter() +{} + +// ------------------------------------------------------------------------------------------------ +// Returns whether the class can handle the format of the given file. +bool UnrealImporter::CanRead( const std::string& pFile, IOSystem* pIOHandler, bool checkSig) const +{ + return SimpleExtensionCheck(pFile,"3d","uc"); +} + +// ------------------------------------------------------------------------------------------------ +// Build a string of all file extensions supported +void UnrealImporter::GetExtensionList(std::string& append) +{ + append.append("*.3d;*.uc"); +} + +// ------------------------------------------------------------------------------------------------ +// Setup configuration properties for the loader +void UnrealImporter::SetupProperties(const Importer* pImp) +{ + // The + // AI_CONFIG_IMPORT_UNREAL_KEYFRAME option overrides the + // AI_CONFIG_IMPORT_GLOBAL_KEYFRAME option. + configFrameID = pImp->GetPropertyInteger(AI_CONFIG_IMPORT_UNREAL_KEYFRAME,0xffffffff); + if(0xffffffff == configFrameID) { + configFrameID = pImp->GetPropertyInteger(AI_CONFIG_IMPORT_GLOBAL_KEYFRAME,0); + } + + // AI_CONFIG_IMPORT_UNREAL_HANDLE_FLAGS, default is true + configHandleFlags = (0 != pImp->GetPropertyInteger(AI_CONFIG_IMPORT_UNREAL_HANDLE_FLAGS,1)); +} + +// ------------------------------------------------------------------------------------------------ +// Imports the given file into the given scene structure. +void UnrealImporter::InternReadFile( const std::string& pFile, + aiScene* pScene, IOSystem* pIOHandler) +{ + // For any of the 3 files being passed get the three correct paths + // First of all, determine file extension + std::string::size_type pos = pFile.find_last_of('.'); + std::string extension = pFile.substr( pos); + + for( std::string::iterator it = extension.begin(); it != extension.end(); ++it) + *it = tolower( *it); + + std::string d_path,a_path,uc_path; + if (extension == ".3d") + { + // jjjj_d.3d + // jjjj_a.3d + pos = pFile.find_last_of('_'); + if (std::string::npos == pos) { + throw new ImportErrorException("UNREAL: Unexpected naming scheme"); + } + extension = pFile.substr(0,pos); + } + else // if (extension == ".uc") + { + extension = pFile.substr(0,pos); + } + + // build proper paths + d_path = extension+"_d.3d"; + a_path = extension+"_a.3d"; + uc_path = extension+".uc"; + + DefaultLogger::get()->debug("UNREAL: data file is " + d_path); + DefaultLogger::get()->debug("UNREAL: aniv file is " + a_path); + DefaultLogger::get()->debug("UNREAL: uc file is " + uc_path); + + // and open the files ... we can't live without them + IOStream* p = pIOHandler->Open(d_path); + if (!p) + throw new ImportErrorException("UNREAL: Unable to open _d file"); + StreamReaderLE d_reader(pIOHandler->Open(d_path)); + + const uint16_t numTris = d_reader.GetI2(); + const uint16_t numVert = d_reader.GetI2(); + d_reader.IncPtr(44); + if (!numTris || numVert < 3) + throw new ImportErrorException("UNREAL: Invalid number of vertices/triangles"); + + // maximum texture index + unsigned int maxTexIdx = 0; + + // collect triangles + std::vector triangles(numTris); + for (std::vector::iterator it = triangles.begin(), end = triangles.end(); + it != end; ++it) + { + Unreal::Triangle& tri = *it; + + for (unsigned int i = 0; i < 3;++i) + { + tri.mVertex[i] = d_reader.GetI2(); + if (tri.mVertex[i] >= numTris) + { + DefaultLogger::get()->warn("UNREAL: vertex index out of range"); + tri.mVertex[i] = 0; + } + } + tri.mType = d_reader.GetI1(); + + // handle mesh flagss? + if (configHandleFlags) + tri.mType = Unreal::MF_NORMAL_OS; + else { + // ignore MOD and MASKED for the moment, treat them as two-sided + if (tri.mType == Unreal::MF_NORMAL_MOD_TS || tri.mType == Unreal::MF_NORMAL_MASKED_TS) + tri.mType = Unreal::MF_NORMAL_TS; + } + d_reader.IncPtr(1); + + for (unsigned int i = 0; i < 3;++i) + for (unsigned int i2 = 0; i2 < 2;++i2) + tri.mTex[i][i2] = d_reader.GetI1(); + + tri.mTextureNum = d_reader.GetI1(); + maxTexIdx = std::max(maxTexIdx,(unsigned int)tri.mTextureNum); + d_reader.IncPtr(1); + } + + p = pIOHandler->Open(a_path); + if (!p) + throw new ImportErrorException("UNREAL: Unable to open _a file"); + StreamReaderLE a_reader(pIOHandler->Open(a_path)); + + // read number of frames + const uint32_t numFrames = a_reader.GetI2(); + if (configFrameID >= numFrames) + throw new ImportErrorException("UNREAL: The requested frame does not exist"); + + uint32_t st = a_reader.GetI2(); + if (st != numVert*4) + throw new ImportErrorException("UNREAL: Unexpected aniv file length"); + + // skip to our frame + a_reader.IncPtr(configFrameID *numVert*4); + + // collect vertices + std::vector vertices(numVert); + for (std::vector::iterator it = vertices.begin(), end = vertices.end(); + it != end; ++it) + { + int32_t val = a_reader.GetI4(); + Unreal::DecompressVertex(*it,val); + } + + // list of textures. + std::vector< std::pair > textures; + + // allocate the output scene + aiNode* nd = pScene->mRootNode = new aiNode(); + nd->mName.Set(""); + + // we can live without the uc file if necessary + boost::scoped_ptr pb (pIOHandler->Open(uc_path)); + if (pb.get()) { + + size_t s = pb->FileSize(); + std::vector _data(s+1); + pb->Read(&_data[0],s,1); + + _data[s] = 0; + const char* data = &_data[0]; + + std::vector< std::pair< std::string,std::string > > tempTextures; + + // do a quick search in the UC file for some known, usually texture-related, tags + for (;*data;++data) + { + if (TokenMatchI(data,"#exec",5)) { + SkipSpacesAndLineEnd(&data); + + // #exec TEXTURE IMPORT [...] NAME=jjjjj [...] FILE=jjjj.pcx [...] + if (TokenMatchI(data,"TEXTURE",7)) { + SkipSpacesAndLineEnd(&data); + + if (TokenMatchI(data,"IMPORT",6)) + { + tempTextures.push_back(std::pair< std::string,std::string >()); + std::pair< std::string,std::string >& me = tempTextures.back(); + for (;!IsLineEnd(*data);++data) + { + if (!::ASSIMP_strincmp(data,"NAME=",5)) + { + const char *d = data+=5; + for (;!IsSpaceOrNewLine(*data);++data); + me.first = std::string(d,(size_t)(data-d)); + } + else if (!::ASSIMP_strincmp(data,"FILE=",5)) + { + const char *d = data+=5; + for (;!IsSpaceOrNewLine(*data);++data); + me.second = std::string(d,(size_t)(data-d)); + } + } + if (!me.first.length() || !me.second.length()) + tempTextures.pop_back(); + } + } + // #exec MESHMAP SETTEXTURE MESHMAP=box NUM=1 TEXTURE=Jtex1 + // #exec MESHMAP SCALE MESHMAP=box X=0.1 Y=0.1 Z=0.2 + else if (TokenMatchI(data,"MESHMAP",7)) { + SkipSpacesAndLineEnd(&data); + + if (TokenMatchI(data,"SETTEXTURE",10)) { + + textures.push_back(std::pair()); + std::pair& me = textures.back(); + + for (;!IsLineEnd(*data);++data) { + if (!::ASSIMP_strincmp(data,"NUM=",4)) + { + data += 4; + me.first = strtol10(data,&data); + } + else if (!::ASSIMP_strincmp(data,"TEXTURE=",8)) + { + data += 8; + const char *d = data; + for (;!IsSpaceOrNewLine(*data);++data); + me.second = std::string(d,(size_t)(data-d)); + + // try to find matching path names, doesn't care if we don't find them + for (std::vector< std::pair< std::string,std::string > >::const_iterator it = tempTextures.begin(); + it != tempTextures.end(); ++it) + { + if ((*it).first == me.second) + { + me.second = (*it).second; + break; + } + } + } + } + } + else if (TokenMatchI(data,"SCALE",5)) { + + for (;!IsLineEnd(*data);++data) { + if (data[0] == 'X' && data[1] == '=') { + data = fast_atof_move(data+2,(float&)nd->mTransformation.a1); + } + else if (data[0] == 'Y' && data[1] == '=') { + data = fast_atof_move(data+2,(float&)nd->mTransformation.b2); + } + else if (data[0] == 'Z' && data[1] == '=') { + data = fast_atof_move(data+2,(float&)nd->mTransformation.c3); + } + } + } + } + } + } + } + else { + DefaultLogger::get()->error("Unable to open .uc file"); + } + + std::vector materials; + materials.reserve(textures.size()*2+5); + + // find out how many output meshes and materials we'll have and build material indices + for (std::vector::iterator it = triangles.begin(), end = triangles.end(); + it != end; ++it) + { + Unreal::Triangle& tri = *it; + Unreal::TempMat mat(tri); + std::vector::iterator nt = std::find(materials.begin(),materials.end(),mat); + if (nt == materials.end()) { + // add material + tri.matIndex = materials.size(); + mat.numFaces = 1; + materials.push_back(mat); + + ++pScene->mNumMeshes; + } + else { + tri.matIndex = nt-materials.begin(); + ++nt->numFaces; + } + } + + if (!pScene->mNumMeshes) + throw new ImportErrorException("UNREAL: Unable to find valid mesh data"); + + // allocate meshes and bind them to the node graph + pScene->mMeshes = new aiMesh*[pScene->mNumMeshes]; + pScene->mMaterials = new aiMaterial*[pScene->mNumMaterials = pScene->mNumMeshes]; + + nd->mNumMeshes = pScene->mNumMeshes; + nd->mMeshes = new unsigned int[nd->mNumMeshes]; + for (unsigned int i = 0; i < pScene->mNumMeshes;++i) { + aiMesh* m = pScene->mMeshes[i] = new aiMesh(); + m->mPrimitiveTypes = aiPrimitiveType_TRIANGLE; + + const unsigned int num = materials[i].numFaces; + m->mFaces = new aiFace [num]; + m->mVertices = new aiVector3D [num*3]; + m->mTextureCoords[0] = new aiVector3D [num*3]; + + nd->mMeshes[i] = i; + + // create materials, too + MaterialHelper* mat = new MaterialHelper(); + pScene->mMaterials[i] = mat; + + // all white by default - texture rulez + aiColor3D color(1.f,1.f,1.f); + + aiString s; + ::sprintf(s.data,"mat%i_tx%i_",i,materials[i].tex); + + // set the two-sided flag + if (materials[i].type == Unreal::MF_NORMAL_TS) { + const int twosided = 1; + mat->AddProperty(&twosided,1,AI_MATKEY_TWOSIDED); + ::strcat(s.data,"ts_"); + } + else ::strcat(s.data,"os_"); + + // make TRANS faces 90% opaque that RemRedundantMaterials won't catch us + if (materials[i].type == Unreal::MF_NORMAL_TRANS_TS) + { + const float opac = 0.9f; + mat->AddProperty(&opac,1,AI_MATKEY_OPACITY); + ::strcat(s.data,"tran_"); + } + else ::strcat(s.data,"opaq_"); + + // a special name for the weapon attachment point + if (materials[i].type == Unreal::MF_WEAPON_PLACEHOLDER) + { + s.length = ::sprintf(s.data,"$WeaponTag$"); + color = aiColor3D(0.f,0.f,0.f); + } + + // set color and name + mat->AddProperty(&color,1,AI_MATKEY_COLOR_DIFFUSE); + s.length = ::strlen(s.data); + mat->AddProperty(&s,AI_MATKEY_NAME); + + // set texture, if any + const unsigned int tex = materials[i].tex; + for (std::vector< std::pair< unsigned int, std::string > >::const_iterator it = textures.begin(); + it != textures.end();++it) + { + if ((*it).first == tex) + { + s.Set((*it).second); + mat->AddProperty(&s,AI_MATKEY_TEXTURE_DIFFUSE(0)); + break; + } + } + } + + // fill them. + for (std::vector::iterator it = triangles.begin(), end = triangles.end(); + it != end; ++it) + { + Unreal::Triangle& tri = *it; + Unreal::TempMat mat(tri); + std::vector::iterator nt = std::find(materials.begin(),materials.end(),mat); + + aiMesh* mesh = pScene->mMeshes[nt-materials.begin()]; + aiFace& f = mesh->mFaces[mesh->mNumFaces++]; + f.mIndices = new unsigned int[f.mNumIndices = 3]; + + for (unsigned int i = 0; i < 3;++i,mesh->mNumVertices++) + { + f.mIndices[i] = mesh->mNumVertices; + + mesh->mVertices[mesh->mNumVertices] = vertices[ tri.mVertex[i] ]; + mesh->mTextureCoords[0][mesh->mNumVertices] = aiVector3D( tri.mTex[i][0] / 255.f, 1.f - tri.mTex[i][1] / 255.f, 0.f); + } + } +} + +#endif // !! AI_BUILD_NO_3D_IMPORTER \ No newline at end of file diff --git a/code/UnrealLoader.h b/code/UnrealLoader.h new file mode 100644 index 000000000..efd20ceab --- /dev/null +++ b/code/UnrealLoader.h @@ -0,0 +1,196 @@ +/* +Open Asset Import Library (ASSIMP) +---------------------------------------------------------------------- + +Copyright (c) 2006-2008, ASSIMP Development Team +All rights reserved. + +Redistribution and use of this software in source and binary forms, +with or without modification, are permitted provided that the +following conditions are met: + +* Redistributions of source code must retain the above + copyright notice, this list of conditions and the + following disclaimer. + +* Redistributions in binary form must reproduce the above + copyright notice, this list of conditions and the + following disclaimer in the documentation and/or other + materials provided with the distribution. + +* Neither the name of the ASSIMP team, nor the names of its + contributors may be used to endorse or promote products + derived from this software without specific prior + written permission of the ASSIMP Development Team. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +---------------------------------------------------------------------- +*/ + +/** @file UnrealLoader.h + * @brief Declaration of the .3d (UNREAL) importer class. + */ +#ifndef INCLUDED_AI_3D_LOADER_H +#define INCLUDED_AI_3D_LOADER_H + +#include "BaseImporter.h" +namespace Assimp { +namespace Unreal { + + /* + 0 = Normal one-sided + 1 = Normal two-sided + 2 = Translucent two-sided + 3 = Masked two-sided + 4 = Modulation blended two-sided + 8 = Placeholder triangle for weapon positioning (invisible) + */ +enum MeshFlags { + MF_NORMAL_OS = 0, + MF_NORMAL_TS = 1, + MF_NORMAL_TRANS_TS = 2, + MF_NORMAL_MASKED_TS = 3, + MF_NORMAL_MOD_TS = 4, + MF_WEAPON_PLACEHOLDER = 8 +}; + + // a single triangle +struct Triangle { + uint16_t mVertex[3]; // Vertex indices + char mType; // James' Mesh Type + char mColor; // Color for flat and Gourand Shaded + unsigned char mTex[3][2]; // Texture UV coordinates + unsigned char mTextureNum; // Source texture offset + char mFlags; // Unreal Mesh Flags (unused) + + unsigned int matIndex; +}; + +// temporary representation for a material +struct TempMat { + TempMat() + : numFaces (0) + {} + + TempMat(const Triangle& in) + : type ((Unreal::MeshFlags)in.mType) + , tex (in.mTextureNum) + , numFaces (0) + {} + + // type of mesh + Unreal::MeshFlags type; + + // index of texture + unsigned int tex; + + // number of faces using us + unsigned int numFaces; + + // for std::find + bool operator == (const TempMat& o ) { + return (tex == o.tex && type == o.type); + } +}; + +struct Vertex +{ + int32_t X : 11; + int32_t Y : 11; + int32_t Z : 10; +}; + + // UNREAL vertex compression +inline void CompressVertex(const aiVector3D& v, uint32_t& out) +{ + Vertex n; + n.X = (int32_t)v.x; + n.Y = (int32_t)v.y; + n.Z = (int32_t)v.z; + out = *((uint32_t*)&n); +} + + // UNREAL vertex decompression +inline void DecompressVertex(aiVector3D& v, int32_t in) +{ + Vertex n = *((Vertex*)&in); + v.x = (float)n.X; + v.y = (float)n.Y; + v.z = (float)n.Z; +} + +} // end namespace Unreal + +// --------------------------------------------------------------------------- +/** @brief Importer class to load UNREAL files (*.3d) +*/ +class UnrealImporter : public BaseImporter +{ + friend class Importer; + +protected: + /** Constructor to be privately used by Importer */ + UnrealImporter(); + + /** Destructor, private as well */ + ~UnrealImporter(); + +public: + + // ------------------------------------------------------------------- + /** @brief Returns whether we can handle the format of the given file + * + * See BaseImporter::CanRead() for details. + **/ + bool CanRead( const std::string& pFile, IOSystem* pIOHandler, + bool checkSig) const; + +protected: + + // ------------------------------------------------------------------- + /** @brief Called by Importer::GetExtensionList() + * + * See BaseImporter::GetExtensionList() for details + */ + void GetExtensionList(std::string& append); + + + // ------------------------------------------------------------------- + /** @brief Setup properties for the importer + * + * See BaseImporter::SetupProperties() for details + */ + void SetupProperties(const Importer* pImp); + + + // ------------------------------------------------------------------- + /** @brief Imports the given file into the given scene structure. + * + * See BaseImporter::InternReadFile() for details + */ + void InternReadFile( const std::string& pFile, aiScene* pScene, + IOSystem* pIOHandler); + +private: + + //! frame to be loaded + uint32_t configFrameID; + + //! process surface flags + bool configHandleFlags; + +}; // !class UnrealImporter + +} // end of namespace Assimp +#endif // AI_UNREALIMPORTER_H_INC diff --git a/code/ValidateDataStructure.cpp b/code/ValidateDataStructure.cpp index d888b9efc..2b2b01259 100644 --- a/code/ValidateDataStructure.cpp +++ b/code/ValidateDataStructure.cpp @@ -39,8 +39,9 @@ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. --------------------------------------------------------------------------- */ -/** @file Implementation of the post processing step to validate - * the data structure returned by Assimp +/** @file ValidateDataStructure.cpp + * @brief Implementation of the post processing step to validate + * the data structure returned by Assimp. */ #include "AssimpPCH.h" @@ -50,7 +51,6 @@ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. #include "BaseImporter.h" #include "fast_atof.h" - // CRT headers #include @@ -85,15 +85,9 @@ void ValidateDSProcess::ReportError(const char* msg,...) va_start(args,msg); char szBuffer[3000]; + const int iLen = vsprintf(szBuffer,msg,args); + ai_assert(iLen > 0); - int iLen; - iLen = vsprintf(szBuffer,msg,args); - - if (0 >= iLen) - { - // :-) should not happen ... - throw new ImportErrorException("Idiot ... learn coding!"); - } va_end(args); #ifdef _DEBUG aiAssert( false,szBuffer,__LINE__,__FILE__ ); @@ -109,15 +103,9 @@ void ValidateDSProcess::ReportWarning(const char* msg,...) va_start(args,msg); char szBuffer[3000]; + const int iLen = vsprintf(szBuffer,msg,args); + ai_assert(iLen > 0); - int iLen; - iLen = vsprintf(szBuffer,msg,args); - - if (0 >= iLen) - { - // :-) should not happen ... - throw new ImportErrorException("Idiot ... learn coding!"); - } va_end(args); DefaultLogger::get()->warn("Validation warning: " + std::string(szBuffer,iLen)); } @@ -126,8 +114,7 @@ void ValidateDSProcess::ReportWarning(const char* msg,...) inline int HasNameMatch(const aiString& in, aiNode* node) { int result = (node->mName == in ? 1 : 0 ); - for (unsigned int i = 0; i < node->mNumChildren;++i) - { + for (unsigned int i = 0; i < node->mNumChildren;++i) { result += HasNameMatch(in,node->mChildren[i]); } return result; @@ -166,8 +153,7 @@ inline void ValidateDSProcess::DoValidationEx(T** parray, unsigned int size, // validate all entries if (size) { - if (!parray) - { + if (!parray) { ReportError("aiScene::%s is NULL (aiScene::%s is %i)", firstName, secondName, size); } @@ -205,13 +191,11 @@ inline void ValidateDSProcess::DoValidationWithNameCheck(T** array, for (unsigned int i = 0; i < size;++i) { int res = HasNameMatch(array[i]->mName,mScene->mRootNode); - if (!res) - { + if (!res) { ReportError("aiScene::%s[%i] has no corresponding node in the scene graph (%s)", firstName,i,array[i]->mName.data); } - else if (1 != res) - { + else if (1 != res) { ReportError("aiScene::%s[%i]: there are more than one nodes with %s as name", firstName,i,array[i]->mName.data); } @@ -228,79 +212,68 @@ void ValidateDSProcess::Execute( aiScene* pScene) // validate the node graph of the scene Validate(pScene->mRootNode); - // at least one of the mXXX arrays must be non-empty or we'll flag - // the sebe as invalid + // At least one of the mXXX arrays must be non-empty or we'll flag + // the scene as invalid bool has = false; // validate all meshes - if (pScene->mNumMeshes) - { - has = true; + if (pScene->mNumMeshes) { + // has = true; DoValidation(pScene->mMeshes,pScene->mNumMeshes,"mMeshes","mNumMeshes"); } - else if (!(mScene->mFlags & AI_SCENE_FLAGS_INCOMPLETE)) - { + else if (!(mScene->mFlags & AI_SCENE_FLAGS_INCOMPLETE)) { ReportError("aiScene::mNumMeshes is 0. At least one mesh must be there"); } - else if (pScene->mMeshes) - { + else if (pScene->mMeshes) { ReportError("aiScene::mMeshes is non-null although there are no meshes"); } // validate all animations - if (pScene->mNumAnimations) - { - has = true; + if (pScene->mNumAnimations) { + // has = true; DoValidation(pScene->mAnimations,pScene->mNumAnimations, "mAnimations","mNumAnimations"); } - else if (pScene->mAnimations) - { + else if (pScene->mAnimations) { ReportError("aiScene::mAnimations is non-null although there are no animations"); } // validate all cameras - if (pScene->mNumCameras) - { - has = true; + if (pScene->mNumCameras) { + // has = true; DoValidationWithNameCheck(pScene->mCameras,pScene->mNumCameras, "mCameras","mNumCameras"); } - else if (pScene->mCameras) - { + else if (pScene->mCameras) { ReportError("aiScene::mCameras is non-null although there are no cameras"); } // validate all lights - if (pScene->mNumLights) - { - has = true; + if (pScene->mNumLights) { + // has = true; DoValidationWithNameCheck(pScene->mLights,pScene->mNumLights, "mLights","mNumLights"); } - else if (pScene->mLights) - { + else if (pScene->mLights) { ReportError("aiScene::mLights is non-null although there are no lights"); } // validate all materials - if (pScene->mNumMaterials) - { - has = true; + if (pScene->mNumMaterials) { + // has = true; DoValidation(pScene->mMaterials,pScene->mNumMaterials,"mMaterials","mNumMaterials"); } - else if (!(mScene->mFlags & AI_SCENE_FLAGS_INCOMPLETE)) - { - // NOTE: ScenePreprocessor generates a default material if none is there - // (and at least one mesh is found). So this should never be triggered ... +#if 0 + // NOTE: ScenePreprocessor generates a default material if none is there + else if (!(mScene->mFlags & AI_SCENE_FLAGS_INCOMPLETE)) { ReportError("aiScene::mNumMaterials is 0. At least one material must be there"); } - else if (pScene->mMaterials) - { +#endif + else if (pScene->mMaterials) { ReportError("aiScene::mMaterials is non-null although there are no materials"); } - if (!has)ReportError("The aiScene data structure is empty"); +// if (!has)ReportError("The aiScene data structure is empty"); DefaultLogger::get()->debug("ValidateDataStructureProcess end"); } @@ -312,8 +285,7 @@ void ValidateDSProcess::Validate( const aiLight* pLight) if (!pLight->mAttenuationConstant && !pLight->mAttenuationLinear && - !pLight->mAttenuationQuadratic) - { + !pLight->mAttenuationQuadratic) { ReportWarning("aiLight::mAttenuationXXX - all are zero"); } @@ -333,6 +305,8 @@ void ValidateDSProcess::Validate( const aiCamera* pCamera) if (pCamera->mClipPlaneFar <= pCamera->mClipPlaneNear) ReportError("aiCamera::mClipPlaneFar must be >= aiCamera::mClipPlaneNear"); + // FIX: there are many 3ds files with invalid FOVs. No reason to + // reject them at all ... a warning is appropriate. if (!pCamera->mHorizontalFOV || pCamera->mHorizontalFOV >= (float)AI_MATH_PI) ReportWarning("%f is not a valid value for aiCamera::mHorizontalFOV",pCamera->mHorizontalFOV); } @@ -341,10 +315,10 @@ void ValidateDSProcess::Validate( const aiCamera* pCamera) void ValidateDSProcess::Validate( const aiMesh* pMesh) { // validate the material index of the mesh - if (pMesh->mMaterialIndex >= this->mScene->mNumMaterials) + if (mScene->mNumMaterials && pMesh->mMaterialIndex >= mScene->mNumMaterials) { - this->ReportError("aiMesh::mMaterialIndex is invalid (value: %i maximum: %i)", - pMesh->mMaterialIndex,this->mScene->mNumMaterials-1); + ReportError("aiMesh::mMaterialIndex is invalid (value: %i maximum: %i)", + pMesh->mMaterialIndex,mScene->mNumMaterials-1); } for (unsigned int i = 0; i < pMesh->mNumFaces; ++i) @@ -356,25 +330,25 @@ void ValidateDSProcess::Validate( const aiMesh* pMesh) switch (face.mNumIndices) { case 0: - this->ReportError("aiMesh::mFaces[%i].mNumIndices is 0",i); + ReportError("aiMesh::mFaces[%i].mNumIndices is 0",i); case 1: if (0 == (pMesh->mPrimitiveTypes & aiPrimitiveType_POINT)) { - this->ReportError("aiMesh::mFaces[%i] is a POINT but aiMesh::mPrimtiveTypes " + ReportError("aiMesh::mFaces[%i] is a POINT but aiMesh::mPrimtiveTypes " "does not report the POINT flag",i); } break; case 2: if (0 == (pMesh->mPrimitiveTypes & aiPrimitiveType_LINE)) { - this->ReportError("aiMesh::mFaces[%i] is a LINE but aiMesh::mPrimtiveTypes " + ReportError("aiMesh::mFaces[%i] is a LINE but aiMesh::mPrimtiveTypes " "does not report the LINE flag",i); } break; case 3: if (0 == (pMesh->mPrimitiveTypes & aiPrimitiveType_TRIANGLE)) { - this->ReportError("aiMesh::mFaces[%i] is a TRIANGLE but aiMesh::mPrimtiveTypes " + ReportError("aiMesh::mFaces[%i] is a TRIANGLE but aiMesh::mPrimtiveTypes " "does not report the TRIANGLE flag",i); } break; @@ -388,25 +362,23 @@ void ValidateDSProcess::Validate( const aiMesh* pMesh) }; } - if (!face.mIndices)this->ReportError("aiMesh::mFaces[%i].mIndices is NULL",i); + if (!face.mIndices) + ReportError("aiMesh::mFaces[%i].mIndices is NULL",i); } // positions must always be there ... - if (!pMesh->mNumVertices || !pMesh->mVertices && !mScene->mFlags) - { - this->ReportError("The mesh contains no vertices"); + if (!pMesh->mNumVertices || !pMesh->mVertices && !mScene->mFlags) { + ReportError("The mesh contains no vertices"); } // if tangents are there there must also be bitangent vectors ... - if ((pMesh->mTangents != NULL) != (pMesh->mBitangents != NULL)) - { - this->ReportError("If there are tangents there must also be bitangent vectors"); + if ((pMesh->mTangents != NULL) != (pMesh->mBitangents != NULL)) { + ReportError("If there are tangents there must also be bitangent vectors"); } // faces, too - if (!pMesh->mNumFaces || !pMesh->mFaces && !mScene->mFlags) - { - this->ReportError("The mesh contains no faces"); + if (!pMesh->mNumFaces || !pMesh->mFaces && !mScene->mFlags) { + ReportError("The mesh contains no faces"); } // now check whether the face indexing layout is correct: @@ -418,8 +390,7 @@ void ValidateDSProcess::Validate( const aiMesh* pMesh) aiFace& face = pMesh->mFaces[i]; for (unsigned int a = 0; a < face.mNumIndices;++a) { - if (face.mIndices[a] >= pMesh->mNumVertices) - { + if (face.mIndices[a] >= pMesh->mNumVertices) { ReportError("aiMesh::mFaces[%i]::mIndices[%i] is out of range",i,a); } // the MSB flag is temporarily used by the extra verbose @@ -436,8 +407,7 @@ void ValidateDSProcess::Validate( const aiMesh* pMesh) // check whether there are vertices that aren't referenced by a face bool b = false; - for (unsigned int i = 0; i < pMesh->mNumVertices;++i) - { + for (unsigned int i = 0; i < pMesh->mNumVertices;++i) { if (!abRefList[i])b = true; } abRefList.clear(); @@ -495,7 +465,7 @@ void ValidateDSProcess::Validate( const aiMesh* pMesh) if (!pMesh->mBones[i]) { delete[] afSum; - this->ReportError("aiMesh::mBones[%i] is NULL (aiMesh::mNumBones is %i)", + ReportError("aiMesh::mBones[%i] is NULL (aiMesh::mNumBones is %i)", i,pMesh->mNumBones); } Validate(pMesh,pMesh->mBones[i],afSum); @@ -505,7 +475,7 @@ void ValidateDSProcess::Validate( const aiMesh* pMesh) if (pMesh->mBones[i]->mName == pMesh->mBones[a]->mName) { delete[] afSum; - this->ReportError("aiMesh::mBones[%i] has the same name as " + ReportError("aiMesh::mBones[%i] has the same name as " "aiMesh::mBones[%i]",i,a); } } @@ -513,8 +483,7 @@ void ValidateDSProcess::Validate( const aiMesh* pMesh) // check whether all bone weights for a vertex sum to 1.0 ... for (unsigned int i = 0; i < pMesh->mNumVertices;++i) { - if (afSum[i] && (afSum[i] <= 0.94 || afSum[i] >= 1.05)) - { + if (afSum[i] && (afSum[i] <= 0.94 || afSum[i] >= 1.05)) { ReportWarning("aiMesh::mVertices[%i]: bone weight sum != 1.0 (sum is %f)",i,afSum[i]); } } @@ -532,21 +501,18 @@ void ValidateDSProcess::Validate( const aiMesh* pMesh, { this->Validate(&pBone->mName); - if (!pBone->mNumWeights) - { - this->ReportError("aiBone::mNumWeights is zero"); + if (!pBone->mNumWeights) { + ReportError("aiBone::mNumWeights is zero"); } // check whether all vertices affected by this bone are valid for (unsigned int i = 0; i < pBone->mNumWeights;++i) { - if (pBone->mWeights[i].mVertexId >= pMesh->mNumVertices) - { - this->ReportError("aiBone::mWeights[%i].mVertexId is out of range",i); + if (pBone->mWeights[i].mVertexId >= pMesh->mNumVertices) { + ReportError("aiBone::mWeights[%i].mVertexId is out of range",i); } - else if (!pBone->mWeights[i].mWeight || pBone->mWeights[i].mWeight > 1.0f) - { - this->ReportWarning("aiBone::mWeights[%i].mWeight has an invalid value",i); + else if (!pBone->mWeights[i].mWeight || pBone->mWeights[i].mWeight > 1.0f) { + ReportWarning("aiBone::mWeights[%i].mWeight has an invalid value",i); } afSum[pBone->mWeights[i].mVertexId] += pBone->mWeights[i].mWeight; } @@ -555,27 +521,26 @@ void ValidateDSProcess::Validate( const aiMesh* pMesh, // ------------------------------------------------------------------------------------------------ void ValidateDSProcess::Validate( const aiAnimation* pAnimation) { - this->Validate(&pAnimation->mName); + Validate(&pAnimation->mName); // validate all materials - if (pAnimation->mNumChannels) + if (pAnimation->mNumChannels) { - if (!pAnimation->mChannels) - { - this->ReportError("aiAnimation::mChannels is NULL (aiAnimation::mNumChannels is %i)", + if (!pAnimation->mChannels) { + ReportError("aiAnimation::mChannels is NULL (aiAnimation::mNumChannels is %i)", pAnimation->mNumChannels); } for (unsigned int i = 0; i < pAnimation->mNumChannels;++i) { if (!pAnimation->mChannels[i]) { - this->ReportError("aiAnimation::mChannels[%i] is NULL (aiAnimation::mNumChannels is %i)", + ReportError("aiAnimation::mChannels[%i] is NULL (aiAnimation::mNumChannels is %i)", i, pAnimation->mNumChannels); } - this->Validate(pAnimation, pAnimation->mChannels[i]); + Validate(pAnimation, pAnimation->mChannels[i]); } } - else this->ReportError("aiAnimation::mNumChannels is 0. At least one node animation channel must be there."); + else ReportError("aiAnimation::mNumChannels is 0. At least one node animation channel must be there."); // Animation duration is allowed to be zero in cases where the anim contains only a single key frame. // if (!pAnimation->mDuration)this->ReportError("aiAnimation::mDuration is zero"); @@ -619,7 +584,6 @@ void ValidateDSProcess::SearchForInvalidTextures(const aiMaterial* pMaterial, case aiTextureType_HEIGHT: szType = "Height"; break; - default: break; }; @@ -746,8 +710,7 @@ void ValidateDSProcess::Validate( const aiMaterial* pMaterial) "aiMaterial::mProperties[%i].mData is 0",i,i); } // check all predefined types - if (aiPTI_String == prop->mType) - { + if (aiPTI_String == prop->mType) { // FIX: strings are now stored in a less expensive way ... if (prop->mDataLength < sizeof(size_t) + ((const aiString*)prop->mData)->length + 1) { ReportError("aiMaterial::mProperties[%i].mDataLength is " @@ -756,16 +719,14 @@ void ValidateDSProcess::Validate( const aiMaterial* pMaterial) } Validate((const aiString*)prop->mData); } - else if (aiPTI_Float == prop->mType) - { + else if (aiPTI_Float == prop->mType) { if (prop->mDataLength < sizeof(float)) { ReportError("aiMaterial::mProperties[%i].mDataLength is " "too small to contain a float (%i, needed: %i)", i,prop->mDataLength,sizeof(float)); } } - else if (aiPTI_Integer == prop->mType) - { + else if (aiPTI_Integer == prop->mType) { if (prop->mDataLength < sizeof(int)) { ReportError("aiMaterial::mProperties[%i].mDataLength is " "too small to contain an integer (%i, needed: %i)", @@ -822,29 +783,25 @@ void ValidateDSProcess::Validate( const aiMaterial* pMaterial) void ValidateDSProcess::Validate( const aiTexture* pTexture) { // the data section may NEVER be NULL - if (!pTexture->pcData) - { - this->ReportError("aiTexture::pcData is NULL"); + if (!pTexture->pcData) { + ReportError("aiTexture::pcData is NULL"); } if (pTexture->mHeight) { - if (!pTexture->mWidth)this->ReportError("aiTexture::mWidth is zero " + if (!pTexture->mWidth)ReportError("aiTexture::mWidth is zero " "(aiTexture::mHeight is %i, uncompressed texture)",pTexture->mHeight); } else { - if (!pTexture->mWidth)this->ReportError("aiTexture::mWidth is zero (compressed texture)"); - if ('.' == pTexture->achFormatHint[0]) - { - char szTemp[5]; - szTemp[0] = pTexture->achFormatHint[0]; - szTemp[1] = pTexture->achFormatHint[1]; - szTemp[2] = pTexture->achFormatHint[2]; - szTemp[3] = pTexture->achFormatHint[3]; - szTemp[4] = '\0'; - - this->ReportWarning("aiTexture::achFormatHint should contain a file extension " - "without a leading dot (format hint: %s).",szTemp); + if (!pTexture->mWidth) { + ReportError("aiTexture::mWidth is zero (compressed texture)"); + } + if ('\0' != pTexture->achFormatHint[3]) { + ReportWarning("aiTexture::achFormatHint must be zero-terminated"); + } + else if ('.' == pTexture->achFormatHint[0]) { + ReportWarning("aiTexture::achFormatHint should contain a file extension " + "without a leading dot (format hint: %s).",pTexture->achFormatHint); } } @@ -852,9 +809,8 @@ void ValidateDSProcess::Validate( const aiTexture* pTexture) if (sz[0] >= 'A' && sz[0] <= 'Z' || sz[1] >= 'A' && sz[1] <= 'Z' || sz[2] >= 'A' && sz[2] <= 'Z' || - sz[3] >= 'A' && sz[3] <= 'Z') - { - this->ReportError("aiTexture::achFormatHint contains non-lowercase characters"); + sz[3] >= 'A' && sz[3] <= 'Z') { + ReportError("aiTexture::achFormatHint contains non-lowercase characters"); } } @@ -864,6 +820,9 @@ void ValidateDSProcess::Validate( const aiAnimation* pAnimation, { Validate(&pNodeAnim->mNodeName); + if (!pNodeAnim->mNumPositionKeys && !pNodeAnim->mScalingKeys && !pNodeAnim->mNumRotationKeys) + ReportError("Empty node animation channel"); + // otherwise check whether one of the keys exceeds the total duration of the animation if (pNodeAnim->mNumPositionKeys) { @@ -875,7 +834,8 @@ void ValidateDSProcess::Validate( const aiAnimation* pAnimation, double dLast = -10e10; for (unsigned int i = 0; i < pNodeAnim->mNumPositionKeys;++i) { - if (pNodeAnim->mPositionKeys[i].mTime > pAnimation->mDuration) + // ScenePreprocessor will compute the duration if still teh default value + if (-1. != pAnimation->mDuration && pNodeAnim->mPositionKeys[i].mTime > pAnimation->mDuration) { ReportError("aiNodeAnim::mPositionKeys[%i].mTime (%.5f) is larger " "than aiAnimation::mDuration (which is %.5f)",i, @@ -903,7 +863,7 @@ void ValidateDSProcess::Validate( const aiAnimation* pAnimation, double dLast = -10e10; for (unsigned int i = 0; i < pNodeAnim->mNumRotationKeys;++i) { - if (pNodeAnim->mRotationKeys[i].mTime > pAnimation->mDuration) + if (-1. != pAnimation->mDuration && pNodeAnim->mRotationKeys[i].mTime > pAnimation->mDuration) { ReportError("aiNodeAnim::mRotationKeys[%i].mTime (%.5f) is larger " "than aiAnimation::mDuration (which is %.5f)",i, @@ -923,15 +883,14 @@ void ValidateDSProcess::Validate( const aiAnimation* pAnimation, // scaling keys if (pNodeAnim->mNumScalingKeys) { - if (!pNodeAnim->mScalingKeys) - { - this->ReportError("aiNodeAnim::mScalingKeys is NULL (aiNodeAnim::mNumScalingKeys is %i)", + if (!pNodeAnim->mScalingKeys) { + ReportError("aiNodeAnim::mScalingKeys is NULL (aiNodeAnim::mNumScalingKeys is %i)", pNodeAnim->mNumScalingKeys); } double dLast = -10e10; for (unsigned int i = 0; i < pNodeAnim->mNumScalingKeys;++i) { - if (pNodeAnim->mScalingKeys[i].mTime > pAnimation->mDuration) + if (-1. != pAnimation->mDuration && pNodeAnim->mScalingKeys[i].mTime > pAnimation->mDuration) { ReportError("aiNodeAnim::mScalingKeys[%i].mTime (%.5f) is larger " "than aiAnimation::mDuration (which is %.5f)",i, @@ -992,13 +951,11 @@ void ValidateDSProcess::Validate( const aiNode* pNode) } if (pNode->mNumChildren) { - if (!pNode->mChildren) - { - this->ReportError("aiNode::mChildren is NULL (aiNode::mNumChildren is %i)", + if (!pNode->mChildren) { + ReportError("aiNode::mChildren is NULL (aiNode::mNumChildren is %i)", pNode->mNumChildren); } - for (unsigned int i = 0; i < pNode->mNumChildren;++i) - { + for (unsigned int i = 0; i < pNode->mNumChildren;++i) { Validate(pNode->mChildren[i]); } } diff --git a/code/ValidateDataStructure.h b/code/ValidateDataStructure.h index 5cacb03ed..7a8124c08 100644 --- a/code/ValidateDataStructure.h +++ b/code/ValidateDataStructure.h @@ -38,7 +38,7 @@ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. ---------------------------------------------------------------------- */ -/** @file Defines a post processing step to validate the loader's +/** @file Defines a (dummy) post processing step to validate the loader's * output data structure (for debugging) */ #ifndef AI_VALIDATEPROCESS_H_INC @@ -56,8 +56,7 @@ struct aiMaterial; struct aiNode; struct aiString; -namespace Assimp -{ +namespace Assimp { // --------------------------------------------------------------------------- /** Validates the ASSIMP data structure @@ -75,18 +74,9 @@ protected: public: // ------------------------------------------------------------------- - /** Returns whether the processing step is present in the given flag field. - * @param pFlags The processing flags the importer was called with. A bitwise - * combination of #aiPostProcessSteps. - * @return true if the process is present in this flag fields, false if not. - */ bool IsActive( unsigned int pFlags) const; // ------------------------------------------------------------------- - /** Executes the post processing step on the given imported data. - * A process should throw an ImportErrorException* if it fails. - * @param pScene The imported data to work at. - */ void Execute( aiScene* pScene); protected: diff --git a/code/XFileImporter.cpp b/code/XFileImporter.cpp index 95f4d20fb..e634efd24 100644 --- a/code/XFileImporter.cpp +++ b/code/XFileImporter.cpp @@ -38,7 +38,9 @@ THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. --------------------------------------------------------------------------- */ -/** @file Implementation of the XFile importer class */ +/** @file XFileImporter.cpp + * @brief Implementation of the XFile importer class + */ #include "AssimpPCH.h" #ifndef ASSIMP_BUILD_NO_X_IMPORTER @@ -53,31 +55,35 @@ using namespace Assimp; // ------------------------------------------------------------------------------------------------ // Constructor to be privately used by Importer XFileImporter::XFileImporter() -{ -} +{} // ------------------------------------------------------------------------------------------------ // Destructor, private as well XFileImporter::~XFileImporter() -{ -} +{} // ------------------------------------------------------------------------------------------------ // Returns whether the class can handle the format of the given file. -bool XFileImporter::CanRead( const std::string& pFile, IOSystem* pIOHandler) const +bool XFileImporter::CanRead( const std::string& pFile, IOSystem* pIOHandler, bool checkSig) const { - // simple check of file extension is enough for the moment - std::string::size_type pos = pFile.find_last_of( '.'); - // no file extension - can't read - if( pos == std::string::npos) - return false; - std::string extension = pFile.substr( pos); - if( extension == ".x" || extension == ".X") + std::string extension = GetExtension(pFile); + if(extension == "x") { return true; - + } + if (!extension.length() || checkSig) { + uint32_t token[1]; + token[0] = AI_MAKE_MAGIC("xof "); + return CheckMagicToken(pIOHandler,pFile,token,1,0); + } return false; } +// ------------------------------------------------------------------------------------------------ +void XFileImporter::GetExtensionList(std::string& append) +{ + append.append("*.x"); +} + // ------------------------------------------------------------------------------------------------ // Imports the given file into the given scene structure. void XFileImporter::InternReadFile( const std::string& pFile, aiScene* pScene, IOSystem* pIOHandler) @@ -611,17 +617,13 @@ void XFileImporter::ConvertMaterials( aiScene* pScene, const std::vector* newWeights = new std::vector[pcMesh->mNumBones]; - for (unsigned int i = 0;i < pcMesh->mNumBones;++i) - { + for (unsigned int i = 0;i < pcMesh->mNumBones;++i) { newWeights[i].reserve(pcMesh->mBones[i]->mNumWeights*3); } @@ -124,7 +123,7 @@ bool MakeVerboseFormatProcess::MakeVerboseFormat(aiMesh* pcMesh) for (unsigned int a = 0; a< pcMesh->mNumFaces;++a) { aiFace* pcFace = &pcMesh->mFaces[a]; - for (unsigned int q = 0; q < 3;++q,++iIndex) + for (unsigned int q = 0; q < pcFace->mNumIndices;++q,++iIndex) { // need to build a clean list of bones, too for (unsigned int i = 0;i < pcMesh->mNumBones;++i) diff --git a/code/fast_atof.h b/code/fast_atof.h index 2511d229f..b7e36476e 100644 --- a/code/fast_atof.h +++ b/code/fast_atof.h @@ -165,11 +165,12 @@ inline unsigned int strtol_cppstyle( const char* in, const char** out=0) } // ------------------------------------------------------------------------------------ -// Special version of the function, providing higher accuracy +// Special version of the function, providing higher accuracy and security // It is mainly used bx fast_atof to prevent ugly integer overflows. // ------------------------------------------------------------------------------------ -inline uint64_t strtol10_64( const char* in, const char** out=0) +inline uint64_t strtol10_64( const char* in, const char** out=0, unsigned int* max_inout=0) { + unsigned int cur = 0; uint64_t value = 0; while ( 1 ) @@ -177,14 +178,36 @@ inline uint64_t strtol10_64( const char* in, const char** out=0) if ( *in < '0' || *in > '9' ) break; - value = ( value * 10 ) + ( *in - '0' ); + const uint64_t new_value = ( value * 10 ) + ( *in - '0' ); + + if (new_value < value) /* numeric overflow */ + return value; + + value = new_value; + ++in; + ++cur; + + if (max_inout && *max_inout == cur) { + + if (out) { /* skip to end */ + while (*in >= '0' && *in <= '9')++in; + *out = in; + } + + return value; + } } if (out) *out = in; + + if (max_inout) + *max_inout = cur; + return value; } +#define AI_FAST_ATOF_RELAVANT_DECIMALS 6 // ------------------------------------------------------------------------------------ //! Provides a fast function for converting a string into a float, @@ -216,15 +239,18 @@ inline const char* fast_atof_move( const char* c, float& out) // Casting to double seems to solve the problem. // strtol_64 is used to prevent integer overflow. - //float pl = (float)strtol(c, &t, 10); - double pl = (double) strtol10_64 ( c, &t ); - pl *= fast_atof_table[t-c]; + // Another fix: this tends to become 0 if we don't limit + // the maximum number of digits + unsigned int diff = AI_FAST_ATOF_RELAVANT_DECIMALS; + double pl = (double) strtol10_64 ( c, &t, &diff ); + + pl *= fast_atof_table[diff]; f += (float)pl; c = t; - // FIX: a large 'E' should be allowed, too + // FIX: a large 'E' should be allowed, too (occurs in some DXF files) if (*c == 'e' || *c == 'E') { ++c; diff --git a/code/makefile.mingw b/code/makefile.mingw index 6c685e727..e8aec53c2 100644 --- a/code/makefile.mingw +++ b/code/makefile.mingw @@ -1,4 +1,5 @@ +# --------------------------------------------------------------------------- # Makefile for Open Asset Import Library (MinGW32-make) # aramis_acg@users.sourceforge.net # - just a quick'n'dirty one, could be buggy ... @@ -15,6 +16,7 @@ # SINGLETHREADED=1 Build single-threaded library # DEBUG=1 Build debug build of library # +# --------------------------------------------------------------------------- # C++ object files OBJECTS := $(patsubst %.cpp,%.o, $(wildcard *.cpp)) @@ -60,7 +62,7 @@ ifeq ($(DEBUG),1) DEFINEFLAGS += -D_DEBUG -DDEBUG # NAMESUFFIX += -debug else - CPPFLAGS += -o3 + CPPFLAGS += -o3 -s DEFINEFLAGS += -DNDEBUG -D_NDEBUG endif diff --git a/code/qnan.h b/code/qnan.h index 3d3e7630d..fdebab6a9 100644 --- a/code/qnan.h +++ b/code/qnan.h @@ -1,9 +1,20 @@ +/** @file qnan.h + * @brief Some utilities for our dealings with qnans. + * + * @note Some loaders use qnans heavily to mark invalid values (and they're + * even returned by Gen(Smooth)Normals if normals are undefined for a + * primitive). Their whole usage is wrapped here, so you can easily + * fix issues with platforms with a different qnan implementation. + */ #if (!defined AI_QNAN_H_INCLUDED) #define AI_QNAN_H_INCLUDED -// Data structure for a 32 Bit IEEE 754 floating-point number +// --------------------------------------------------------------------------- +/** @brief Data structure for the bit pattern of a 32 Bit + * IEEE 754 floating-point number. + */ union _IEEESingle { float Float; @@ -16,25 +27,40 @@ union _IEEESingle } ; // --------------------------------------------------------------------------- -// check whether a float is NaN +/** @brief check whether a float is qNaN. + * @param in Input value + */ AI_FORCE_INLINE bool is_qnan(float in) { return (in != in); } // --------------------------------------------------------------------------- -// check whether a float is NOT NaN. +/** @brief check whether a float is NOT qNaN. + * @param in Input value + */ AI_FORCE_INLINE bool is_not_qnan(float in) { return (in == in); } // --------------------------------------------------------------------------- -// check whether a float is either NaN or (+/-) INF. Denorms return false, -// they're treated like normal values. +/** @brief check whether a float is either NaN or (+/-) INF. + * + * Denorms return false, they're treated like normal values. + * @param in Input value + */ AI_FORCE_INLINE bool is_special_float(float in) { return (((_IEEESingle*)&in)->IEEE.Exp == (1u << 8)-1); } +// --------------------------------------------------------------------------- +/** @brief Get a qnan + */ +AI_FORCE_INLINE float get_qnan() +{ + return std::numeric_limits::quiet_NaN(); +} + #endif // !! AI_QNAN_H_INCLUDED diff --git a/code/res/assimp.rc b/code/res/assimp.rc index 0bf5f111f..60ceaef3d 100644 --- a/code/res/assimp.rc +++ b/code/res/assimp.rc @@ -1,6 +1,7 @@ // Microsoft Visual C++ generated resource script. // #include "resource.h" +#include "..\..\mkutil\revision.h" #define APSTUDIO_READONLY_SYMBOLS ///////////////////////////////////////////////////////////////////////////// @@ -32,8 +33,8 @@ LANGUAGE LANG_GERMAN, SUBLANG_GERMAN #if (!defined ASSIMP_JNI_EXPORT) VS_VERSION_INFO VERSIONINFO - FILEVERSION 1,0,0,1 - PRODUCTVERSION 1,0,0,1 + FILEVERSION 1,0,SVNRevision, 0 + PRODUCTVERSION 1,0,SVNRevision,0 FILEFLAGSMASK 0x17L #ifdef _DEBUG FILEFLAGS 0x1L @@ -51,12 +52,13 @@ BEGIN VALUE "Comments", "Licensed under a 3-clause BSD license" VALUE "CompanyName", "ASSIMP Development Team" VALUE "FileDescription", "Open Asset Import Library" - VALUE "FileVersion", "1, 0, 0, 0" - VALUE "InternalName", "assimp" + VALUE "FileVersion", 1,0,SVNRevision,0 + VALUE "InternalName", "assimp " VALUE "LegalCopyright", "Copyright (C) 2008" VALUE "OriginalFilename", "assimpNN.dll" VALUE "ProductName", "Open Asset Import Library" - VALUE "ProductVersion", "1, 0, 0, 0" + VALUE "ProductVersion", 1,0,SVNRevision,0 + ,0 END END BLOCK "VarFileInfo" diff --git a/contrib/cppunit_note.txt b/contrib/cppunit_note.txt index 5953a1083..cf1e02608 100644 --- a/contrib/cppunit_note.txt +++ b/contrib/cppunit_note.txt @@ -3,5 +3,6 @@ This is a "slim" version of CPPunit. It contains everything we need, but nothing - Tools have been removed - x64-Build configs have been added - VC6 build & headers have been removed (Assimp can't be compiled with vc6) +- vc9 solution has been added, vc8 solution uses Assimp 'FastSTL' settings ---- Aramis \ No newline at end of file +--- Alex \ No newline at end of file diff --git a/contrib/zlib/compress.c b/contrib/zlib/compress.c new file mode 100644 index 000000000..df04f0148 --- /dev/null +++ b/contrib/zlib/compress.c @@ -0,0 +1,79 @@ +/* compress.c -- compress a memory buffer + * Copyright (C) 1995-2003 Jean-loup Gailly. + * For conditions of distribution and use, see copyright notice in zlib.h + */ + +/* @(#) $Id$ */ + +#define ZLIB_INTERNAL +#include "zlib.h" + +/* =========================================================================== + Compresses the source buffer into the destination buffer. The level + parameter has the same meaning as in deflateInit. sourceLen is the byte + length of the source buffer. Upon entry, destLen is the total size of the + destination buffer, which must be at least 0.1% larger than sourceLen plus + 12 bytes. Upon exit, destLen is the actual size of the compressed buffer. + + compress2 returns Z_OK if success, Z_MEM_ERROR if there was not enough + memory, Z_BUF_ERROR if there was not enough room in the output buffer, + Z_STREAM_ERROR if the level parameter is invalid. +*/ +int ZEXPORT compress2 (dest, destLen, source, sourceLen, level) + Bytef *dest; + uLongf *destLen; + const Bytef *source; + uLong sourceLen; + int level; +{ + z_stream stream; + int err; + + stream.next_in = (Bytef*)source; + stream.avail_in = (uInt)sourceLen; +#ifdef MAXSEG_64K + /* Check for source > 64K on 16-bit machine: */ + if ((uLong)stream.avail_in != sourceLen) return Z_BUF_ERROR; +#endif + stream.next_out = dest; + stream.avail_out = (uInt)*destLen; + if ((uLong)stream.avail_out != *destLen) return Z_BUF_ERROR; + + stream.zalloc = (alloc_func)0; + stream.zfree = (free_func)0; + stream.opaque = (voidpf)0; + + err = deflateInit(&stream, level); + if (err != Z_OK) return err; + + err = deflate(&stream, Z_FINISH); + if (err != Z_STREAM_END) { + deflateEnd(&stream); + return err == Z_OK ? Z_BUF_ERROR : err; + } + *destLen = stream.total_out; + + err = deflateEnd(&stream); + return err; +} + +/* =========================================================================== + */ +int ZEXPORT compress (dest, destLen, source, sourceLen) + Bytef *dest; + uLongf *destLen; + const Bytef *source; + uLong sourceLen; +{ + return compress2(dest, destLen, source, sourceLen, Z_DEFAULT_COMPRESSION); +} + +/* =========================================================================== + If the default memLevel or windowBits for deflateInit() is changed, then + this function needs to be updated. + */ +uLong ZEXPORT compressBound (sourceLen) + uLong sourceLen; +{ + return sourceLen + (sourceLen >> 12) + (sourceLen >> 14) + 11; +} diff --git a/contrib/zlib/deflate.c b/contrib/zlib/deflate.c new file mode 100644 index 000000000..29ce1f64a --- /dev/null +++ b/contrib/zlib/deflate.c @@ -0,0 +1,1736 @@ +/* deflate.c -- compress data using the deflation algorithm + * Copyright (C) 1995-2005 Jean-loup Gailly. + * For conditions of distribution and use, see copyright notice in zlib.h + */ + +/* + * ALGORITHM + * + * The "deflation" process depends on being able to identify portions + * of the input text which are identical to earlier input (within a + * sliding window trailing behind the input currently being processed). + * + * The most straightforward technique turns out to be the fastest for + * most input files: try all possible matches and select the longest. + * The key feature of this algorithm is that insertions into the string + * dictionary are very simple and thus fast, and deletions are avoided + * completely. Insertions are performed at each input character, whereas + * string matches are performed only when the previous match ends. So it + * is preferable to spend more time in matches to allow very fast string + * insertions and avoid deletions. The matching algorithm for small + * strings is inspired from that of Rabin & Karp. A brute force approach + * is used to find longer strings when a small match has been found. + * A similar algorithm is used in comic (by Jan-Mark Wams) and freeze + * (by Leonid Broukhis). + * A previous version of this file used a more sophisticated algorithm + * (by Fiala and Greene) which is guaranteed to run in linear amortized + * time, but has a larger average cost, uses more memory and is patented. + * However the F&G algorithm may be faster for some highly redundant + * files if the parameter max_chain_length (described below) is too large. + * + * ACKNOWLEDGEMENTS + * + * The idea of lazy evaluation of matches is due to Jan-Mark Wams, and + * I found it in 'freeze' written by Leonid Broukhis. + * Thanks to many people for bug reports and testing. + * + * REFERENCES + * + * Deutsch, L.P.,"DEFLATE Compressed Data Format Specification". + * Available in http://www.ietf.org/rfc/rfc1951.txt + * + * A description of the Rabin and Karp algorithm is given in the book + * "Algorithms" by R. Sedgewick, Addison-Wesley, p252. + * + * Fiala,E.R., and Greene,D.H. + * Data Compression with Finite Windows, Comm.ACM, 32,4 (1989) 490-595 + * + */ + +/* @(#) $Id$ */ + +#include "deflate.h" + +const char deflate_copyright[] = + " deflate 1.2.3 Copyright 1995-2005 Jean-loup Gailly "; +/* + If you use the zlib library in a product, an acknowledgment is welcome + in the documentation of your product. If for some reason you cannot + include such an acknowledgment, I would appreciate that you keep this + copyright string in the executable of your product. + */ + +/* =========================================================================== + * Function prototypes. + */ +typedef enum { + need_more, /* block not completed, need more input or more output */ + block_done, /* block flush performed */ + finish_started, /* finish started, need only more output at next deflate */ + finish_done /* finish done, accept no more input or output */ +} block_state; + +typedef block_state (*compress_func) OF((deflate_state *s, int flush)); +/* Compression function. Returns the block state after the call. */ + +local void fill_window OF((deflate_state *s)); +local block_state deflate_stored OF((deflate_state *s, int flush)); +local block_state deflate_fast OF((deflate_state *s, int flush)); +#ifndef FASTEST +local block_state deflate_slow OF((deflate_state *s, int flush)); +#endif +local void lm_init OF((deflate_state *s)); +local void putShortMSB OF((deflate_state *s, uInt b)); +local void flush_pending OF((z_streamp strm)); +local int read_buf OF((z_streamp strm, Bytef *buf, unsigned size)); +#ifndef FASTEST +#ifdef ASMV + void match_init OF((void)); /* asm code initialization */ + uInt longest_match OF((deflate_state *s, IPos cur_match)); +#else +local uInt longest_match OF((deflate_state *s, IPos cur_match)); +#endif +#endif +local uInt longest_match_fast OF((deflate_state *s, IPos cur_match)); + +#ifdef DEBUG +local void check_match OF((deflate_state *s, IPos start, IPos match, + int length)); +#endif + +/* =========================================================================== + * Local data + */ + +#define NIL 0 +/* Tail of hash chains */ + +#ifndef TOO_FAR +# define TOO_FAR 4096 +#endif +/* Matches of length 3 are discarded if their distance exceeds TOO_FAR */ + +#define MIN_LOOKAHEAD (MAX_MATCH+MIN_MATCH+1) +/* Minimum amount of lookahead, except at the end of the input file. + * See deflate.c for comments about the MIN_MATCH+1. + */ + +/* Values for max_lazy_match, good_match and max_chain_length, depending on + * the desired pack level (0..9). The values given below have been tuned to + * exclude worst case performance for pathological files. Better values may be + * found for specific files. + */ +typedef struct config_s { + ush good_length; /* reduce lazy search above this match length */ + ush max_lazy; /* do not perform lazy search above this match length */ + ush nice_length; /* quit search above this match length */ + ush max_chain; + compress_func func; +} config; + +#ifdef FASTEST +local const config configuration_table[2] = { +/* good lazy nice chain */ +/* 0 */ {0, 0, 0, 0, deflate_stored}, /* store only */ +/* 1 */ {4, 4, 8, 4, deflate_fast}}; /* max speed, no lazy matches */ +#else +local const config configuration_table[10] = { +/* good lazy nice chain */ +/* 0 */ {0, 0, 0, 0, deflate_stored}, /* store only */ +/* 1 */ {4, 4, 8, 4, deflate_fast}, /* max speed, no lazy matches */ +/* 2 */ {4, 5, 16, 8, deflate_fast}, +/* 3 */ {4, 6, 32, 32, deflate_fast}, + +/* 4 */ {4, 4, 16, 16, deflate_slow}, /* lazy matches */ +/* 5 */ {8, 16, 32, 32, deflate_slow}, +/* 6 */ {8, 16, 128, 128, deflate_slow}, +/* 7 */ {8, 32, 128, 256, deflate_slow}, +/* 8 */ {32, 128, 258, 1024, deflate_slow}, +/* 9 */ {32, 258, 258, 4096, deflate_slow}}; /* max compression */ +#endif + +/* Note: the deflate() code requires max_lazy >= MIN_MATCH and max_chain >= 4 + * For deflate_fast() (levels <= 3) good is ignored and lazy has a different + * meaning. + */ + +#define EQUAL 0 +/* result of memcmp for equal strings */ + +#ifndef NO_DUMMY_DECL +struct static_tree_desc_s {int dummy;}; /* for buggy compilers */ +#endif + +/* =========================================================================== + * Update a hash value with the given input byte + * IN assertion: all calls to to UPDATE_HASH are made with consecutive + * input characters, so that a running hash key can be computed from the + * previous key instead of complete recalculation each time. + */ +#define UPDATE_HASH(s,h,c) (h = (((h)<hash_shift) ^ (c)) & s->hash_mask) + + +/* =========================================================================== + * Insert string str in the dictionary and set match_head to the previous head + * of the hash chain (the most recent string with same hash key). Return + * the previous length of the hash chain. + * If this file is compiled with -DFASTEST, the compression level is forced + * to 1, and no hash chains are maintained. + * IN assertion: all calls to to INSERT_STRING are made with consecutive + * input characters and the first MIN_MATCH bytes of str are valid + * (except for the last MIN_MATCH-1 bytes of the input file). + */ +#ifdef FASTEST +#define INSERT_STRING(s, str, match_head) \ + (UPDATE_HASH(s, s->ins_h, s->window[(str) + (MIN_MATCH-1)]), \ + match_head = s->head[s->ins_h], \ + s->head[s->ins_h] = (Pos)(str)) +#else +#define INSERT_STRING(s, str, match_head) \ + (UPDATE_HASH(s, s->ins_h, s->window[(str) + (MIN_MATCH-1)]), \ + match_head = s->prev[(str) & s->w_mask] = s->head[s->ins_h], \ + s->head[s->ins_h] = (Pos)(str)) +#endif + +/* =========================================================================== + * Initialize the hash table (avoiding 64K overflow for 16 bit systems). + * prev[] will be initialized on the fly. + */ +#define CLEAR_HASH(s) \ + s->head[s->hash_size-1] = NIL; \ + zmemzero((Bytef *)s->head, (unsigned)(s->hash_size-1)*sizeof(*s->head)); + +/* ========================================================================= */ +int ZEXPORT deflateInit_(strm, level, version, stream_size) + z_streamp strm; + int level; + const char *version; + int stream_size; +{ + return deflateInit2_(strm, level, Z_DEFLATED, MAX_WBITS, DEF_MEM_LEVEL, + Z_DEFAULT_STRATEGY, version, stream_size); + /* To do: ignore strm->next_in if we use it as window */ +} + +/* ========================================================================= */ +int ZEXPORT deflateInit2_(strm, level, method, windowBits, memLevel, strategy, + version, stream_size) + z_streamp strm; + int level; + int method; + int windowBits; + int memLevel; + int strategy; + const char *version; + int stream_size; +{ + deflate_state *s; + int wrap = 1; + static const char my_version[] = ZLIB_VERSION; + + ushf *overlay; + /* We overlay pending_buf and d_buf+l_buf. This works since the average + * output size for (length,distance) codes is <= 24 bits. + */ + + if (version == Z_NULL || version[0] != my_version[0] || + stream_size != sizeof(z_stream)) { + return Z_VERSION_ERROR; + } + if (strm == Z_NULL) return Z_STREAM_ERROR; + + strm->msg = Z_NULL; + if (strm->zalloc == (alloc_func)0) { + strm->zalloc = zcalloc; + strm->opaque = (voidpf)0; + } + if (strm->zfree == (free_func)0) strm->zfree = zcfree; + +#ifdef FASTEST + if (level != 0) level = 1; +#else + if (level == Z_DEFAULT_COMPRESSION) level = 6; +#endif + + if (windowBits < 0) { /* suppress zlib wrapper */ + wrap = 0; + windowBits = -windowBits; + } +#ifdef GZIP + else if (windowBits > 15) { + wrap = 2; /* write gzip wrapper instead */ + windowBits -= 16; + } +#endif + if (memLevel < 1 || memLevel > MAX_MEM_LEVEL || method != Z_DEFLATED || + windowBits < 8 || windowBits > 15 || level < 0 || level > 9 || + strategy < 0 || strategy > Z_FIXED) { + return Z_STREAM_ERROR; + } + if (windowBits == 8) windowBits = 9; /* until 256-byte window bug fixed */ + s = (deflate_state *) ZALLOC(strm, 1, sizeof(deflate_state)); + if (s == Z_NULL) return Z_MEM_ERROR; + strm->state = (struct internal_state FAR *)s; + s->strm = strm; + + s->wrap = wrap; + s->gzhead = Z_NULL; + s->w_bits = windowBits; + s->w_size = 1 << s->w_bits; + s->w_mask = s->w_size - 1; + + s->hash_bits = memLevel + 7; + s->hash_size = 1 << s->hash_bits; + s->hash_mask = s->hash_size - 1; + s->hash_shift = ((s->hash_bits+MIN_MATCH-1)/MIN_MATCH); + + s->window = (Bytef *) ZALLOC(strm, s->w_size, 2*sizeof(Byte)); + s->prev = (Posf *) ZALLOC(strm, s->w_size, sizeof(Pos)); + s->head = (Posf *) ZALLOC(strm, s->hash_size, sizeof(Pos)); + + s->lit_bufsize = 1 << (memLevel + 6); /* 16K elements by default */ + + overlay = (ushf *) ZALLOC(strm, s->lit_bufsize, sizeof(ush)+2); + s->pending_buf = (uchf *) overlay; + s->pending_buf_size = (ulg)s->lit_bufsize * (sizeof(ush)+2L); + + if (s->window == Z_NULL || s->prev == Z_NULL || s->head == Z_NULL || + s->pending_buf == Z_NULL) { + s->status = FINISH_STATE; + strm->msg = (char*)ERR_MSG(Z_MEM_ERROR); + deflateEnd (strm); + return Z_MEM_ERROR; + } + s->d_buf = overlay + s->lit_bufsize/sizeof(ush); + s->l_buf = s->pending_buf + (1+sizeof(ush))*s->lit_bufsize; + + s->level = level; + s->strategy = strategy; + s->method = (Byte)method; + + return deflateReset(strm); +} + +/* ========================================================================= */ +int ZEXPORT deflateSetDictionary (strm, dictionary, dictLength) + z_streamp strm; + const Bytef *dictionary; + uInt dictLength; +{ + deflate_state *s; + uInt length = dictLength; + uInt n; + IPos hash_head = 0; + + if (strm == Z_NULL || strm->state == Z_NULL || dictionary == Z_NULL || + strm->state->wrap == 2 || + (strm->state->wrap == 1 && strm->state->status != INIT_STATE)) + return Z_STREAM_ERROR; + + s = strm->state; + if (s->wrap) + strm->adler = adler32(strm->adler, dictionary, dictLength); + + if (length < MIN_MATCH) return Z_OK; + if (length > MAX_DIST(s)) { + length = MAX_DIST(s); + dictionary += dictLength - length; /* use the tail of the dictionary */ + } + zmemcpy(s->window, dictionary, length); + s->strstart = length; + s->block_start = (long)length; + + /* Insert all strings in the hash table (except for the last two bytes). + * s->lookahead stays null, so s->ins_h will be recomputed at the next + * call of fill_window. + */ + s->ins_h = s->window[0]; + UPDATE_HASH(s, s->ins_h, s->window[1]); + for (n = 0; n <= length - MIN_MATCH; n++) { + INSERT_STRING(s, n, hash_head); + } + if (hash_head) hash_head = 0; /* to make compiler happy */ + return Z_OK; +} + +/* ========================================================================= */ +int ZEXPORT deflateReset (strm) + z_streamp strm; +{ + deflate_state *s; + + if (strm == Z_NULL || strm->state == Z_NULL || + strm->zalloc == (alloc_func)0 || strm->zfree == (free_func)0) { + return Z_STREAM_ERROR; + } + + strm->total_in = strm->total_out = 0; + strm->msg = Z_NULL; /* use zfree if we ever allocate msg dynamically */ + strm->data_type = Z_UNKNOWN; + + s = (deflate_state *)strm->state; + s->pending = 0; + s->pending_out = s->pending_buf; + + if (s->wrap < 0) { + s->wrap = -s->wrap; /* was made negative by deflate(..., Z_FINISH); */ + } + s->status = s->wrap ? INIT_STATE : BUSY_STATE; + strm->adler = +#ifdef GZIP + s->wrap == 2 ? crc32(0L, Z_NULL, 0) : +#endif + adler32(0L, Z_NULL, 0); + s->last_flush = Z_NO_FLUSH; + + _tr_init(s); + lm_init(s); + + return Z_OK; +} + +/* ========================================================================= */ +int ZEXPORT deflateSetHeader (strm, head) + z_streamp strm; + gz_headerp head; +{ + if (strm == Z_NULL || strm->state == Z_NULL) return Z_STREAM_ERROR; + if (strm->state->wrap != 2) return Z_STREAM_ERROR; + strm->state->gzhead = head; + return Z_OK; +} + +/* ========================================================================= */ +int ZEXPORT deflatePrime (strm, bits, value) + z_streamp strm; + int bits; + int value; +{ + if (strm == Z_NULL || strm->state == Z_NULL) return Z_STREAM_ERROR; + strm->state->bi_valid = bits; + strm->state->bi_buf = (ush)(value & ((1 << bits) - 1)); + return Z_OK; +} + +/* ========================================================================= */ +int ZEXPORT deflateParams(strm, level, strategy) + z_streamp strm; + int level; + int strategy; +{ + deflate_state *s; + compress_func func; + int err = Z_OK; + + if (strm == Z_NULL || strm->state == Z_NULL) return Z_STREAM_ERROR; + s = strm->state; + +#ifdef FASTEST + if (level != 0) level = 1; +#else + if (level == Z_DEFAULT_COMPRESSION) level = 6; +#endif + if (level < 0 || level > 9 || strategy < 0 || strategy > Z_FIXED) { + return Z_STREAM_ERROR; + } + func = configuration_table[s->level].func; + + if (func != configuration_table[level].func && strm->total_in != 0) { + /* Flush the last buffer: */ + err = deflate(strm, Z_PARTIAL_FLUSH); + } + if (s->level != level) { + s->level = level; + s->max_lazy_match = configuration_table[level].max_lazy; + s->good_match = configuration_table[level].good_length; + s->nice_match = configuration_table[level].nice_length; + s->max_chain_length = configuration_table[level].max_chain; + } + s->strategy = strategy; + return err; +} + +/* ========================================================================= */ +int ZEXPORT deflateTune(strm, good_length, max_lazy, nice_length, max_chain) + z_streamp strm; + int good_length; + int max_lazy; + int nice_length; + int max_chain; +{ + deflate_state *s; + + if (strm == Z_NULL || strm->state == Z_NULL) return Z_STREAM_ERROR; + s = strm->state; + s->good_match = good_length; + s->max_lazy_match = max_lazy; + s->nice_match = nice_length; + s->max_chain_length = max_chain; + return Z_OK; +} + +/* ========================================================================= + * For the default windowBits of 15 and memLevel of 8, this function returns + * a close to exact, as well as small, upper bound on the compressed size. + * They are coded as constants here for a reason--if the #define's are + * changed, then this function needs to be changed as well. The return + * value for 15 and 8 only works for those exact settings. + * + * For any setting other than those defaults for windowBits and memLevel, + * the value returned is a conservative worst case for the maximum expansion + * resulting from using fixed blocks instead of stored blocks, which deflate + * can emit on compressed data for some combinations of the parameters. + * + * This function could be more sophisticated to provide closer upper bounds + * for every combination of windowBits and memLevel, as well as wrap. + * But even the conservative upper bound of about 14% expansion does not + * seem onerous for output buffer allocation. + */ +uLong ZEXPORT deflateBound(strm, sourceLen) + z_streamp strm; + uLong sourceLen; +{ + deflate_state *s; + uLong destLen; + + /* conservative upper bound */ + destLen = sourceLen + + ((sourceLen + 7) >> 3) + ((sourceLen + 63) >> 6) + 11; + + /* if can't get parameters, return conservative bound */ + if (strm == Z_NULL || strm->state == Z_NULL) + return destLen; + + /* if not default parameters, return conservative bound */ + s = strm->state; + if (s->w_bits != 15 || s->hash_bits != 8 + 7) + return destLen; + + /* default settings: return tight bound for that case */ + return compressBound(sourceLen); +} + +/* ========================================================================= + * Put a short in the pending buffer. The 16-bit value is put in MSB order. + * IN assertion: the stream state is correct and there is enough room in + * pending_buf. + */ +local void putShortMSB (s, b) + deflate_state *s; + uInt b; +{ + put_byte(s, (Byte)(b >> 8)); + put_byte(s, (Byte)(b & 0xff)); +} + +/* ========================================================================= + * Flush as much pending output as possible. All deflate() output goes + * through this function so some applications may wish to modify it + * to avoid allocating a large strm->next_out buffer and copying into it. + * (See also read_buf()). + */ +local void flush_pending(strm) + z_streamp strm; +{ + unsigned len = strm->state->pending; + + if (len > strm->avail_out) len = strm->avail_out; + if (len == 0) return; + + zmemcpy(strm->next_out, strm->state->pending_out, len); + strm->next_out += len; + strm->state->pending_out += len; + strm->total_out += len; + strm->avail_out -= len; + strm->state->pending -= len; + if (strm->state->pending == 0) { + strm->state->pending_out = strm->state->pending_buf; + } +} + +/* ========================================================================= */ +int ZEXPORT deflate (strm, flush) + z_streamp strm; + int flush; +{ + int old_flush; /* value of flush param for previous deflate call */ + deflate_state *s; + + if (strm == Z_NULL || strm->state == Z_NULL || + flush > Z_FINISH || flush < 0) { + return Z_STREAM_ERROR; + } + s = strm->state; + + if (strm->next_out == Z_NULL || + (strm->next_in == Z_NULL && strm->avail_in != 0) || + (s->status == FINISH_STATE && flush != Z_FINISH)) { + ERR_RETURN(strm, Z_STREAM_ERROR); + } + if (strm->avail_out == 0) ERR_RETURN(strm, Z_BUF_ERROR); + + s->strm = strm; /* just in case */ + old_flush = s->last_flush; + s->last_flush = flush; + + /* Write the header */ + if (s->status == INIT_STATE) { +#ifdef GZIP + if (s->wrap == 2) { + strm->adler = crc32(0L, Z_NULL, 0); + put_byte(s, 31); + put_byte(s, 139); + put_byte(s, 8); + if (s->gzhead == NULL) { + put_byte(s, 0); + put_byte(s, 0); + put_byte(s, 0); + put_byte(s, 0); + put_byte(s, 0); + put_byte(s, s->level == 9 ? 2 : + (s->strategy >= Z_HUFFMAN_ONLY || s->level < 2 ? + 4 : 0)); + put_byte(s, OS_CODE); + s->status = BUSY_STATE; + } + else { + put_byte(s, (s->gzhead->text ? 1 : 0) + + (s->gzhead->hcrc ? 2 : 0) + + (s->gzhead->extra == Z_NULL ? 0 : 4) + + (s->gzhead->name == Z_NULL ? 0 : 8) + + (s->gzhead->comment == Z_NULL ? 0 : 16) + ); + put_byte(s, (Byte)(s->gzhead->time & 0xff)); + put_byte(s, (Byte)((s->gzhead->time >> 8) & 0xff)); + put_byte(s, (Byte)((s->gzhead->time >> 16) & 0xff)); + put_byte(s, (Byte)((s->gzhead->time >> 24) & 0xff)); + put_byte(s, s->level == 9 ? 2 : + (s->strategy >= Z_HUFFMAN_ONLY || s->level < 2 ? + 4 : 0)); + put_byte(s, s->gzhead->os & 0xff); + if (s->gzhead->extra != NULL) { + put_byte(s, s->gzhead->extra_len & 0xff); + put_byte(s, (s->gzhead->extra_len >> 8) & 0xff); + } + if (s->gzhead->hcrc) + strm->adler = crc32(strm->adler, s->pending_buf, + s->pending); + s->gzindex = 0; + s->status = EXTRA_STATE; + } + } + else +#endif + { + uInt header = (Z_DEFLATED + ((s->w_bits-8)<<4)) << 8; + uInt level_flags; + + if (s->strategy >= Z_HUFFMAN_ONLY || s->level < 2) + level_flags = 0; + else if (s->level < 6) + level_flags = 1; + else if (s->level == 6) + level_flags = 2; + else + level_flags = 3; + header |= (level_flags << 6); + if (s->strstart != 0) header |= PRESET_DICT; + header += 31 - (header % 31); + + s->status = BUSY_STATE; + putShortMSB(s, header); + + /* Save the adler32 of the preset dictionary: */ + if (s->strstart != 0) { + putShortMSB(s, (uInt)(strm->adler >> 16)); + putShortMSB(s, (uInt)(strm->adler & 0xffff)); + } + strm->adler = adler32(0L, Z_NULL, 0); + } + } +#ifdef GZIP + if (s->status == EXTRA_STATE) { + if (s->gzhead->extra != NULL) { + uInt beg = s->pending; /* start of bytes to update crc */ + + while (s->gzindex < (s->gzhead->extra_len & 0xffff)) { + if (s->pending == s->pending_buf_size) { + if (s->gzhead->hcrc && s->pending > beg) + strm->adler = crc32(strm->adler, s->pending_buf + beg, + s->pending - beg); + flush_pending(strm); + beg = s->pending; + if (s->pending == s->pending_buf_size) + break; + } + put_byte(s, s->gzhead->extra[s->gzindex]); + s->gzindex++; + } + if (s->gzhead->hcrc && s->pending > beg) + strm->adler = crc32(strm->adler, s->pending_buf + beg, + s->pending - beg); + if (s->gzindex == s->gzhead->extra_len) { + s->gzindex = 0; + s->status = NAME_STATE; + } + } + else + s->status = NAME_STATE; + } + if (s->status == NAME_STATE) { + if (s->gzhead->name != NULL) { + uInt beg = s->pending; /* start of bytes to update crc */ + int val; + + do { + if (s->pending == s->pending_buf_size) { + if (s->gzhead->hcrc && s->pending > beg) + strm->adler = crc32(strm->adler, s->pending_buf + beg, + s->pending - beg); + flush_pending(strm); + beg = s->pending; + if (s->pending == s->pending_buf_size) { + val = 1; + break; + } + } + val = s->gzhead->name[s->gzindex++]; + put_byte(s, val); + } while (val != 0); + if (s->gzhead->hcrc && s->pending > beg) + strm->adler = crc32(strm->adler, s->pending_buf + beg, + s->pending - beg); + if (val == 0) { + s->gzindex = 0; + s->status = COMMENT_STATE; + } + } + else + s->status = COMMENT_STATE; + } + if (s->status == COMMENT_STATE) { + if (s->gzhead->comment != NULL) { + uInt beg = s->pending; /* start of bytes to update crc */ + int val; + + do { + if (s->pending == s->pending_buf_size) { + if (s->gzhead->hcrc && s->pending > beg) + strm->adler = crc32(strm->adler, s->pending_buf + beg, + s->pending - beg); + flush_pending(strm); + beg = s->pending; + if (s->pending == s->pending_buf_size) { + val = 1; + break; + } + } + val = s->gzhead->comment[s->gzindex++]; + put_byte(s, val); + } while (val != 0); + if (s->gzhead->hcrc && s->pending > beg) + strm->adler = crc32(strm->adler, s->pending_buf + beg, + s->pending - beg); + if (val == 0) + s->status = HCRC_STATE; + } + else + s->status = HCRC_STATE; + } + if (s->status == HCRC_STATE) { + if (s->gzhead->hcrc) { + if (s->pending + 2 > s->pending_buf_size) + flush_pending(strm); + if (s->pending + 2 <= s->pending_buf_size) { + put_byte(s, (Byte)(strm->adler & 0xff)); + put_byte(s, (Byte)((strm->adler >> 8) & 0xff)); + strm->adler = crc32(0L, Z_NULL, 0); + s->status = BUSY_STATE; + } + } + else + s->status = BUSY_STATE; + } +#endif + + /* Flush as much pending output as possible */ + if (s->pending != 0) { + flush_pending(strm); + if (strm->avail_out == 0) { + /* Since avail_out is 0, deflate will be called again with + * more output space, but possibly with both pending and + * avail_in equal to zero. There won't be anything to do, + * but this is not an error situation so make sure we + * return OK instead of BUF_ERROR at next call of deflate: + */ + s->last_flush = -1; + return Z_OK; + } + + /* Make sure there is something to do and avoid duplicate consecutive + * flushes. For repeated and useless calls with Z_FINISH, we keep + * returning Z_STREAM_END instead of Z_BUF_ERROR. + */ + } else if (strm->avail_in == 0 && flush <= old_flush && + flush != Z_FINISH) { + ERR_RETURN(strm, Z_BUF_ERROR); + } + + /* User must not provide more input after the first FINISH: */ + if (s->status == FINISH_STATE && strm->avail_in != 0) { + ERR_RETURN(strm, Z_BUF_ERROR); + } + + /* Start a new block or continue the current one. + */ + if (strm->avail_in != 0 || s->lookahead != 0 || + (flush != Z_NO_FLUSH && s->status != FINISH_STATE)) { + block_state bstate; + + bstate = (*(configuration_table[s->level].func))(s, flush); + + if (bstate == finish_started || bstate == finish_done) { + s->status = FINISH_STATE; + } + if (bstate == need_more || bstate == finish_started) { + if (strm->avail_out == 0) { + s->last_flush = -1; /* avoid BUF_ERROR next call, see above */ + } + return Z_OK; + /* If flush != Z_NO_FLUSH && avail_out == 0, the next call + * of deflate should use the same flush parameter to make sure + * that the flush is complete. So we don't have to output an + * empty block here, this will be done at next call. This also + * ensures that for a very small output buffer, we emit at most + * one empty block. + */ + } + if (bstate == block_done) { + if (flush == Z_PARTIAL_FLUSH) { + _tr_align(s); + } else { /* FULL_FLUSH or SYNC_FLUSH */ + _tr_stored_block(s, (char*)0, 0L, 0); + /* For a full flush, this empty block will be recognized + * as a special marker by inflate_sync(). + */ + if (flush == Z_FULL_FLUSH) { + CLEAR_HASH(s); /* forget history */ + } + } + flush_pending(strm); + if (strm->avail_out == 0) { + s->last_flush = -1; /* avoid BUF_ERROR at next call, see above */ + return Z_OK; + } + } + } + Assert(strm->avail_out > 0, "bug2"); + + if (flush != Z_FINISH) return Z_OK; + if (s->wrap <= 0) return Z_STREAM_END; + + /* Write the trailer */ +#ifdef GZIP + if (s->wrap == 2) { + put_byte(s, (Byte)(strm->adler & 0xff)); + put_byte(s, (Byte)((strm->adler >> 8) & 0xff)); + put_byte(s, (Byte)((strm->adler >> 16) & 0xff)); + put_byte(s, (Byte)((strm->adler >> 24) & 0xff)); + put_byte(s, (Byte)(strm->total_in & 0xff)); + put_byte(s, (Byte)((strm->total_in >> 8) & 0xff)); + put_byte(s, (Byte)((strm->total_in >> 16) & 0xff)); + put_byte(s, (Byte)((strm->total_in >> 24) & 0xff)); + } + else +#endif + { + putShortMSB(s, (uInt)(strm->adler >> 16)); + putShortMSB(s, (uInt)(strm->adler & 0xffff)); + } + flush_pending(strm); + /* If avail_out is zero, the application will call deflate again + * to flush the rest. + */ + if (s->wrap > 0) s->wrap = -s->wrap; /* write the trailer only once! */ + return s->pending != 0 ? Z_OK : Z_STREAM_END; +} + +/* ========================================================================= */ +int ZEXPORT deflateEnd (strm) + z_streamp strm; +{ + int status; + + if (strm == Z_NULL || strm->state == Z_NULL) return Z_STREAM_ERROR; + + status = strm->state->status; + if (status != INIT_STATE && + status != EXTRA_STATE && + status != NAME_STATE && + status != COMMENT_STATE && + status != HCRC_STATE && + status != BUSY_STATE && + status != FINISH_STATE) { + return Z_STREAM_ERROR; + } + + /* Deallocate in reverse order of allocations: */ + TRY_FREE(strm, strm->state->pending_buf); + TRY_FREE(strm, strm->state->head); + TRY_FREE(strm, strm->state->prev); + TRY_FREE(strm, strm->state->window); + + ZFREE(strm, strm->state); + strm->state = Z_NULL; + + return status == BUSY_STATE ? Z_DATA_ERROR : Z_OK; +} + +/* ========================================================================= + * Copy the source state to the destination state. + * To simplify the source, this is not supported for 16-bit MSDOS (which + * doesn't have enough memory anyway to duplicate compression states). + */ +int ZEXPORT deflateCopy (dest, source) + z_streamp dest; + z_streamp source; +{ +#ifdef MAXSEG_64K + return Z_STREAM_ERROR; +#else + deflate_state *ds; + deflate_state *ss; + ushf *overlay; + + + if (source == Z_NULL || dest == Z_NULL || source->state == Z_NULL) { + return Z_STREAM_ERROR; + } + + ss = source->state; + + zmemcpy(dest, source, sizeof(z_stream)); + + ds = (deflate_state *) ZALLOC(dest, 1, sizeof(deflate_state)); + if (ds == Z_NULL) return Z_MEM_ERROR; + dest->state = (struct internal_state FAR *) ds; + zmemcpy(ds, ss, sizeof(deflate_state)); + ds->strm = dest; + + ds->window = (Bytef *) ZALLOC(dest, ds->w_size, 2*sizeof(Byte)); + ds->prev = (Posf *) ZALLOC(dest, ds->w_size, sizeof(Pos)); + ds->head = (Posf *) ZALLOC(dest, ds->hash_size, sizeof(Pos)); + overlay = (ushf *) ZALLOC(dest, ds->lit_bufsize, sizeof(ush)+2); + ds->pending_buf = (uchf *) overlay; + + if (ds->window == Z_NULL || ds->prev == Z_NULL || ds->head == Z_NULL || + ds->pending_buf == Z_NULL) { + deflateEnd (dest); + return Z_MEM_ERROR; + } + /* following zmemcpy do not work for 16-bit MSDOS */ + zmemcpy(ds->window, ss->window, ds->w_size * 2 * sizeof(Byte)); + zmemcpy(ds->prev, ss->prev, ds->w_size * sizeof(Pos)); + zmemcpy(ds->head, ss->head, ds->hash_size * sizeof(Pos)); + zmemcpy(ds->pending_buf, ss->pending_buf, (uInt)ds->pending_buf_size); + + ds->pending_out = ds->pending_buf + (ss->pending_out - ss->pending_buf); + ds->d_buf = overlay + ds->lit_bufsize/sizeof(ush); + ds->l_buf = ds->pending_buf + (1+sizeof(ush))*ds->lit_bufsize; + + ds->l_desc.dyn_tree = ds->dyn_ltree; + ds->d_desc.dyn_tree = ds->dyn_dtree; + ds->bl_desc.dyn_tree = ds->bl_tree; + + return Z_OK; +#endif /* MAXSEG_64K */ +} + +/* =========================================================================== + * Read a new buffer from the current input stream, update the adler32 + * and total number of bytes read. All deflate() input goes through + * this function so some applications may wish to modify it to avoid + * allocating a large strm->next_in buffer and copying from it. + * (See also flush_pending()). + */ +local int read_buf(strm, buf, size) + z_streamp strm; + Bytef *buf; + unsigned size; +{ + unsigned len = strm->avail_in; + + if (len > size) len = size; + if (len == 0) return 0; + + strm->avail_in -= len; + + if (strm->state->wrap == 1) { + strm->adler = adler32(strm->adler, strm->next_in, len); + } +#ifdef GZIP + else if (strm->state->wrap == 2) { + strm->adler = crc32(strm->adler, strm->next_in, len); + } +#endif + zmemcpy(buf, strm->next_in, len); + strm->next_in += len; + strm->total_in += len; + + return (int)len; +} + +/* =========================================================================== + * Initialize the "longest match" routines for a new zlib stream + */ +local void lm_init (s) + deflate_state *s; +{ + s->window_size = (ulg)2L*s->w_size; + + CLEAR_HASH(s); + + /* Set the default configuration parameters: + */ + s->max_lazy_match = configuration_table[s->level].max_lazy; + s->good_match = configuration_table[s->level].good_length; + s->nice_match = configuration_table[s->level].nice_length; + s->max_chain_length = configuration_table[s->level].max_chain; + + s->strstart = 0; + s->block_start = 0L; + s->lookahead = 0; + s->match_length = s->prev_length = MIN_MATCH-1; + s->match_available = 0; + s->ins_h = 0; +#ifndef FASTEST +#ifdef ASMV + match_init(); /* initialize the asm code */ +#endif +#endif +} + +#ifndef FASTEST +/* =========================================================================== + * Set match_start to the longest match starting at the given string and + * return its length. Matches shorter or equal to prev_length are discarded, + * in which case the result is equal to prev_length and match_start is + * garbage. + * IN assertions: cur_match is the head of the hash chain for the current + * string (strstart) and its distance is <= MAX_DIST, and prev_length >= 1 + * OUT assertion: the match length is not greater than s->lookahead. + */ +#ifndef ASMV +/* For 80x86 and 680x0, an optimized version will be provided in match.asm or + * match.S. The code will be functionally equivalent. + */ +local uInt longest_match(s, cur_match) + deflate_state *s; + IPos cur_match; /* current match */ +{ + unsigned chain_length = s->max_chain_length;/* max hash chain length */ + register Bytef *scan = s->window + s->strstart; /* current string */ + register Bytef *match; /* matched string */ + register int len; /* length of current match */ + int best_len = s->prev_length; /* best match length so far */ + int nice_match = s->nice_match; /* stop if match long enough */ + IPos limit = s->strstart > (IPos)MAX_DIST(s) ? + s->strstart - (IPos)MAX_DIST(s) : NIL; + /* Stop when cur_match becomes <= limit. To simplify the code, + * we prevent matches with the string of window index 0. + */ + Posf *prev = s->prev; + uInt wmask = s->w_mask; + +#ifdef UNALIGNED_OK + /* Compare two bytes at a time. Note: this is not always beneficial. + * Try with and without -DUNALIGNED_OK to check. + */ + register Bytef *strend = s->window + s->strstart + MAX_MATCH - 1; + register ush scan_start = *(ushf*)scan; + register ush scan_end = *(ushf*)(scan+best_len-1); +#else + register Bytef *strend = s->window + s->strstart + MAX_MATCH; + register Byte scan_end1 = scan[best_len-1]; + register Byte scan_end = scan[best_len]; +#endif + + /* The code is optimized for HASH_BITS >= 8 and MAX_MATCH-2 multiple of 16. + * It is easy to get rid of this optimization if necessary. + */ + Assert(s->hash_bits >= 8 && MAX_MATCH == 258, "Code too clever"); + + /* Do not waste too much time if we already have a good match: */ + if (s->prev_length >= s->good_match) { + chain_length >>= 2; + } + /* Do not look for matches beyond the end of the input. This is necessary + * to make deflate deterministic. + */ + if ((uInt)nice_match > s->lookahead) nice_match = s->lookahead; + + Assert((ulg)s->strstart <= s->window_size-MIN_LOOKAHEAD, "need lookahead"); + + do { + Assert(cur_match < s->strstart, "no future"); + match = s->window + cur_match; + + /* Skip to next match if the match length cannot increase + * or if the match length is less than 2. Note that the checks below + * for insufficient lookahead only occur occasionally for performance + * reasons. Therefore uninitialized memory will be accessed, and + * conditional jumps will be made that depend on those values. + * However the length of the match is limited to the lookahead, so + * the output of deflate is not affected by the uninitialized values. + */ +#if (defined(UNALIGNED_OK) && MAX_MATCH == 258) + /* This code assumes sizeof(unsigned short) == 2. Do not use + * UNALIGNED_OK if your compiler uses a different size. + */ + if (*(ushf*)(match+best_len-1) != scan_end || + *(ushf*)match != scan_start) continue; + + /* It is not necessary to compare scan[2] and match[2] since they are + * always equal when the other bytes match, given that the hash keys + * are equal and that HASH_BITS >= 8. Compare 2 bytes at a time at + * strstart+3, +5, ... up to strstart+257. We check for insufficient + * lookahead only every 4th comparison; the 128th check will be made + * at strstart+257. If MAX_MATCH-2 is not a multiple of 8, it is + * necessary to put more guard bytes at the end of the window, or + * to check more often for insufficient lookahead. + */ + Assert(scan[2] == match[2], "scan[2]?"); + scan++, match++; + do { + } while (*(ushf*)(scan+=2) == *(ushf*)(match+=2) && + *(ushf*)(scan+=2) == *(ushf*)(match+=2) && + *(ushf*)(scan+=2) == *(ushf*)(match+=2) && + *(ushf*)(scan+=2) == *(ushf*)(match+=2) && + scan < strend); + /* The funny "do {}" generates better code on most compilers */ + + /* Here, scan <= window+strstart+257 */ + Assert(scan <= s->window+(unsigned)(s->window_size-1), "wild scan"); + if (*scan == *match) scan++; + + len = (MAX_MATCH - 1) - (int)(strend-scan); + scan = strend - (MAX_MATCH-1); + +#else /* UNALIGNED_OK */ + + if (match[best_len] != scan_end || + match[best_len-1] != scan_end1 || + *match != *scan || + *++match != scan[1]) continue; + + /* The check at best_len-1 can be removed because it will be made + * again later. (This heuristic is not always a win.) + * It is not necessary to compare scan[2] and match[2] since they + * are always equal when the other bytes match, given that + * the hash keys are equal and that HASH_BITS >= 8. + */ + scan += 2, match++; + Assert(*scan == *match, "match[2]?"); + + /* We check for insufficient lookahead only every 8th comparison; + * the 256th check will be made at strstart+258. + */ + do { + } while (*++scan == *++match && *++scan == *++match && + *++scan == *++match && *++scan == *++match && + *++scan == *++match && *++scan == *++match && + *++scan == *++match && *++scan == *++match && + scan < strend); + + Assert(scan <= s->window+(unsigned)(s->window_size-1), "wild scan"); + + len = MAX_MATCH - (int)(strend - scan); + scan = strend - MAX_MATCH; + +#endif /* UNALIGNED_OK */ + + if (len > best_len) { + s->match_start = cur_match; + best_len = len; + if (len >= nice_match) break; +#ifdef UNALIGNED_OK + scan_end = *(ushf*)(scan+best_len-1); +#else + scan_end1 = scan[best_len-1]; + scan_end = scan[best_len]; +#endif + } + } while ((cur_match = prev[cur_match & wmask]) > limit + && --chain_length != 0); + + if ((uInt)best_len <= s->lookahead) return (uInt)best_len; + return s->lookahead; +} +#endif /* ASMV */ +#endif /* FASTEST */ + +/* --------------------------------------------------------------------------- + * Optimized version for level == 1 or strategy == Z_RLE only + */ +local uInt longest_match_fast(s, cur_match) + deflate_state *s; + IPos cur_match; /* current match */ +{ + register Bytef *scan = s->window + s->strstart; /* current string */ + register Bytef *match; /* matched string */ + register int len; /* length of current match */ + register Bytef *strend = s->window + s->strstart + MAX_MATCH; + + /* The code is optimized for HASH_BITS >= 8 and MAX_MATCH-2 multiple of 16. + * It is easy to get rid of this optimization if necessary. + */ + Assert(s->hash_bits >= 8 && MAX_MATCH == 258, "Code too clever"); + + Assert((ulg)s->strstart <= s->window_size-MIN_LOOKAHEAD, "need lookahead"); + + Assert(cur_match < s->strstart, "no future"); + + match = s->window + cur_match; + + /* Return failure if the match length is less than 2: + */ + if (match[0] != scan[0] || match[1] != scan[1]) return MIN_MATCH-1; + + /* The check at best_len-1 can be removed because it will be made + * again later. (This heuristic is not always a win.) + * It is not necessary to compare scan[2] and match[2] since they + * are always equal when the other bytes match, given that + * the hash keys are equal and that HASH_BITS >= 8. + */ + scan += 2, match += 2; + Assert(*scan == *match, "match[2]?"); + + /* We check for insufficient lookahead only every 8th comparison; + * the 256th check will be made at strstart+258. + */ + do { + } while (*++scan == *++match && *++scan == *++match && + *++scan == *++match && *++scan == *++match && + *++scan == *++match && *++scan == *++match && + *++scan == *++match && *++scan == *++match && + scan < strend); + + Assert(scan <= s->window+(unsigned)(s->window_size-1), "wild scan"); + + len = MAX_MATCH - (int)(strend - scan); + + if (len < MIN_MATCH) return MIN_MATCH - 1; + + s->match_start = cur_match; + return (uInt)len <= s->lookahead ? (uInt)len : s->lookahead; +} + +#ifdef DEBUG +/* =========================================================================== + * Check that the match at match_start is indeed a match. + */ +local void check_match(s, start, match, length) + deflate_state *s; + IPos start, match; + int length; +{ + /* check that the match is indeed a match */ + if (zmemcmp(s->window + match, + s->window + start, length) != EQUAL) { + fprintf(stderr, " start %u, match %u, length %d\n", + start, match, length); + do { + fprintf(stderr, "%c%c", s->window[match++], s->window[start++]); + } while (--length != 0); + z_error("invalid match"); + } + if (z_verbose > 1) { + fprintf(stderr,"\\[%d,%d]", start-match, length); + do { putc(s->window[start++], stderr); } while (--length != 0); + } +} +#else +# define check_match(s, start, match, length) +#endif /* DEBUG */ + +/* =========================================================================== + * Fill the window when the lookahead becomes insufficient. + * Updates strstart and lookahead. + * + * IN assertion: lookahead < MIN_LOOKAHEAD + * OUT assertions: strstart <= window_size-MIN_LOOKAHEAD + * At least one byte has been read, or avail_in == 0; reads are + * performed for at least two bytes (required for the zip translate_eol + * option -- not supported here). + */ +local void fill_window(s) + deflate_state *s; +{ + register unsigned n, m; + register Posf *p; + unsigned more; /* Amount of free space at the end of the window. */ + uInt wsize = s->w_size; + + do { + more = (unsigned)(s->window_size -(ulg)s->lookahead -(ulg)s->strstart); + + /* Deal with !@#$% 64K limit: */ + if (sizeof(int) <= 2) { + if (more == 0 && s->strstart == 0 && s->lookahead == 0) { + more = wsize; + + } else if (more == (unsigned)(-1)) { + /* Very unlikely, but possible on 16 bit machine if + * strstart == 0 && lookahead == 1 (input done a byte at time) + */ + more--; + } + } + + /* If the window is almost full and there is insufficient lookahead, + * move the upper half to the lower one to make room in the upper half. + */ + if (s->strstart >= wsize+MAX_DIST(s)) { + + zmemcpy(s->window, s->window+wsize, (unsigned)wsize); + s->match_start -= wsize; + s->strstart -= wsize; /* we now have strstart >= MAX_DIST */ + s->block_start -= (long) wsize; + + /* Slide the hash table (could be avoided with 32 bit values + at the expense of memory usage). We slide even when level == 0 + to keep the hash table consistent if we switch back to level > 0 + later. (Using level 0 permanently is not an optimal usage of + zlib, so we don't care about this pathological case.) + */ + /* %%% avoid this when Z_RLE */ + n = s->hash_size; + p = &s->head[n]; + do { + m = *--p; + *p = (Pos)(m >= wsize ? m-wsize : NIL); + } while (--n); + + n = wsize; +#ifndef FASTEST + p = &s->prev[n]; + do { + m = *--p; + *p = (Pos)(m >= wsize ? m-wsize : NIL); + /* If n is not on any hash chain, prev[n] is garbage but + * its value will never be used. + */ + } while (--n); +#endif + more += wsize; + } + if (s->strm->avail_in == 0) return; + + /* If there was no sliding: + * strstart <= WSIZE+MAX_DIST-1 && lookahead <= MIN_LOOKAHEAD - 1 && + * more == window_size - lookahead - strstart + * => more >= window_size - (MIN_LOOKAHEAD-1 + WSIZE + MAX_DIST-1) + * => more >= window_size - 2*WSIZE + 2 + * In the BIG_MEM or MMAP case (not yet supported), + * window_size == input_size + MIN_LOOKAHEAD && + * strstart + s->lookahead <= input_size => more >= MIN_LOOKAHEAD. + * Otherwise, window_size == 2*WSIZE so more >= 2. + * If there was sliding, more >= WSIZE. So in all cases, more >= 2. + */ + Assert(more >= 2, "more < 2"); + + n = read_buf(s->strm, s->window + s->strstart + s->lookahead, more); + s->lookahead += n; + + /* Initialize the hash value now that we have some input: */ + if (s->lookahead >= MIN_MATCH) { + s->ins_h = s->window[s->strstart]; + UPDATE_HASH(s, s->ins_h, s->window[s->strstart+1]); +#if MIN_MATCH != 3 + Call UPDATE_HASH() MIN_MATCH-3 more times +#endif + } + /* If the whole input has less than MIN_MATCH bytes, ins_h is garbage, + * but this is not important since only literal bytes will be emitted. + */ + + } while (s->lookahead < MIN_LOOKAHEAD && s->strm->avail_in != 0); +} + +/* =========================================================================== + * Flush the current block, with given end-of-file flag. + * IN assertion: strstart is set to the end of the current match. + */ +#define FLUSH_BLOCK_ONLY(s, eof) { \ + _tr_flush_block(s, (s->block_start >= 0L ? \ + (charf *)&s->window[(unsigned)s->block_start] : \ + (charf *)Z_NULL), \ + (ulg)((long)s->strstart - s->block_start), \ + (eof)); \ + s->block_start = s->strstart; \ + flush_pending(s->strm); \ + Tracev((stderr,"[FLUSH]")); \ +} + +/* Same but force premature exit if necessary. */ +#define FLUSH_BLOCK(s, eof) { \ + FLUSH_BLOCK_ONLY(s, eof); \ + if (s->strm->avail_out == 0) return (eof) ? finish_started : need_more; \ +} + +/* =========================================================================== + * Copy without compression as much as possible from the input stream, return + * the current block state. + * This function does not insert new strings in the dictionary since + * uncompressible data is probably not useful. This function is used + * only for the level=0 compression option. + * NOTE: this function should be optimized to avoid extra copying from + * window to pending_buf. + */ +local block_state deflate_stored(s, flush) + deflate_state *s; + int flush; +{ + /* Stored blocks are limited to 0xffff bytes, pending_buf is limited + * to pending_buf_size, and each stored block has a 5 byte header: + */ + ulg max_block_size = 0xffff; + ulg max_start; + + if (max_block_size > s->pending_buf_size - 5) { + max_block_size = s->pending_buf_size - 5; + } + + /* Copy as much as possible from input to output: */ + for (;;) { + /* Fill the window as much as possible: */ + if (s->lookahead <= 1) { + + Assert(s->strstart < s->w_size+MAX_DIST(s) || + s->block_start >= (long)s->w_size, "slide too late"); + + fill_window(s); + if (s->lookahead == 0 && flush == Z_NO_FLUSH) return need_more; + + if (s->lookahead == 0) break; /* flush the current block */ + } + Assert(s->block_start >= 0L, "block gone"); + + s->strstart += s->lookahead; + s->lookahead = 0; + + /* Emit a stored block if pending_buf will be full: */ + max_start = s->block_start + max_block_size; + if (s->strstart == 0 || (ulg)s->strstart >= max_start) { + /* strstart == 0 is possible when wraparound on 16-bit machine */ + s->lookahead = (uInt)(s->strstart - max_start); + s->strstart = (uInt)max_start; + FLUSH_BLOCK(s, 0); + } + /* Flush if we may have to slide, otherwise block_start may become + * negative and the data will be gone: + */ + if (s->strstart - (uInt)s->block_start >= MAX_DIST(s)) { + FLUSH_BLOCK(s, 0); + } + } + FLUSH_BLOCK(s, flush == Z_FINISH); + return flush == Z_FINISH ? finish_done : block_done; +} + +/* =========================================================================== + * Compress as much as possible from the input stream, return the current + * block state. + * This function does not perform lazy evaluation of matches and inserts + * new strings in the dictionary only for unmatched strings or for short + * matches. It is used only for the fast compression options. + */ +local block_state deflate_fast(s, flush) + deflate_state *s; + int flush; +{ + IPos hash_head = NIL; /* head of the hash chain */ + int bflush; /* set if current block must be flushed */ + + for (;;) { + /* Make sure that we always have enough lookahead, except + * at the end of the input file. We need MAX_MATCH bytes + * for the next match, plus MIN_MATCH bytes to insert the + * string following the next match. + */ + if (s->lookahead < MIN_LOOKAHEAD) { + fill_window(s); + if (s->lookahead < MIN_LOOKAHEAD && flush == Z_NO_FLUSH) { + return need_more; + } + if (s->lookahead == 0) break; /* flush the current block */ + } + + /* Insert the string window[strstart .. strstart+2] in the + * dictionary, and set hash_head to the head of the hash chain: + */ + if (s->lookahead >= MIN_MATCH) { + INSERT_STRING(s, s->strstart, hash_head); + } + + /* Find the longest match, discarding those <= prev_length. + * At this point we have always match_length < MIN_MATCH + */ + if (hash_head != NIL && s->strstart - hash_head <= MAX_DIST(s)) { + /* To simplify the code, we prevent matches with the string + * of window index 0 (in particular we have to avoid a match + * of the string with itself at the start of the input file). + */ +#ifdef FASTEST + if ((s->strategy != Z_HUFFMAN_ONLY && s->strategy != Z_RLE) || + (s->strategy == Z_RLE && s->strstart - hash_head == 1)) { + s->match_length = longest_match_fast (s, hash_head); + } +#else + if (s->strategy != Z_HUFFMAN_ONLY && s->strategy != Z_RLE) { + s->match_length = longest_match (s, hash_head); + } else if (s->strategy == Z_RLE && s->strstart - hash_head == 1) { + s->match_length = longest_match_fast (s, hash_head); + } +#endif + /* longest_match() or longest_match_fast() sets match_start */ + } + if (s->match_length >= MIN_MATCH) { + check_match(s, s->strstart, s->match_start, s->match_length); + + _tr_tally_dist(s, s->strstart - s->match_start, + s->match_length - MIN_MATCH, bflush); + + s->lookahead -= s->match_length; + + /* Insert new strings in the hash table only if the match length + * is not too large. This saves time but degrades compression. + */ +#ifndef FASTEST + if (s->match_length <= s->max_insert_length && + s->lookahead >= MIN_MATCH) { + s->match_length--; /* string at strstart already in table */ + do { + s->strstart++; + INSERT_STRING(s, s->strstart, hash_head); + /* strstart never exceeds WSIZE-MAX_MATCH, so there are + * always MIN_MATCH bytes ahead. + */ + } while (--s->match_length != 0); + s->strstart++; + } else +#endif + { + s->strstart += s->match_length; + s->match_length = 0; + s->ins_h = s->window[s->strstart]; + UPDATE_HASH(s, s->ins_h, s->window[s->strstart+1]); +#if MIN_MATCH != 3 + Call UPDATE_HASH() MIN_MATCH-3 more times +#endif + /* If lookahead < MIN_MATCH, ins_h is garbage, but it does not + * matter since it will be recomputed at next deflate call. + */ + } + } else { + /* No match, output a literal byte */ + Tracevv((stderr,"%c", s->window[s->strstart])); + _tr_tally_lit (s, s->window[s->strstart], bflush); + s->lookahead--; + s->strstart++; + } + if (bflush) FLUSH_BLOCK(s, 0); + } + FLUSH_BLOCK(s, flush == Z_FINISH); + return flush == Z_FINISH ? finish_done : block_done; +} + +#ifndef FASTEST +/* =========================================================================== + * Same as above, but achieves better compression. We use a lazy + * evaluation for matches: a match is finally adopted only if there is + * no better match at the next window position. + */ +local block_state deflate_slow(s, flush) + deflate_state *s; + int flush; +{ + IPos hash_head = NIL; /* head of hash chain */ + int bflush; /* set if current block must be flushed */ + + /* Process the input block. */ + for (;;) { + /* Make sure that we always have enough lookahead, except + * at the end of the input file. We need MAX_MATCH bytes + * for the next match, plus MIN_MATCH bytes to insert the + * string following the next match. + */ + if (s->lookahead < MIN_LOOKAHEAD) { + fill_window(s); + if (s->lookahead < MIN_LOOKAHEAD && flush == Z_NO_FLUSH) { + return need_more; + } + if (s->lookahead == 0) break; /* flush the current block */ + } + + /* Insert the string window[strstart .. strstart+2] in the + * dictionary, and set hash_head to the head of the hash chain: + */ + if (s->lookahead >= MIN_MATCH) { + INSERT_STRING(s, s->strstart, hash_head); + } + + /* Find the longest match, discarding those <= prev_length. + */ + s->prev_length = s->match_length, s->prev_match = s->match_start; + s->match_length = MIN_MATCH-1; + + if (hash_head != NIL && s->prev_length < s->max_lazy_match && + s->strstart - hash_head <= MAX_DIST(s)) { + /* To simplify the code, we prevent matches with the string + * of window index 0 (in particular we have to avoid a match + * of the string with itself at the start of the input file). + */ + if (s->strategy != Z_HUFFMAN_ONLY && s->strategy != Z_RLE) { + s->match_length = longest_match (s, hash_head); + } else if (s->strategy == Z_RLE && s->strstart - hash_head == 1) { + s->match_length = longest_match_fast (s, hash_head); + } + /* longest_match() or longest_match_fast() sets match_start */ + + if (s->match_length <= 5 && (s->strategy == Z_FILTERED +#if TOO_FAR <= 32767 + || (s->match_length == MIN_MATCH && + s->strstart - s->match_start > TOO_FAR) +#endif + )) { + + /* If prev_match is also MIN_MATCH, match_start is garbage + * but we will ignore the current match anyway. + */ + s->match_length = MIN_MATCH-1; + } + } + /* If there was a match at the previous step and the current + * match is not better, output the previous match: + */ + if (s->prev_length >= MIN_MATCH && s->match_length <= s->prev_length) { + uInt max_insert = s->strstart + s->lookahead - MIN_MATCH; + /* Do not insert strings in hash table beyond this. */ + + check_match(s, s->strstart-1, s->prev_match, s->prev_length); + + _tr_tally_dist(s, s->strstart -1 - s->prev_match, + s->prev_length - MIN_MATCH, bflush); + + /* Insert in hash table all strings up to the end of the match. + * strstart-1 and strstart are already inserted. If there is not + * enough lookahead, the last two strings are not inserted in + * the hash table. + */ + s->lookahead -= s->prev_length-1; + s->prev_length -= 2; + do { + if (++s->strstart <= max_insert) { + INSERT_STRING(s, s->strstart, hash_head); + } + } while (--s->prev_length != 0); + s->match_available = 0; + s->match_length = MIN_MATCH-1; + s->strstart++; + + if (bflush) FLUSH_BLOCK(s, 0); + + } else if (s->match_available) { + /* If there was no match at the previous position, output a + * single literal. If there was a match but the current match + * is longer, truncate the previous match to a single literal. + */ + Tracevv((stderr,"%c", s->window[s->strstart-1])); + _tr_tally_lit(s, s->window[s->strstart-1], bflush); + if (bflush) { + FLUSH_BLOCK_ONLY(s, 0); + } + s->strstart++; + s->lookahead--; + if (s->strm->avail_out == 0) return need_more; + } else { + /* There is no previous match to compare with, wait for + * the next step to decide. + */ + s->match_available = 1; + s->strstart++; + s->lookahead--; + } + } + Assert (flush != Z_NO_FLUSH, "no flush?"); + if (s->match_available) { + Tracevv((stderr,"%c", s->window[s->strstart-1])); + _tr_tally_lit(s, s->window[s->strstart-1], bflush); + s->match_available = 0; + } + FLUSH_BLOCK(s, flush == Z_FINISH); + return flush == Z_FINISH ? finish_done : block_done; +} +#endif /* FASTEST */ + +#if 0 +/* =========================================================================== + * For Z_RLE, simply look for runs of bytes, generate matches only of distance + * one. Do not maintain a hash table. (It will be regenerated if this run of + * deflate switches away from Z_RLE.) + */ +local block_state deflate_rle(s, flush) + deflate_state *s; + int flush; +{ + int bflush; /* set if current block must be flushed */ + uInt run; /* length of run */ + uInt max; /* maximum length of run */ + uInt prev; /* byte at distance one to match */ + Bytef *scan; /* scan for end of run */ + + for (;;) { + /* Make sure that we always have enough lookahead, except + * at the end of the input file. We need MAX_MATCH bytes + * for the longest encodable run. + */ + if (s->lookahead < MAX_MATCH) { + fill_window(s); + if (s->lookahead < MAX_MATCH && flush == Z_NO_FLUSH) { + return need_more; + } + if (s->lookahead == 0) break; /* flush the current block */ + } + + /* See how many times the previous byte repeats */ + run = 0; + if (s->strstart > 0) { /* if there is a previous byte, that is */ + max = s->lookahead < MAX_MATCH ? s->lookahead : MAX_MATCH; + scan = s->window + s->strstart - 1; + prev = *scan++; + do { + if (*scan++ != prev) + break; + } while (++run < max); + } + + /* Emit match if have run of MIN_MATCH or longer, else emit literal */ + if (run >= MIN_MATCH) { + check_match(s, s->strstart, s->strstart - 1, run); + _tr_tally_dist(s, 1, run - MIN_MATCH, bflush); + s->lookahead -= run; + s->strstart += run; + } else { + /* No match, output a literal byte */ + Tracevv((stderr,"%c", s->window[s->strstart])); + _tr_tally_lit (s, s->window[s->strstart], bflush); + s->lookahead--; + s->strstart++; + } + if (bflush) FLUSH_BLOCK(s, 0); + } + FLUSH_BLOCK(s, flush == Z_FINISH); + return flush == Z_FINISH ? finish_done : block_done; +} +#endif diff --git a/contrib/zlib/deflate.h b/contrib/zlib/deflate.h new file mode 100644 index 000000000..05a5ab3a2 --- /dev/null +++ b/contrib/zlib/deflate.h @@ -0,0 +1,331 @@ +/* deflate.h -- internal compression state + * Copyright (C) 1995-2004 Jean-loup Gailly + * For conditions of distribution and use, see copyright notice in zlib.h + */ + +/* WARNING: this file should *not* be used by applications. It is + part of the implementation of the compression library and is + subject to change. Applications should only use zlib.h. + */ + +/* @(#) $Id$ */ + +#ifndef DEFLATE_H +#define DEFLATE_H + +#include "zutil.h" + +/* define NO_GZIP when compiling if you want to disable gzip header and + trailer creation by deflate(). NO_GZIP would be used to avoid linking in + the crc code when it is not needed. For shared libraries, gzip encoding + should be left enabled. */ +#ifndef NO_GZIP +# define GZIP +#endif + +/* =========================================================================== + * Internal compression state. + */ + +#define LENGTH_CODES 29 +/* number of length codes, not counting the special END_BLOCK code */ + +#define LITERALS 256 +/* number of literal bytes 0..255 */ + +#define L_CODES (LITERALS+1+LENGTH_CODES) +/* number of Literal or Length codes, including the END_BLOCK code */ + +#define D_CODES 30 +/* number of distance codes */ + +#define BL_CODES 19 +/* number of codes used to transfer the bit lengths */ + +#define HEAP_SIZE (2*L_CODES+1) +/* maximum heap size */ + +#define MAX_BITS 15 +/* All codes must not exceed MAX_BITS bits */ + +#define INIT_STATE 42 +#define EXTRA_STATE 69 +#define NAME_STATE 73 +#define COMMENT_STATE 91 +#define HCRC_STATE 103 +#define BUSY_STATE 113 +#define FINISH_STATE 666 +/* Stream status */ + + +/* Data structure describing a single value and its code string. */ +typedef struct ct_data_s { + union { + ush freq; /* frequency count */ + ush code; /* bit string */ + } fc; + union { + ush dad; /* father node in Huffman tree */ + ush len; /* length of bit string */ + } dl; +} FAR ct_data; + +#define Freq fc.freq +#define Code fc.code +#define Dad dl.dad +#define Len dl.len + +typedef struct static_tree_desc_s static_tree_desc; + +typedef struct tree_desc_s { + ct_data *dyn_tree; /* the dynamic tree */ + int max_code; /* largest code with non zero frequency */ + static_tree_desc *stat_desc; /* the corresponding static tree */ +} FAR tree_desc; + +typedef ush Pos; +typedef Pos FAR Posf; +typedef unsigned IPos; + +/* A Pos is an index in the character window. We use short instead of int to + * save space in the various tables. IPos is used only for parameter passing. + */ + +typedef struct internal_state { + z_streamp strm; /* pointer back to this zlib stream */ + int status; /* as the name implies */ + Bytef *pending_buf; /* output still pending */ + ulg pending_buf_size; /* size of pending_buf */ + Bytef *pending_out; /* next pending byte to output to the stream */ + uInt pending; /* nb of bytes in the pending buffer */ + int wrap; /* bit 0 true for zlib, bit 1 true for gzip */ + gz_headerp gzhead; /* gzip header information to write */ + uInt gzindex; /* where in extra, name, or comment */ + Byte method; /* STORED (for zip only) or DEFLATED */ + int last_flush; /* value of flush param for previous deflate call */ + + /* used by deflate.c: */ + + uInt w_size; /* LZ77 window size (32K by default) */ + uInt w_bits; /* log2(w_size) (8..16) */ + uInt w_mask; /* w_size - 1 */ + + Bytef *window; + /* Sliding window. Input bytes are read into the second half of the window, + * and move to the first half later to keep a dictionary of at least wSize + * bytes. With this organization, matches are limited to a distance of + * wSize-MAX_MATCH bytes, but this ensures that IO is always + * performed with a length multiple of the block size. Also, it limits + * the window size to 64K, which is quite useful on MSDOS. + * To do: use the user input buffer as sliding window. + */ + + ulg window_size; + /* Actual size of window: 2*wSize, except when the user input buffer + * is directly used as sliding window. + */ + + Posf *prev; + /* Link to older string with same hash index. To limit the size of this + * array to 64K, this link is maintained only for the last 32K strings. + * An index in this array is thus a window index modulo 32K. + */ + + Posf *head; /* Heads of the hash chains or NIL. */ + + uInt ins_h; /* hash index of string to be inserted */ + uInt hash_size; /* number of elements in hash table */ + uInt hash_bits; /* log2(hash_size) */ + uInt hash_mask; /* hash_size-1 */ + + uInt hash_shift; + /* Number of bits by which ins_h must be shifted at each input + * step. It must be such that after MIN_MATCH steps, the oldest + * byte no longer takes part in the hash key, that is: + * hash_shift * MIN_MATCH >= hash_bits + */ + + long block_start; + /* Window position at the beginning of the current output block. Gets + * negative when the window is moved backwards. + */ + + uInt match_length; /* length of best match */ + IPos prev_match; /* previous match */ + int match_available; /* set if previous match exists */ + uInt strstart; /* start of string to insert */ + uInt match_start; /* start of matching string */ + uInt lookahead; /* number of valid bytes ahead in window */ + + uInt prev_length; + /* Length of the best match at previous step. Matches not greater than this + * are discarded. This is used in the lazy match evaluation. + */ + + uInt max_chain_length; + /* To speed up deflation, hash chains are never searched beyond this + * length. A higher limit improves compression ratio but degrades the + * speed. + */ + + uInt max_lazy_match; + /* Attempt to find a better match only when the current match is strictly + * smaller than this value. This mechanism is used only for compression + * levels >= 4. + */ +# define max_insert_length max_lazy_match + /* Insert new strings in the hash table only if the match length is not + * greater than this length. This saves time but degrades compression. + * max_insert_length is used only for compression levels <= 3. + */ + + int level; /* compression level (1..9) */ + int strategy; /* favor or force Huffman coding*/ + + uInt good_match; + /* Use a faster search when the previous match is longer than this */ + + int nice_match; /* Stop searching when current match exceeds this */ + + /* used by trees.c: */ + /* Didn't use ct_data typedef below to supress compiler warning */ + struct ct_data_s dyn_ltree[HEAP_SIZE]; /* literal and length tree */ + struct ct_data_s dyn_dtree[2*D_CODES+1]; /* distance tree */ + struct ct_data_s bl_tree[2*BL_CODES+1]; /* Huffman tree for bit lengths */ + + struct tree_desc_s l_desc; /* desc. for literal tree */ + struct tree_desc_s d_desc; /* desc. for distance tree */ + struct tree_desc_s bl_desc; /* desc. for bit length tree */ + + ush bl_count[MAX_BITS+1]; + /* number of codes at each bit length for an optimal tree */ + + int heap[2*L_CODES+1]; /* heap used to build the Huffman trees */ + int heap_len; /* number of elements in the heap */ + int heap_max; /* element of largest frequency */ + /* The sons of heap[n] are heap[2*n] and heap[2*n+1]. heap[0] is not used. + * The same heap array is used to build all trees. + */ + + uch depth[2*L_CODES+1]; + /* Depth of each subtree used as tie breaker for trees of equal frequency + */ + + uchf *l_buf; /* buffer for literals or lengths */ + + uInt lit_bufsize; + /* Size of match buffer for literals/lengths. There are 4 reasons for + * limiting lit_bufsize to 64K: + * - frequencies can be kept in 16 bit counters + * - if compression is not successful for the first block, all input + * data is still in the window so we can still emit a stored block even + * when input comes from standard input. (This can also be done for + * all blocks if lit_bufsize is not greater than 32K.) + * - if compression is not successful for a file smaller than 64K, we can + * even emit a stored file instead of a stored block (saving 5 bytes). + * This is applicable only for zip (not gzip or zlib). + * - creating new Huffman trees less frequently may not provide fast + * adaptation to changes in the input data statistics. (Take for + * example a binary file with poorly compressible code followed by + * a highly compressible string table.) Smaller buffer sizes give + * fast adaptation but have of course the overhead of transmitting + * trees more frequently. + * - I can't count above 4 + */ + + uInt last_lit; /* running index in l_buf */ + + ushf *d_buf; + /* Buffer for distances. To simplify the code, d_buf and l_buf have + * the same number of elements. To use different lengths, an extra flag + * array would be necessary. + */ + + ulg opt_len; /* bit length of current block with optimal trees */ + ulg static_len; /* bit length of current block with static trees */ + uInt matches; /* number of string matches in current block */ + int last_eob_len; /* bit length of EOB code for last block */ + +#ifdef DEBUG + ulg compressed_len; /* total bit length of compressed file mod 2^32 */ + ulg bits_sent; /* bit length of compressed data sent mod 2^32 */ +#endif + + ush bi_buf; + /* Output buffer. bits are inserted starting at the bottom (least + * significant bits). + */ + int bi_valid; + /* Number of valid bits in bi_buf. All bits above the last valid bit + * are always zero. + */ + +} FAR deflate_state; + +/* Output a byte on the stream. + * IN assertion: there is enough room in pending_buf. + */ +#define put_byte(s, c) {s->pending_buf[s->pending++] = (c);} + + +#define MIN_LOOKAHEAD (MAX_MATCH+MIN_MATCH+1) +/* Minimum amount of lookahead, except at the end of the input file. + * See deflate.c for comments about the MIN_MATCH+1. + */ + +#define MAX_DIST(s) ((s)->w_size-MIN_LOOKAHEAD) +/* In order to simplify the code, particularly on 16 bit machines, match + * distances are limited to MAX_DIST instead of WSIZE. + */ + + /* in trees.c */ +void _tr_init OF((deflate_state *s)); +int _tr_tally OF((deflate_state *s, unsigned dist, unsigned lc)); +void _tr_flush_block OF((deflate_state *s, charf *buf, ulg stored_len, + int eof)); +void _tr_align OF((deflate_state *s)); +void _tr_stored_block OF((deflate_state *s, charf *buf, ulg stored_len, + int eof)); + +#define d_code(dist) \ + ((dist) < 256 ? _dist_code[dist] : _dist_code[256+((dist)>>7)]) +/* Mapping from a distance to a distance code. dist is the distance - 1 and + * must not have side effects. _dist_code[256] and _dist_code[257] are never + * used. + */ + +#ifndef DEBUG +/* Inline versions of _tr_tally for speed: */ + +#if defined(GEN_TREES_H) || !defined(STDC) + extern uch _length_code[]; + extern uch _dist_code[]; +#else + extern const uch _length_code[]; + extern const uch _dist_code[]; +#endif + +# define _tr_tally_lit(s, c, flush) \ + { uch cc = (c); \ + s->d_buf[s->last_lit] = 0; \ + s->l_buf[s->last_lit++] = cc; \ + s->dyn_ltree[cc].Freq++; \ + flush = (s->last_lit == s->lit_bufsize-1); \ + } +# define _tr_tally_dist(s, distance, length, flush) \ + { uch len = (length); \ + ush dist = (distance); \ + s->d_buf[s->last_lit] = dist; \ + s->l_buf[s->last_lit++] = len; \ + dist--; \ + s->dyn_ltree[_length_code[len]+LITERALS+1].Freq++; \ + s->dyn_dtree[d_code(dist)].Freq++; \ + flush = (s->last_lit == s->lit_bufsize-1); \ + } +#else +# define _tr_tally_lit(s, c, flush) flush = _tr_tally(s, 0, c) +# define _tr_tally_dist(s, distance, length, flush) \ + flush = _tr_tally(s, distance, length) +#endif + +#endif /* DEFLATE_H */ diff --git a/contrib/zlib/trees.c b/contrib/zlib/trees.c new file mode 100644 index 000000000..395e4e168 --- /dev/null +++ b/contrib/zlib/trees.c @@ -0,0 +1,1219 @@ +/* trees.c -- output deflated data using Huffman coding + * Copyright (C) 1995-2005 Jean-loup Gailly + * For conditions of distribution and use, see copyright notice in zlib.h + */ + +/* + * ALGORITHM + * + * The "deflation" process uses several Huffman trees. The more + * common source values are represented by shorter bit sequences. + * + * Each code tree is stored in a compressed form which is itself + * a Huffman encoding of the lengths of all the code strings (in + * ascending order by source values). The actual code strings are + * reconstructed from the lengths in the inflate process, as described + * in the deflate specification. + * + * REFERENCES + * + * Deutsch, L.P.,"'Deflate' Compressed Data Format Specification". + * Available in ftp.uu.net:/pub/archiving/zip/doc/deflate-1.1.doc + * + * Storer, James A. + * Data Compression: Methods and Theory, pp. 49-50. + * Computer Science Press, 1988. ISBN 0-7167-8156-5. + * + * Sedgewick, R. + * Algorithms, p290. + * Addison-Wesley, 1983. ISBN 0-201-06672-6. + */ + +/* @(#) $Id$ */ + +/* #define GEN_TREES_H */ + +#include "deflate.h" + +#ifdef DEBUG +# include +#endif + +/* =========================================================================== + * Constants + */ + +#define MAX_BL_BITS 7 +/* Bit length codes must not exceed MAX_BL_BITS bits */ + +#define END_BLOCK 256 +/* end of block literal code */ + +#define REP_3_6 16 +/* repeat previous bit length 3-6 times (2 bits of repeat count) */ + +#define REPZ_3_10 17 +/* repeat a zero length 3-10 times (3 bits of repeat count) */ + +#define REPZ_11_138 18 +/* repeat a zero length 11-138 times (7 bits of repeat count) */ + +local const int extra_lbits[LENGTH_CODES] /* extra bits for each length code */ + = {0,0,0,0,0,0,0,0,1,1,1,1,2,2,2,2,3,3,3,3,4,4,4,4,5,5,5,5,0}; + +local const int extra_dbits[D_CODES] /* extra bits for each distance code */ + = {0,0,0,0,1,1,2,2,3,3,4,4,5,5,6,6,7,7,8,8,9,9,10,10,11,11,12,12,13,13}; + +local const int extra_blbits[BL_CODES]/* extra bits for each bit length code */ + = {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,3,7}; + +local const uch bl_order[BL_CODES] + = {16,17,18,0,8,7,9,6,10,5,11,4,12,3,13,2,14,1,15}; +/* The lengths of the bit length codes are sent in order of decreasing + * probability, to avoid transmitting the lengths for unused bit length codes. + */ + +#define Buf_size (8 * 2*sizeof(char)) +/* Number of bits used within bi_buf. (bi_buf might be implemented on + * more than 16 bits on some systems.) + */ + +/* =========================================================================== + * Local data. These are initialized only once. + */ + +#define DIST_CODE_LEN 512 /* see definition of array dist_code below */ + +#if defined(GEN_TREES_H) || !defined(STDC) +/* non ANSI compilers may not accept trees.h */ + +local ct_data static_ltree[L_CODES+2]; +/* The static literal tree. Since the bit lengths are imposed, there is no + * need for the L_CODES extra codes used during heap construction. However + * The codes 286 and 287 are needed to build a canonical tree (see _tr_init + * below). + */ + +local ct_data static_dtree[D_CODES]; +/* The static distance tree. (Actually a trivial tree since all codes use + * 5 bits.) + */ + +uch _dist_code[DIST_CODE_LEN]; +/* Distance codes. The first 256 values correspond to the distances + * 3 .. 258, the last 256 values correspond to the top 8 bits of + * the 15 bit distances. + */ + +uch _length_code[MAX_MATCH-MIN_MATCH+1]; +/* length code for each normalized match length (0 == MIN_MATCH) */ + +local int base_length[LENGTH_CODES]; +/* First normalized length for each code (0 = MIN_MATCH) */ + +local int base_dist[D_CODES]; +/* First normalized distance for each code (0 = distance of 1) */ + +#else +# include "trees.h" +#endif /* GEN_TREES_H */ + +struct static_tree_desc_s { + const ct_data *static_tree; /* static tree or NULL */ + const intf *extra_bits; /* extra bits for each code or NULL */ + int extra_base; /* base index for extra_bits */ + int elems; /* max number of elements in the tree */ + int max_length; /* max bit length for the codes */ +}; + +local static_tree_desc static_l_desc = +{static_ltree, extra_lbits, LITERALS+1, L_CODES, MAX_BITS}; + +local static_tree_desc static_d_desc = +{static_dtree, extra_dbits, 0, D_CODES, MAX_BITS}; + +local static_tree_desc static_bl_desc = +{(const ct_data *)0, extra_blbits, 0, BL_CODES, MAX_BL_BITS}; + +/* =========================================================================== + * Local (static) routines in this file. + */ + +local void tr_static_init OF((void)); +local void init_block OF((deflate_state *s)); +local void pqdownheap OF((deflate_state *s, ct_data *tree, int k)); +local void gen_bitlen OF((deflate_state *s, tree_desc *desc)); +local void gen_codes OF((ct_data *tree, int max_code, ushf *bl_count)); +local void build_tree OF((deflate_state *s, tree_desc *desc)); +local void scan_tree OF((deflate_state *s, ct_data *tree, int max_code)); +local void send_tree OF((deflate_state *s, ct_data *tree, int max_code)); +local int build_bl_tree OF((deflate_state *s)); +local void send_all_trees OF((deflate_state *s, int lcodes, int dcodes, + int blcodes)); +local void compress_block OF((deflate_state *s, ct_data *ltree, + ct_data *dtree)); +local void set_data_type OF((deflate_state *s)); +local unsigned bi_reverse OF((unsigned value, int length)); +local void bi_windup OF((deflate_state *s)); +local void bi_flush OF((deflate_state *s)); +local void copy_block OF((deflate_state *s, charf *buf, unsigned len, + int header)); + +#ifdef GEN_TREES_H +local void gen_trees_header OF((void)); +#endif + +#ifndef DEBUG +# define send_code(s, c, tree) send_bits(s, tree[c].Code, tree[c].Len) + /* Send a code of the given tree. c and tree must not have side effects */ + +#else /* DEBUG */ +# define send_code(s, c, tree) \ + { if (z_verbose>2) fprintf(stderr,"\ncd %3d ",(c)); \ + send_bits(s, tree[c].Code, tree[c].Len); } +#endif + +/* =========================================================================== + * Output a short LSB first on the stream. + * IN assertion: there is enough room in pendingBuf. + */ +#define put_short(s, w) { \ + put_byte(s, (uch)((w) & 0xff)); \ + put_byte(s, (uch)((ush)(w) >> 8)); \ +} + +/* =========================================================================== + * Send a value on a given number of bits. + * IN assertion: length <= 16 and value fits in length bits. + */ +#ifdef DEBUG +local void send_bits OF((deflate_state *s, int value, int length)); + +local void send_bits(s, value, length) + deflate_state *s; + int value; /* value to send */ + int length; /* number of bits */ +{ + Tracevv((stderr," l %2d v %4x ", length, value)); + Assert(length > 0 && length <= 15, "invalid length"); + s->bits_sent += (ulg)length; + + /* If not enough room in bi_buf, use (valid) bits from bi_buf and + * (16 - bi_valid) bits from value, leaving (width - (16-bi_valid)) + * unused bits in value. + */ + if (s->bi_valid > (int)Buf_size - length) { + s->bi_buf |= (value << s->bi_valid); + put_short(s, s->bi_buf); + s->bi_buf = (ush)value >> (Buf_size - s->bi_valid); + s->bi_valid += length - Buf_size; + } else { + s->bi_buf |= value << s->bi_valid; + s->bi_valid += length; + } +} +#else /* !DEBUG */ + +#define send_bits(s, value, length) \ +{ int len = length;\ + if (s->bi_valid > (int)Buf_size - len) {\ + int val = value;\ + s->bi_buf |= (val << s->bi_valid);\ + put_short(s, s->bi_buf);\ + s->bi_buf = (ush)val >> (Buf_size - s->bi_valid);\ + s->bi_valid += len - Buf_size;\ + } else {\ + s->bi_buf |= (value) << s->bi_valid;\ + s->bi_valid += len;\ + }\ +} +#endif /* DEBUG */ + + +/* the arguments must not have side effects */ + +/* =========================================================================== + * Initialize the various 'constant' tables. + */ +local void tr_static_init() +{ +#if defined(GEN_TREES_H) || !defined(STDC) + static int static_init_done = 0; + int n; /* iterates over tree elements */ + int bits; /* bit counter */ + int length; /* length value */ + int code; /* code value */ + int dist; /* distance index */ + ush bl_count[MAX_BITS+1]; + /* number of codes at each bit length for an optimal tree */ + + if (static_init_done) return; + + /* For some embedded targets, global variables are not initialized: */ + static_l_desc.static_tree = static_ltree; + static_l_desc.extra_bits = extra_lbits; + static_d_desc.static_tree = static_dtree; + static_d_desc.extra_bits = extra_dbits; + static_bl_desc.extra_bits = extra_blbits; + + /* Initialize the mapping length (0..255) -> length code (0..28) */ + length = 0; + for (code = 0; code < LENGTH_CODES-1; code++) { + base_length[code] = length; + for (n = 0; n < (1< dist code (0..29) */ + dist = 0; + for (code = 0 ; code < 16; code++) { + base_dist[code] = dist; + for (n = 0; n < (1<>= 7; /* from now on, all distances are divided by 128 */ + for ( ; code < D_CODES; code++) { + base_dist[code] = dist << 7; + for (n = 0; n < (1<<(extra_dbits[code]-7)); n++) { + _dist_code[256 + dist++] = (uch)code; + } + } + Assert (dist == 256, "tr_static_init: 256+dist != 512"); + + /* Construct the codes of the static literal tree */ + for (bits = 0; bits <= MAX_BITS; bits++) bl_count[bits] = 0; + n = 0; + while (n <= 143) static_ltree[n++].Len = 8, bl_count[8]++; + while (n <= 255) static_ltree[n++].Len = 9, bl_count[9]++; + while (n <= 279) static_ltree[n++].Len = 7, bl_count[7]++; + while (n <= 287) static_ltree[n++].Len = 8, bl_count[8]++; + /* Codes 286 and 287 do not exist, but we must include them in the + * tree construction to get a canonical Huffman tree (longest code + * all ones) + */ + gen_codes((ct_data *)static_ltree, L_CODES+1, bl_count); + + /* The static distance tree is trivial: */ + for (n = 0; n < D_CODES; n++) { + static_dtree[n].Len = 5; + static_dtree[n].Code = bi_reverse((unsigned)n, 5); + } + static_init_done = 1; + +# ifdef GEN_TREES_H + gen_trees_header(); +# endif +#endif /* defined(GEN_TREES_H) || !defined(STDC) */ +} + +/* =========================================================================== + * Genererate the file trees.h describing the static trees. + */ +#ifdef GEN_TREES_H +# ifndef DEBUG +# include +# endif + +# define SEPARATOR(i, last, width) \ + ((i) == (last)? "\n};\n\n" : \ + ((i) % (width) == (width)-1 ? ",\n" : ", ")) + +void gen_trees_header() +{ + FILE *header = fopen("trees.h", "w"); + int i; + + Assert (header != NULL, "Can't open trees.h"); + fprintf(header, + "/* header created automatically with -DGEN_TREES_H */\n\n"); + + fprintf(header, "local const ct_data static_ltree[L_CODES+2] = {\n"); + for (i = 0; i < L_CODES+2; i++) { + fprintf(header, "{{%3u},{%3u}}%s", static_ltree[i].Code, + static_ltree[i].Len, SEPARATOR(i, L_CODES+1, 5)); + } + + fprintf(header, "local const ct_data static_dtree[D_CODES] = {\n"); + for (i = 0; i < D_CODES; i++) { + fprintf(header, "{{%2u},{%2u}}%s", static_dtree[i].Code, + static_dtree[i].Len, SEPARATOR(i, D_CODES-1, 5)); + } + + fprintf(header, "const uch _dist_code[DIST_CODE_LEN] = {\n"); + for (i = 0; i < DIST_CODE_LEN; i++) { + fprintf(header, "%2u%s", _dist_code[i], + SEPARATOR(i, DIST_CODE_LEN-1, 20)); + } + + fprintf(header, "const uch _length_code[MAX_MATCH-MIN_MATCH+1]= {\n"); + for (i = 0; i < MAX_MATCH-MIN_MATCH+1; i++) { + fprintf(header, "%2u%s", _length_code[i], + SEPARATOR(i, MAX_MATCH-MIN_MATCH, 20)); + } + + fprintf(header, "local const int base_length[LENGTH_CODES] = {\n"); + for (i = 0; i < LENGTH_CODES; i++) { + fprintf(header, "%1u%s", base_length[i], + SEPARATOR(i, LENGTH_CODES-1, 20)); + } + + fprintf(header, "local const int base_dist[D_CODES] = {\n"); + for (i = 0; i < D_CODES; i++) { + fprintf(header, "%5u%s", base_dist[i], + SEPARATOR(i, D_CODES-1, 10)); + } + + fclose(header); +} +#endif /* GEN_TREES_H */ + +/* =========================================================================== + * Initialize the tree data structures for a new zlib stream. + */ +void _tr_init(s) + deflate_state *s; +{ + tr_static_init(); + + s->l_desc.dyn_tree = s->dyn_ltree; + s->l_desc.stat_desc = &static_l_desc; + + s->d_desc.dyn_tree = s->dyn_dtree; + s->d_desc.stat_desc = &static_d_desc; + + s->bl_desc.dyn_tree = s->bl_tree; + s->bl_desc.stat_desc = &static_bl_desc; + + s->bi_buf = 0; + s->bi_valid = 0; + s->last_eob_len = 8; /* enough lookahead for inflate */ +#ifdef DEBUG + s->compressed_len = 0L; + s->bits_sent = 0L; +#endif + + /* Initialize the first block of the first file: */ + init_block(s); +} + +/* =========================================================================== + * Initialize a new block. + */ +local void init_block(s) + deflate_state *s; +{ + int n; /* iterates over tree elements */ + + /* Initialize the trees. */ + for (n = 0; n < L_CODES; n++) s->dyn_ltree[n].Freq = 0; + for (n = 0; n < D_CODES; n++) s->dyn_dtree[n].Freq = 0; + for (n = 0; n < BL_CODES; n++) s->bl_tree[n].Freq = 0; + + s->dyn_ltree[END_BLOCK].Freq = 1; + s->opt_len = s->static_len = 0L; + s->last_lit = s->matches = 0; +} + +#define SMALLEST 1 +/* Index within the heap array of least frequent node in the Huffman tree */ + + +/* =========================================================================== + * Remove the smallest element from the heap and recreate the heap with + * one less element. Updates heap and heap_len. + */ +#define pqremove(s, tree, top) \ +{\ + top = s->heap[SMALLEST]; \ + s->heap[SMALLEST] = s->heap[s->heap_len--]; \ + pqdownheap(s, tree, SMALLEST); \ +} + +/* =========================================================================== + * Compares to subtrees, using the tree depth as tie breaker when + * the subtrees have equal frequency. This minimizes the worst case length. + */ +#define smaller(tree, n, m, depth) \ + (tree[n].Freq < tree[m].Freq || \ + (tree[n].Freq == tree[m].Freq && depth[n] <= depth[m])) + +/* =========================================================================== + * Restore the heap property by moving down the tree starting at node k, + * exchanging a node with the smallest of its two sons if necessary, stopping + * when the heap property is re-established (each father smaller than its + * two sons). + */ +local void pqdownheap(s, tree, k) + deflate_state *s; + ct_data *tree; /* the tree to restore */ + int k; /* node to move down */ +{ + int v = s->heap[k]; + int j = k << 1; /* left son of k */ + while (j <= s->heap_len) { + /* Set j to the smallest of the two sons: */ + if (j < s->heap_len && + smaller(tree, s->heap[j+1], s->heap[j], s->depth)) { + j++; + } + /* Exit if v is smaller than both sons */ + if (smaller(tree, v, s->heap[j], s->depth)) break; + + /* Exchange v with the smallest son */ + s->heap[k] = s->heap[j]; k = j; + + /* And continue down the tree, setting j to the left son of k */ + j <<= 1; + } + s->heap[k] = v; +} + +/* =========================================================================== + * Compute the optimal bit lengths for a tree and update the total bit length + * for the current block. + * IN assertion: the fields freq and dad are set, heap[heap_max] and + * above are the tree nodes sorted by increasing frequency. + * OUT assertions: the field len is set to the optimal bit length, the + * array bl_count contains the frequencies for each bit length. + * The length opt_len is updated; static_len is also updated if stree is + * not null. + */ +local void gen_bitlen(s, desc) + deflate_state *s; + tree_desc *desc; /* the tree descriptor */ +{ + ct_data *tree = desc->dyn_tree; + int max_code = desc->max_code; + const ct_data *stree = desc->stat_desc->static_tree; + const intf *extra = desc->stat_desc->extra_bits; + int base = desc->stat_desc->extra_base; + int max_length = desc->stat_desc->max_length; + int h; /* heap index */ + int n, m; /* iterate over the tree elements */ + int bits; /* bit length */ + int xbits; /* extra bits */ + ush f; /* frequency */ + int overflow = 0; /* number of elements with bit length too large */ + + for (bits = 0; bits <= MAX_BITS; bits++) s->bl_count[bits] = 0; + + /* In a first pass, compute the optimal bit lengths (which may + * overflow in the case of the bit length tree). + */ + tree[s->heap[s->heap_max]].Len = 0; /* root of the heap */ + + for (h = s->heap_max+1; h < HEAP_SIZE; h++) { + n = s->heap[h]; + bits = tree[tree[n].Dad].Len + 1; + if (bits > max_length) bits = max_length, overflow++; + tree[n].Len = (ush)bits; + /* We overwrite tree[n].Dad which is no longer needed */ + + if (n > max_code) continue; /* not a leaf node */ + + s->bl_count[bits]++; + xbits = 0; + if (n >= base) xbits = extra[n-base]; + f = tree[n].Freq; + s->opt_len += (ulg)f * (bits + xbits); + if (stree) s->static_len += (ulg)f * (stree[n].Len + xbits); + } + if (overflow == 0) return; + + Trace((stderr,"\nbit length overflow\n")); + /* This happens for example on obj2 and pic of the Calgary corpus */ + + /* Find the first bit length which could increase: */ + do { + bits = max_length-1; + while (s->bl_count[bits] == 0) bits--; + s->bl_count[bits]--; /* move one leaf down the tree */ + s->bl_count[bits+1] += 2; /* move one overflow item as its brother */ + s->bl_count[max_length]--; + /* The brother of the overflow item also moves one step up, + * but this does not affect bl_count[max_length] + */ + overflow -= 2; + } while (overflow > 0); + + /* Now recompute all bit lengths, scanning in increasing frequency. + * h is still equal to HEAP_SIZE. (It is simpler to reconstruct all + * lengths instead of fixing only the wrong ones. This idea is taken + * from 'ar' written by Haruhiko Okumura.) + */ + for (bits = max_length; bits != 0; bits--) { + n = s->bl_count[bits]; + while (n != 0) { + m = s->heap[--h]; + if (m > max_code) continue; + if ((unsigned) tree[m].Len != (unsigned) bits) { + Trace((stderr,"code %d bits %d->%d\n", m, tree[m].Len, bits)); + s->opt_len += ((long)bits - (long)tree[m].Len) + *(long)tree[m].Freq; + tree[m].Len = (ush)bits; + } + n--; + } + } +} + +/* =========================================================================== + * Generate the codes for a given tree and bit counts (which need not be + * optimal). + * IN assertion: the array bl_count contains the bit length statistics for + * the given tree and the field len is set for all tree elements. + * OUT assertion: the field code is set for all tree elements of non + * zero code length. + */ +local void gen_codes (tree, max_code, bl_count) + ct_data *tree; /* the tree to decorate */ + int max_code; /* largest code with non zero frequency */ + ushf *bl_count; /* number of codes at each bit length */ +{ + ush next_code[MAX_BITS+1]; /* next code value for each bit length */ + ush code = 0; /* running code value */ + int bits; /* bit index */ + int n; /* code index */ + + /* The distribution counts are first used to generate the code values + * without bit reversal. + */ + for (bits = 1; bits <= MAX_BITS; bits++) { + next_code[bits] = code = (code + bl_count[bits-1]) << 1; + } + /* Check that the bit counts in bl_count are consistent. The last code + * must be all ones. + */ + Assert (code + bl_count[MAX_BITS]-1 == (1<dyn_tree; + const ct_data *stree = desc->stat_desc->static_tree; + int elems = desc->stat_desc->elems; + int n, m; /* iterate over heap elements */ + int max_code = -1; /* largest code with non zero frequency */ + int node; /* new node being created */ + + /* Construct the initial heap, with least frequent element in + * heap[SMALLEST]. The sons of heap[n] are heap[2*n] and heap[2*n+1]. + * heap[0] is not used. + */ + s->heap_len = 0, s->heap_max = HEAP_SIZE; + + for (n = 0; n < elems; n++) { + if (tree[n].Freq != 0) { + s->heap[++(s->heap_len)] = max_code = n; + s->depth[n] = 0; + } else { + tree[n].Len = 0; + } + } + + /* The pkzip format requires that at least one distance code exists, + * and that at least one bit should be sent even if there is only one + * possible code. So to avoid special checks later on we force at least + * two codes of non zero frequency. + */ + while (s->heap_len < 2) { + node = s->heap[++(s->heap_len)] = (max_code < 2 ? ++max_code : 0); + tree[node].Freq = 1; + s->depth[node] = 0; + s->opt_len--; if (stree) s->static_len -= stree[node].Len; + /* node is 0 or 1 so it does not have extra bits */ + } + desc->max_code = max_code; + + /* The elements heap[heap_len/2+1 .. heap_len] are leaves of the tree, + * establish sub-heaps of increasing lengths: + */ + for (n = s->heap_len/2; n >= 1; n--) pqdownheap(s, tree, n); + + /* Construct the Huffman tree by repeatedly combining the least two + * frequent nodes. + */ + node = elems; /* next internal node of the tree */ + do { + pqremove(s, tree, n); /* n = node of least frequency */ + m = s->heap[SMALLEST]; /* m = node of next least frequency */ + + s->heap[--(s->heap_max)] = n; /* keep the nodes sorted by frequency */ + s->heap[--(s->heap_max)] = m; + + /* Create a new node father of n and m */ + tree[node].Freq = tree[n].Freq + tree[m].Freq; + s->depth[node] = (uch)((s->depth[n] >= s->depth[m] ? + s->depth[n] : s->depth[m]) + 1); + tree[n].Dad = tree[m].Dad = (ush)node; +#ifdef DUMP_BL_TREE + if (tree == s->bl_tree) { + fprintf(stderr,"\nnode %d(%d), sons %d(%d) %d(%d)", + node, tree[node].Freq, n, tree[n].Freq, m, tree[m].Freq); + } +#endif + /* and insert the new node in the heap */ + s->heap[SMALLEST] = node++; + pqdownheap(s, tree, SMALLEST); + + } while (s->heap_len >= 2); + + s->heap[--(s->heap_max)] = s->heap[SMALLEST]; + + /* At this point, the fields freq and dad are set. We can now + * generate the bit lengths. + */ + gen_bitlen(s, (tree_desc *)desc); + + /* The field len is now set, we can generate the bit codes */ + gen_codes ((ct_data *)tree, max_code, s->bl_count); +} + +/* =========================================================================== + * Scan a literal or distance tree to determine the frequencies of the codes + * in the bit length tree. + */ +local void scan_tree (s, tree, max_code) + deflate_state *s; + ct_data *tree; /* the tree to be scanned */ + int max_code; /* and its largest code of non zero frequency */ +{ + int n; /* iterates over all tree elements */ + int prevlen = -1; /* last emitted length */ + int curlen; /* length of current code */ + int nextlen = tree[0].Len; /* length of next code */ + int count = 0; /* repeat count of the current code */ + int max_count = 7; /* max repeat count */ + int min_count = 4; /* min repeat count */ + + if (nextlen == 0) max_count = 138, min_count = 3; + tree[max_code+1].Len = (ush)0xffff; /* guard */ + + for (n = 0; n <= max_code; n++) { + curlen = nextlen; nextlen = tree[n+1].Len; + if (++count < max_count && curlen == nextlen) { + continue; + } else if (count < min_count) { + s->bl_tree[curlen].Freq += count; + } else if (curlen != 0) { + if (curlen != prevlen) s->bl_tree[curlen].Freq++; + s->bl_tree[REP_3_6].Freq++; + } else if (count <= 10) { + s->bl_tree[REPZ_3_10].Freq++; + } else { + s->bl_tree[REPZ_11_138].Freq++; + } + count = 0; prevlen = curlen; + if (nextlen == 0) { + max_count = 138, min_count = 3; + } else if (curlen == nextlen) { + max_count = 6, min_count = 3; + } else { + max_count = 7, min_count = 4; + } + } +} + +/* =========================================================================== + * Send a literal or distance tree in compressed form, using the codes in + * bl_tree. + */ +local void send_tree (s, tree, max_code) + deflate_state *s; + ct_data *tree; /* the tree to be scanned */ + int max_code; /* and its largest code of non zero frequency */ +{ + int n; /* iterates over all tree elements */ + int prevlen = -1; /* last emitted length */ + int curlen; /* length of current code */ + int nextlen = tree[0].Len; /* length of next code */ + int count = 0; /* repeat count of the current code */ + int max_count = 7; /* max repeat count */ + int min_count = 4; /* min repeat count */ + + /* tree[max_code+1].Len = -1; */ /* guard already set */ + if (nextlen == 0) max_count = 138, min_count = 3; + + for (n = 0; n <= max_code; n++) { + curlen = nextlen; nextlen = tree[n+1].Len; + if (++count < max_count && curlen == nextlen) { + continue; + } else if (count < min_count) { + do { send_code(s, curlen, s->bl_tree); } while (--count != 0); + + } else if (curlen != 0) { + if (curlen != prevlen) { + send_code(s, curlen, s->bl_tree); count--; + } + Assert(count >= 3 && count <= 6, " 3_6?"); + send_code(s, REP_3_6, s->bl_tree); send_bits(s, count-3, 2); + + } else if (count <= 10) { + send_code(s, REPZ_3_10, s->bl_tree); send_bits(s, count-3, 3); + + } else { + send_code(s, REPZ_11_138, s->bl_tree); send_bits(s, count-11, 7); + } + count = 0; prevlen = curlen; + if (nextlen == 0) { + max_count = 138, min_count = 3; + } else if (curlen == nextlen) { + max_count = 6, min_count = 3; + } else { + max_count = 7, min_count = 4; + } + } +} + +/* =========================================================================== + * Construct the Huffman tree for the bit lengths and return the index in + * bl_order of the last bit length code to send. + */ +local int build_bl_tree(s) + deflate_state *s; +{ + int max_blindex; /* index of last bit length code of non zero freq */ + + /* Determine the bit length frequencies for literal and distance trees */ + scan_tree(s, (ct_data *)s->dyn_ltree, s->l_desc.max_code); + scan_tree(s, (ct_data *)s->dyn_dtree, s->d_desc.max_code); + + /* Build the bit length tree: */ + build_tree(s, (tree_desc *)(&(s->bl_desc))); + /* opt_len now includes the length of the tree representations, except + * the lengths of the bit lengths codes and the 5+5+4 bits for the counts. + */ + + /* Determine the number of bit length codes to send. The pkzip format + * requires that at least 4 bit length codes be sent. (appnote.txt says + * 3 but the actual value used is 4.) + */ + for (max_blindex = BL_CODES-1; max_blindex >= 3; max_blindex--) { + if (s->bl_tree[bl_order[max_blindex]].Len != 0) break; + } + /* Update opt_len to include the bit length tree and counts */ + s->opt_len += 3*(max_blindex+1) + 5+5+4; + Tracev((stderr, "\ndyn trees: dyn %ld, stat %ld", + s->opt_len, s->static_len)); + + return max_blindex; +} + +/* =========================================================================== + * Send the header for a block using dynamic Huffman trees: the counts, the + * lengths of the bit length codes, the literal tree and the distance tree. + * IN assertion: lcodes >= 257, dcodes >= 1, blcodes >= 4. + */ +local void send_all_trees(s, lcodes, dcodes, blcodes) + deflate_state *s; + int lcodes, dcodes, blcodes; /* number of codes for each tree */ +{ + int rank; /* index in bl_order */ + + Assert (lcodes >= 257 && dcodes >= 1 && blcodes >= 4, "not enough codes"); + Assert (lcodes <= L_CODES && dcodes <= D_CODES && blcodes <= BL_CODES, + "too many codes"); + Tracev((stderr, "\nbl counts: ")); + send_bits(s, lcodes-257, 5); /* not +255 as stated in appnote.txt */ + send_bits(s, dcodes-1, 5); + send_bits(s, blcodes-4, 4); /* not -3 as stated in appnote.txt */ + for (rank = 0; rank < blcodes; rank++) { + Tracev((stderr, "\nbl code %2d ", bl_order[rank])); + send_bits(s, s->bl_tree[bl_order[rank]].Len, 3); + } + Tracev((stderr, "\nbl tree: sent %ld", s->bits_sent)); + + send_tree(s, (ct_data *)s->dyn_ltree, lcodes-1); /* literal tree */ + Tracev((stderr, "\nlit tree: sent %ld", s->bits_sent)); + + send_tree(s, (ct_data *)s->dyn_dtree, dcodes-1); /* distance tree */ + Tracev((stderr, "\ndist tree: sent %ld", s->bits_sent)); +} + +/* =========================================================================== + * Send a stored block + */ +void _tr_stored_block(s, buf, stored_len, eof) + deflate_state *s; + charf *buf; /* input block */ + ulg stored_len; /* length of input block */ + int eof; /* true if this is the last block for a file */ +{ + send_bits(s, (STORED_BLOCK<<1)+eof, 3); /* send block type */ +#ifdef DEBUG + s->compressed_len = (s->compressed_len + 3 + 7) & (ulg)~7L; + s->compressed_len += (stored_len + 4) << 3; +#endif + copy_block(s, buf, (unsigned)stored_len, 1); /* with header */ +} + +/* =========================================================================== + * Send one empty static block to give enough lookahead for inflate. + * This takes 10 bits, of which 7 may remain in the bit buffer. + * The current inflate code requires 9 bits of lookahead. If the + * last two codes for the previous block (real code plus EOB) were coded + * on 5 bits or less, inflate may have only 5+3 bits of lookahead to decode + * the last real code. In this case we send two empty static blocks instead + * of one. (There are no problems if the previous block is stored or fixed.) + * To simplify the code, we assume the worst case of last real code encoded + * on one bit only. + */ +void _tr_align(s) + deflate_state *s; +{ + send_bits(s, STATIC_TREES<<1, 3); + send_code(s, END_BLOCK, static_ltree); +#ifdef DEBUG + s->compressed_len += 10L; /* 3 for block type, 7 for EOB */ +#endif + bi_flush(s); + /* Of the 10 bits for the empty block, we have already sent + * (10 - bi_valid) bits. The lookahead for the last real code (before + * the EOB of the previous block) was thus at least one plus the length + * of the EOB plus what we have just sent of the empty static block. + */ + if (1 + s->last_eob_len + 10 - s->bi_valid < 9) { + send_bits(s, STATIC_TREES<<1, 3); + send_code(s, END_BLOCK, static_ltree); +#ifdef DEBUG + s->compressed_len += 10L; +#endif + bi_flush(s); + } + s->last_eob_len = 7; +} + +/* =========================================================================== + * Determine the best encoding for the current block: dynamic trees, static + * trees or store, and output the encoded block to the zip file. + */ +void _tr_flush_block(s, buf, stored_len, eof) + deflate_state *s; + charf *buf; /* input block, or NULL if too old */ + ulg stored_len; /* length of input block */ + int eof; /* true if this is the last block for a file */ +{ + ulg opt_lenb, static_lenb; /* opt_len and static_len in bytes */ + int max_blindex = 0; /* index of last bit length code of non zero freq */ + + /* Build the Huffman trees unless a stored block is forced */ + if (s->level > 0) { + + /* Check if the file is binary or text */ + if (stored_len > 0 && s->strm->data_type == Z_UNKNOWN) + set_data_type(s); + + /* Construct the literal and distance trees */ + build_tree(s, (tree_desc *)(&(s->l_desc))); + Tracev((stderr, "\nlit data: dyn %ld, stat %ld", s->opt_len, + s->static_len)); + + build_tree(s, (tree_desc *)(&(s->d_desc))); + Tracev((stderr, "\ndist data: dyn %ld, stat %ld", s->opt_len, + s->static_len)); + /* At this point, opt_len and static_len are the total bit lengths of + * the compressed block data, excluding the tree representations. + */ + + /* Build the bit length tree for the above two trees, and get the index + * in bl_order of the last bit length code to send. + */ + max_blindex = build_bl_tree(s); + + /* Determine the best encoding. Compute the block lengths in bytes. */ + opt_lenb = (s->opt_len+3+7)>>3; + static_lenb = (s->static_len+3+7)>>3; + + Tracev((stderr, "\nopt %lu(%lu) stat %lu(%lu) stored %lu lit %u ", + opt_lenb, s->opt_len, static_lenb, s->static_len, stored_len, + s->last_lit)); + + if (static_lenb <= opt_lenb) opt_lenb = static_lenb; + + } else { + Assert(buf != (char*)0, "lost buf"); + opt_lenb = static_lenb = stored_len + 5; /* force a stored block */ + } + +#ifdef FORCE_STORED + if (buf != (char*)0) { /* force stored block */ +#else + if (stored_len+4 <= opt_lenb && buf != (char*)0) { + /* 4: two words for the lengths */ +#endif + /* The test buf != NULL is only necessary if LIT_BUFSIZE > WSIZE. + * Otherwise we can't have processed more than WSIZE input bytes since + * the last block flush, because compression would have been + * successful. If LIT_BUFSIZE <= WSIZE, it is never too late to + * transform a block into a stored block. + */ + _tr_stored_block(s, buf, stored_len, eof); + +#ifdef FORCE_STATIC + } else if (static_lenb >= 0) { /* force static trees */ +#else + } else if (s->strategy == Z_FIXED || static_lenb == opt_lenb) { +#endif + send_bits(s, (STATIC_TREES<<1)+eof, 3); + compress_block(s, (ct_data *)static_ltree, (ct_data *)static_dtree); +#ifdef DEBUG + s->compressed_len += 3 + s->static_len; +#endif + } else { + send_bits(s, (DYN_TREES<<1)+eof, 3); + send_all_trees(s, s->l_desc.max_code+1, s->d_desc.max_code+1, + max_blindex+1); + compress_block(s, (ct_data *)s->dyn_ltree, (ct_data *)s->dyn_dtree); +#ifdef DEBUG + s->compressed_len += 3 + s->opt_len; +#endif + } + Assert (s->compressed_len == s->bits_sent, "bad compressed size"); + /* The above check is made mod 2^32, for files larger than 512 MB + * and uLong implemented on 32 bits. + */ + init_block(s); + + if (eof) { + bi_windup(s); +#ifdef DEBUG + s->compressed_len += 7; /* align on byte boundary */ +#endif + } + Tracev((stderr,"\ncomprlen %lu(%lu) ", s->compressed_len>>3, + s->compressed_len-7*eof)); +} + +/* =========================================================================== + * Save the match info and tally the frequency counts. Return true if + * the current block must be flushed. + */ +int _tr_tally (s, dist, lc) + deflate_state *s; + unsigned dist; /* distance of matched string */ + unsigned lc; /* match length-MIN_MATCH or unmatched char (if dist==0) */ +{ + s->d_buf[s->last_lit] = (ush)dist; + s->l_buf[s->last_lit++] = (uch)lc; + if (dist == 0) { + /* lc is the unmatched char */ + s->dyn_ltree[lc].Freq++; + } else { + s->matches++; + /* Here, lc is the match length - MIN_MATCH */ + dist--; /* dist = match distance - 1 */ + Assert((ush)dist < (ush)MAX_DIST(s) && + (ush)lc <= (ush)(MAX_MATCH-MIN_MATCH) && + (ush)d_code(dist) < (ush)D_CODES, "_tr_tally: bad match"); + + s->dyn_ltree[_length_code[lc]+LITERALS+1].Freq++; + s->dyn_dtree[d_code(dist)].Freq++; + } + +#ifdef TRUNCATE_BLOCK + /* Try to guess if it is profitable to stop the current block here */ + if ((s->last_lit & 0x1fff) == 0 && s->level > 2) { + /* Compute an upper bound for the compressed length */ + ulg out_length = (ulg)s->last_lit*8L; + ulg in_length = (ulg)((long)s->strstart - s->block_start); + int dcode; + for (dcode = 0; dcode < D_CODES; dcode++) { + out_length += (ulg)s->dyn_dtree[dcode].Freq * + (5L+extra_dbits[dcode]); + } + out_length >>= 3; + Tracev((stderr,"\nlast_lit %u, in %ld, out ~%ld(%ld%%) ", + s->last_lit, in_length, out_length, + 100L - out_length*100L/in_length)); + if (s->matches < s->last_lit/2 && out_length < in_length/2) return 1; + } +#endif + return (s->last_lit == s->lit_bufsize-1); + /* We avoid equality with lit_bufsize because of wraparound at 64K + * on 16 bit machines and because stored blocks are restricted to + * 64K-1 bytes. + */ +} + +/* =========================================================================== + * Send the block data compressed using the given Huffman trees + */ +local void compress_block(s, ltree, dtree) + deflate_state *s; + ct_data *ltree; /* literal tree */ + ct_data *dtree; /* distance tree */ +{ + unsigned dist; /* distance of matched string */ + int lc; /* match length or unmatched char (if dist == 0) */ + unsigned lx = 0; /* running index in l_buf */ + unsigned code; /* the code to send */ + int extra; /* number of extra bits to send */ + + if (s->last_lit != 0) do { + dist = s->d_buf[lx]; + lc = s->l_buf[lx++]; + if (dist == 0) { + send_code(s, lc, ltree); /* send a literal byte */ + Tracecv(isgraph(lc), (stderr," '%c' ", lc)); + } else { + /* Here, lc is the match length - MIN_MATCH */ + code = _length_code[lc]; + send_code(s, code+LITERALS+1, ltree); /* send the length code */ + extra = extra_lbits[code]; + if (extra != 0) { + lc -= base_length[code]; + send_bits(s, lc, extra); /* send the extra length bits */ + } + dist--; /* dist is now the match distance - 1 */ + code = d_code(dist); + Assert (code < D_CODES, "bad d_code"); + + send_code(s, code, dtree); /* send the distance code */ + extra = extra_dbits[code]; + if (extra != 0) { + dist -= base_dist[code]; + send_bits(s, dist, extra); /* send the extra distance bits */ + } + } /* literal or match pair ? */ + + /* Check that the overlay between pending_buf and d_buf+l_buf is ok: */ + Assert((uInt)(s->pending) < s->lit_bufsize + 2*lx, + "pendingBuf overflow"); + + } while (lx < s->last_lit); + + send_code(s, END_BLOCK, ltree); + s->last_eob_len = ltree[END_BLOCK].Len; +} + +/* =========================================================================== + * Set the data type to BINARY or TEXT, using a crude approximation: + * set it to Z_TEXT if all symbols are either printable characters (33 to 255) + * or white spaces (9 to 13, or 32); or set it to Z_BINARY otherwise. + * IN assertion: the fields Freq of dyn_ltree are set. + */ +local void set_data_type(s) + deflate_state *s; +{ + int n; + + for (n = 0; n < 9; n++) + if (s->dyn_ltree[n].Freq != 0) + break; + if (n == 9) + for (n = 14; n < 32; n++) + if (s->dyn_ltree[n].Freq != 0) + break; + s->strm->data_type = (n == 32) ? Z_TEXT : Z_BINARY; +} + +/* =========================================================================== + * Reverse the first len bits of a code, using straightforward code (a faster + * method would use a table) + * IN assertion: 1 <= len <= 15 + */ +local unsigned bi_reverse(code, len) + unsigned code; /* the value to invert */ + int len; /* its bit length */ +{ + register unsigned res = 0; + do { + res |= code & 1; + code >>= 1, res <<= 1; + } while (--len > 0); + return res >> 1; +} + +/* =========================================================================== + * Flush the bit buffer, keeping at most 7 bits in it. + */ +local void bi_flush(s) + deflate_state *s; +{ + if (s->bi_valid == 16) { + put_short(s, s->bi_buf); + s->bi_buf = 0; + s->bi_valid = 0; + } else if (s->bi_valid >= 8) { + put_byte(s, (Byte)s->bi_buf); + s->bi_buf >>= 8; + s->bi_valid -= 8; + } +} + +/* =========================================================================== + * Flush the bit buffer and align the output on a byte boundary + */ +local void bi_windup(s) + deflate_state *s; +{ + if (s->bi_valid > 8) { + put_short(s, s->bi_buf); + } else if (s->bi_valid > 0) { + put_byte(s, (Byte)s->bi_buf); + } + s->bi_buf = 0; + s->bi_valid = 0; +#ifdef DEBUG + s->bits_sent = (s->bits_sent+7) & ~7; +#endif +} + +/* =========================================================================== + * Copy a stored block, storing first the length and its + * one's complement if requested. + */ +local void copy_block(s, buf, len, header) + deflate_state *s; + charf *buf; /* the input data */ + unsigned len; /* its length */ + int header; /* true if block header must be written */ +{ + bi_windup(s); /* align on byte boundary */ + s->last_eob_len = 8; /* enough lookahead for inflate */ + + if (header) { + put_short(s, (ush)len); + put_short(s, (ush)~len); +#ifdef DEBUG + s->bits_sent += 2*16; +#endif + } +#ifdef DEBUG + s->bits_sent += (ulg)len<<3; +#endif + while (len--) { + put_byte(s, *buf++); + } +} diff --git a/contrib/zlib/trees.h b/contrib/zlib/trees.h new file mode 100644 index 000000000..72facf900 --- /dev/null +++ b/contrib/zlib/trees.h @@ -0,0 +1,128 @@ +/* header created automatically with -DGEN_TREES_H */ + +local const ct_data static_ltree[L_CODES+2] = { +{{ 12},{ 8}}, {{140},{ 8}}, {{ 76},{ 8}}, {{204},{ 8}}, {{ 44},{ 8}}, +{{172},{ 8}}, {{108},{ 8}}, {{236},{ 8}}, {{ 28},{ 8}}, {{156},{ 8}}, +{{ 92},{ 8}}, {{220},{ 8}}, {{ 60},{ 8}}, {{188},{ 8}}, {{124},{ 8}}, +{{252},{ 8}}, {{ 2},{ 8}}, {{130},{ 8}}, {{ 66},{ 8}}, {{194},{ 8}}, +{{ 34},{ 8}}, {{162},{ 8}}, {{ 98},{ 8}}, {{226},{ 8}}, {{ 18},{ 8}}, +{{146},{ 8}}, {{ 82},{ 8}}, {{210},{ 8}}, {{ 50},{ 8}}, {{178},{ 8}}, +{{114},{ 8}}, {{242},{ 8}}, {{ 10},{ 8}}, {{138},{ 8}}, {{ 74},{ 8}}, +{{202},{ 8}}, {{ 42},{ 8}}, {{170},{ 8}}, {{106},{ 8}}, {{234},{ 8}}, +{{ 26},{ 8}}, {{154},{ 8}}, {{ 90},{ 8}}, {{218},{ 8}}, {{ 58},{ 8}}, +{{186},{ 8}}, {{122},{ 8}}, {{250},{ 8}}, {{ 6},{ 8}}, {{134},{ 8}}, +{{ 70},{ 8}}, {{198},{ 8}}, {{ 38},{ 8}}, {{166},{ 8}}, {{102},{ 8}}, +{{230},{ 8}}, {{ 22},{ 8}}, {{150},{ 8}}, {{ 86},{ 8}}, {{214},{ 8}}, +{{ 54},{ 8}}, {{182},{ 8}}, {{118},{ 8}}, {{246},{ 8}}, {{ 14},{ 8}}, +{{142},{ 8}}, {{ 78},{ 8}}, {{206},{ 8}}, {{ 46},{ 8}}, {{174},{ 8}}, +{{110},{ 8}}, {{238},{ 8}}, {{ 30},{ 8}}, {{158},{ 8}}, {{ 94},{ 8}}, +{{222},{ 8}}, {{ 62},{ 8}}, {{190},{ 8}}, {{126},{ 8}}, {{254},{ 8}}, +{{ 1},{ 8}}, {{129},{ 8}}, {{ 65},{ 8}}, {{193},{ 8}}, {{ 33},{ 8}}, +{{161},{ 8}}, {{ 97},{ 8}}, {{225},{ 8}}, {{ 17},{ 8}}, {{145},{ 8}}, +{{ 81},{ 8}}, {{209},{ 8}}, {{ 49},{ 8}}, {{177},{ 8}}, {{113},{ 8}}, +{{241},{ 8}}, {{ 9},{ 8}}, {{137},{ 8}}, {{ 73},{ 8}}, {{201},{ 8}}, +{{ 41},{ 8}}, {{169},{ 8}}, {{105},{ 8}}, {{233},{ 8}}, {{ 25},{ 8}}, +{{153},{ 8}}, {{ 89},{ 8}}, {{217},{ 8}}, {{ 57},{ 8}}, {{185},{ 8}}, +{{121},{ 8}}, {{249},{ 8}}, {{ 5},{ 8}}, {{133},{ 8}}, {{ 69},{ 8}}, +{{197},{ 8}}, {{ 37},{ 8}}, {{165},{ 8}}, {{101},{ 8}}, {{229},{ 8}}, +{{ 21},{ 8}}, {{149},{ 8}}, {{ 85},{ 8}}, {{213},{ 8}}, {{ 53},{ 8}}, +{{181},{ 8}}, {{117},{ 8}}, {{245},{ 8}}, {{ 13},{ 8}}, {{141},{ 8}}, +{{ 77},{ 8}}, {{205},{ 8}}, {{ 45},{ 8}}, {{173},{ 8}}, {{109},{ 8}}, +{{237},{ 8}}, {{ 29},{ 8}}, {{157},{ 8}}, {{ 93},{ 8}}, {{221},{ 8}}, +{{ 61},{ 8}}, {{189},{ 8}}, {{125},{ 8}}, {{253},{ 8}}, {{ 19},{ 9}}, +{{275},{ 9}}, {{147},{ 9}}, {{403},{ 9}}, {{ 83},{ 9}}, {{339},{ 9}}, +{{211},{ 9}}, {{467},{ 9}}, {{ 51},{ 9}}, {{307},{ 9}}, {{179},{ 9}}, +{{435},{ 9}}, {{115},{ 9}}, {{371},{ 9}}, {{243},{ 9}}, {{499},{ 9}}, +{{ 11},{ 9}}, {{267},{ 9}}, {{139},{ 9}}, {{395},{ 9}}, {{ 75},{ 9}}, +{{331},{ 9}}, {{203},{ 9}}, {{459},{ 9}}, {{ 43},{ 9}}, {{299},{ 9}}, +{{171},{ 9}}, {{427},{ 9}}, {{107},{ 9}}, {{363},{ 9}}, {{235},{ 9}}, +{{491},{ 9}}, {{ 27},{ 9}}, {{283},{ 9}}, {{155},{ 9}}, {{411},{ 9}}, +{{ 91},{ 9}}, {{347},{ 9}}, {{219},{ 9}}, {{475},{ 9}}, {{ 59},{ 9}}, +{{315},{ 9}}, {{187},{ 9}}, {{443},{ 9}}, {{123},{ 9}}, {{379},{ 9}}, +{{251},{ 9}}, {{507},{ 9}}, {{ 7},{ 9}}, {{263},{ 9}}, {{135},{ 9}}, +{{391},{ 9}}, {{ 71},{ 9}}, {{327},{ 9}}, {{199},{ 9}}, {{455},{ 9}}, +{{ 39},{ 9}}, {{295},{ 9}}, {{167},{ 9}}, {{423},{ 9}}, {{103},{ 9}}, +{{359},{ 9}}, {{231},{ 9}}, {{487},{ 9}}, {{ 23},{ 9}}, {{279},{ 9}}, +{{151},{ 9}}, {{407},{ 9}}, {{ 87},{ 9}}, {{343},{ 9}}, {{215},{ 9}}, +{{471},{ 9}}, {{ 55},{ 9}}, {{311},{ 9}}, {{183},{ 9}}, {{439},{ 9}}, +{{119},{ 9}}, {{375},{ 9}}, {{247},{ 9}}, {{503},{ 9}}, {{ 15},{ 9}}, +{{271},{ 9}}, {{143},{ 9}}, {{399},{ 9}}, {{ 79},{ 9}}, {{335},{ 9}}, +{{207},{ 9}}, {{463},{ 9}}, {{ 47},{ 9}}, {{303},{ 9}}, {{175},{ 9}}, +{{431},{ 9}}, {{111},{ 9}}, {{367},{ 9}}, {{239},{ 9}}, {{495},{ 9}}, +{{ 31},{ 9}}, {{287},{ 9}}, {{159},{ 9}}, {{415},{ 9}}, {{ 95},{ 9}}, +{{351},{ 9}}, {{223},{ 9}}, {{479},{ 9}}, {{ 63},{ 9}}, {{319},{ 9}}, +{{191},{ 9}}, {{447},{ 9}}, {{127},{ 9}}, {{383},{ 9}}, {{255},{ 9}}, +{{511},{ 9}}, {{ 0},{ 7}}, {{ 64},{ 7}}, {{ 32},{ 7}}, {{ 96},{ 7}}, +{{ 16},{ 7}}, {{ 80},{ 7}}, {{ 48},{ 7}}, {{112},{ 7}}, {{ 8},{ 7}}, +{{ 72},{ 7}}, {{ 40},{ 7}}, {{104},{ 7}}, {{ 24},{ 7}}, {{ 88},{ 7}}, +{{ 56},{ 7}}, {{120},{ 7}}, {{ 4},{ 7}}, {{ 68},{ 7}}, {{ 36},{ 7}}, +{{100},{ 7}}, {{ 20},{ 7}}, {{ 84},{ 7}}, {{ 52},{ 7}}, {{116},{ 7}}, +{{ 3},{ 8}}, {{131},{ 8}}, {{ 67},{ 8}}, {{195},{ 8}}, {{ 35},{ 8}}, +{{163},{ 8}}, {{ 99},{ 8}}, {{227},{ 8}} +}; + +local const ct_data static_dtree[D_CODES] = { +{{ 0},{ 5}}, {{16},{ 5}}, {{ 8},{ 5}}, {{24},{ 5}}, {{ 4},{ 5}}, +{{20},{ 5}}, {{12},{ 5}}, {{28},{ 5}}, {{ 2},{ 5}}, {{18},{ 5}}, +{{10},{ 5}}, {{26},{ 5}}, {{ 6},{ 5}}, {{22},{ 5}}, {{14},{ 5}}, +{{30},{ 5}}, {{ 1},{ 5}}, {{17},{ 5}}, {{ 9},{ 5}}, {{25},{ 5}}, +{{ 5},{ 5}}, {{21},{ 5}}, {{13},{ 5}}, {{29},{ 5}}, {{ 3},{ 5}}, +{{19},{ 5}}, {{11},{ 5}}, {{27},{ 5}}, {{ 7},{ 5}}, {{23},{ 5}} +}; + +const uch _dist_code[DIST_CODE_LEN] = { + 0, 1, 2, 3, 4, 4, 5, 5, 6, 6, 6, 6, 7, 7, 7, 7, 8, 8, 8, 8, + 8, 8, 8, 8, 9, 9, 9, 9, 9, 9, 9, 9, 10, 10, 10, 10, 10, 10, 10, 10, +10, 10, 10, 10, 10, 10, 10, 10, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, +11, 11, 11, 11, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, +12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 13, 13, 13, 13, +13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, +13, 13, 13, 13, 13, 13, 13, 13, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, +14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, +14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, +14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 15, 15, 15, 15, 15, 15, 15, 15, +15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, +15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, +15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 0, 0, 16, 17, +18, 18, 19, 19, 20, 20, 20, 20, 21, 21, 21, 21, 22, 22, 22, 22, 22, 22, 22, 22, +23, 23, 23, 23, 23, 23, 23, 23, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, +24, 24, 24, 24, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, +26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, +26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 27, 27, 27, 27, 27, 27, 27, 27, +27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, +27, 27, 27, 27, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, +28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, +28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, +28, 28, 28, 28, 28, 28, 28, 28, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, +29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, +29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, +29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29 +}; + +const uch _length_code[MAX_MATCH-MIN_MATCH+1]= { + 0, 1, 2, 3, 4, 5, 6, 7, 8, 8, 9, 9, 10, 10, 11, 11, 12, 12, 12, 12, +13, 13, 13, 13, 14, 14, 14, 14, 15, 15, 15, 15, 16, 16, 16, 16, 16, 16, 16, 16, +17, 17, 17, 17, 17, 17, 17, 17, 18, 18, 18, 18, 18, 18, 18, 18, 19, 19, 19, 19, +19, 19, 19, 19, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, +21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 22, 22, 22, 22, +22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 23, 23, 23, 23, 23, 23, 23, 23, +23, 23, 23, 23, 23, 23, 23, 23, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, +24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, +25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, +25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 26, 26, 26, 26, 26, 26, 26, 26, +26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, +26, 26, 26, 26, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, +27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 28 +}; + +local const int base_length[LENGTH_CODES] = { +0, 1, 2, 3, 4, 5, 6, 7, 8, 10, 12, 14, 16, 20, 24, 28, 32, 40, 48, 56, +64, 80, 96, 112, 128, 160, 192, 224, 0 +}; + +local const int base_dist[D_CODES] = { + 0, 1, 2, 3, 4, 6, 8, 12, 16, 24, + 32, 48, 64, 96, 128, 192, 256, 384, 512, 768, + 1024, 1536, 2048, 3072, 4096, 6144, 8192, 12288, 16384, 24576 +}; + diff --git a/contrib/zlib_note.txt b/contrib/zlib_note.txt index f97c85be2..538f8011f 100644 --- a/contrib/zlib_note.txt +++ b/contrib/zlib_note.txt @@ -2,12 +2,10 @@ This is a heavily modified and shrinked version of zlib 1.2.3 - Removed comments from zlib.h - Removed gzip/zip archive I/O -- Removed Compression part - Removed infback.c - Added Assimp #idefs to exclude it if not needed - Disabled debug macros in zutil.h -All inflateNNN functions are available, for the rest you need to try. -If a function is needed but is not there, get zlib and add the -corresponding files to the repos. zlib is quite clean, it shouldn't -be too difficult to configure it to your needs. \ No newline at end of file +Assimp itself does not use the compression part yet, so +it needn't be compiled (trees.c, deflate.c, compress.c). +Currently these units are just used by assimp_cmd. \ No newline at end of file diff --git a/doc/AssimpCmdDoc_Html/AssimpCmdDoc.chm b/doc/AssimpCmdDoc_Html/AssimpCmdDoc.chm new file mode 100644 index 0000000000000000000000000000000000000000..e45d7e7b1656f59d25b76851c3bccd51df757b9c GIT binary patch literal 80269 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 NZ~q^_e*0$ce*g%sDs2D& literal 0 HcmV?d00001 diff --git a/doc/AssimpCmdDoc_Html/dragonsplash.png b/doc/AssimpCmdDoc_Html/dragonsplash.png new file mode 100644 index 0000000000000000000000000000000000000000..d5ff701753dc98084e96f7a70fca73f130d86ccc GIT binary patch literal 49960 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%0Db5nzWH+KFNH!Ww%Ge3 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 literal 0 HcmV?d00001 diff --git a/doc/AssimpDoc_Html/AssimpDoc.chm b/doc/AssimpDoc_Html/AssimpDoc.chm new file mode 100644 index 0000000000000000000000000000000000000000..5fd440f66a66b50b56387870cdfa8ff64578236f GIT binary patch literal 579550 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

VElnTK74hc-Ht8h9Ix`e(S3ll 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

1JjE-wg#x}S@~&Mx~5cX%-G!#t4_b3CCr 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

>4O$4D$27T74faS*U=3uKtgb15c!KKQHj? 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­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 literal 0 HcmV?d00001 diff --git a/doc/lib_html/dragonsplash.png b/doc/AssimpDoc_Html/dragonsplash.png similarity index 100% rename from doc/lib_html/dragonsplash.png rename to doc/AssimpDoc_Html/dragonsplash.png diff --git a/doc/Doxyfile b/doc/Doxyfile index 6476a46bd..cc8d47200 100644 --- a/doc/Doxyfile +++ b/doc/Doxyfile @@ -574,7 +574,7 @@ WARN_LOGFILE = # with spaces. INPUT = ../include/ \ - ../doc/ + ../doc/dox.h # This tag can be used to specify the character encoding of the source files # that doxygen parses. Internally doxygen uses the UTF-8 encoding, which is @@ -796,7 +796,7 @@ GENERATE_HTML = YES # If a relative path is entered the value of OUTPUT_DIRECTORY will be # put in front of it. If left blank `html' will be used as the default path. -HTML_OUTPUT = lib_html +HTML_OUTPUT = AssimpDoc_Html # The HTML_FILE_EXTENSION tag can be used to specify the file extension for # each generated HTML page (for example: .htm,.php,.asp). If it is left blank diff --git a/doc/Doxyfile_Cmd b/doc/Doxyfile_Cmd new file mode 100644 index 000000000..71956901e --- /dev/null +++ b/doc/Doxyfile_Cmd @@ -0,0 +1,1540 @@ +# Doxyfile 1.5.8 + +# This file describes the settings to be used by the documentation system +# doxygen (www.doxygen.org) for a project +# +# All text after a hash (#) is considered a comment and will be ignored +# The format is: +# TAG = value [value, ...] +# For lists items can also be appended using: +# TAG += value [value, ...] +# Values that contain spaces should be placed between quotes (" ") + +#--------------------------------------------------------------------------- +# Project related configuration options +#--------------------------------------------------------------------------- + +# This tag specifies the encoding used for all characters in the config file +# that follow. The default is UTF-8 which is also the encoding used for all +# text before the first occurrence of this tag. Doxygen uses libiconv (or the +# iconv built into libc) for the transcoding. See +# http://www.gnu.org/software/libiconv for the list of possible encodings. + +DOXYFILE_ENCODING = UTF-8 + +# The PROJECT_NAME tag is a single word (or a sequence of words surrounded +# by quotes) that should identify the project. + +PROJECT_NAME = AssimpCMD + +# The PROJECT_NUMBER tag can be used to enter a project or revision number. +# This could be handy for archiving the generated documentation or +# if some version control system is used. + +PROJECT_NUMBER = r325 + +# The OUTPUT_DIRECTORY tag is used to specify the (relative or absolute) +# base path where the generated documentation will be put. +# If a relative path is entered, it will be relative to the location +# where doxygen was started. If left blank the current directory will be used. + +OUTPUT_DIRECTORY = + +# If the CREATE_SUBDIRS tag is set to YES, then doxygen will create +# 4096 sub-directories (in 2 levels) under the output directory of each output +# format and will distribute the generated files over these directories. +# Enabling this option can be useful when feeding doxygen a huge amount of +# source files, where putting all generated files in the same directory would +# otherwise cause performance problems for the file system. + +CREATE_SUBDIRS = NO + +# The OUTPUT_LANGUAGE tag is used to specify the language in which all +# documentation generated by doxygen is written. Doxygen will use this +# information to generate all constant output in the proper language. +# The default language is English, other supported languages are: +# Afrikaans, Arabic, Brazilian, Catalan, Chinese, Chinese-Traditional, +# Croatian, Czech, Danish, Dutch, Farsi, Finnish, French, German, Greek, +# Hungarian, Italian, Japanese, Japanese-en (Japanese with English messages), +# Korean, Korean-en, Lithuanian, Norwegian, Macedonian, Persian, Polish, +# Portuguese, Romanian, Russian, Serbian, Serbian-Cyrilic, Slovak, Slovene, +# Spanish, Swedish, and Ukrainian. + +OUTPUT_LANGUAGE = English + +# If the BRIEF_MEMBER_DESC tag is set to YES (the default) Doxygen will +# include brief member descriptions after the members that are listed in +# the file and class documentation (similar to JavaDoc). +# Set to NO to disable this. + +BRIEF_MEMBER_DESC = YES + +# If the REPEAT_BRIEF tag is set to YES (the default) Doxygen will prepend +# the brief description of a member or function before the detailed description. +# Note: if both HIDE_UNDOC_MEMBERS and BRIEF_MEMBER_DESC are set to NO, the +# brief descriptions will be completely suppressed. + +REPEAT_BRIEF = YES + +# This tag implements a quasi-intelligent brief description abbreviator +# that is used to form the text in various listings. Each string +# in this list, if found as the leading text of the brief description, will be +# stripped from the text and the result after processing the whole list, is +# used as the annotated text. Otherwise, the brief description is used as-is. +# If left blank, the following values are used ("$name" is automatically +# replaced with the name of the entity): "The $name class" "The $name widget" +# "The $name file" "is" "provides" "specifies" "contains" +# "represents" "a" "an" "the" + +ABBREVIATE_BRIEF = "The $name class " \ + "The $name widget " \ + "The $name file " \ + is \ + provides \ + specifies \ + contains \ + represents \ + a \ + an \ + the + +# If the ALWAYS_DETAILED_SEC and REPEAT_BRIEF tags are both set to YES then +# Doxygen will generate a detailed section even if there is only a brief +# description. + +ALWAYS_DETAILED_SEC = NO + +# If the INLINE_INHERITED_MEMB tag is set to YES, doxygen will show all +# inherited members of a class in the documentation of that class as if those +# members were ordinary class members. Constructors, destructors and assignment +# operators of the base classes will not be shown. + +INLINE_INHERITED_MEMB = NO + +# If the FULL_PATH_NAMES tag is set to YES then Doxygen will prepend the full +# path before files name in the file list and in the header files. If set +# to NO the shortest path that makes the file name unique will be used. + +FULL_PATH_NAMES = NO + +# If the FULL_PATH_NAMES tag is set to YES then the STRIP_FROM_PATH tag +# can be used to strip a user-defined part of the path. Stripping is +# only done if one of the specified strings matches the left-hand part of +# the path. The tag can be used to show relative paths in the file list. +# If left blank the directory from which doxygen is run is used as the +# path to strip. + +STRIP_FROM_PATH = + +# The STRIP_FROM_INC_PATH tag can be used to strip a user-defined part of +# the path mentioned in the documentation of a class, which tells +# the reader which header file to include in order to use a class. +# If left blank only the name of the header file containing the class +# definition is used. Otherwise one should specify the include paths that +# are normally passed to the compiler using the -I flag. + +STRIP_FROM_INC_PATH = + +# If the SHORT_NAMES tag is set to YES, doxygen will generate much shorter +# (but less readable) file names. This can be useful is your file systems +# doesn't support long names like on DOS, Mac, or CD-ROM. + +SHORT_NAMES = NO + +# If the JAVADOC_AUTOBRIEF tag is set to YES then Doxygen +# will interpret the first line (until the first dot) of a JavaDoc-style +# comment as the brief description. If set to NO, the JavaDoc +# comments will behave just like regular Qt-style comments +# (thus requiring an explicit @brief command for a brief description.) + +JAVADOC_AUTOBRIEF = YES + +# If the QT_AUTOBRIEF tag is set to YES then Doxygen will +# interpret the first line (until the first dot) of a Qt-style +# comment as the brief description. If set to NO, the comments +# will behave just like regular Qt-style comments (thus requiring +# an explicit \brief command for a brief description.) + +QT_AUTOBRIEF = NO + +# The MULTILINE_CPP_IS_BRIEF tag can be set to YES to make Doxygen +# treat a multi-line C++ special comment block (i.e. a block of //! or /// +# comments) as a brief description. This used to be the default behaviour. +# The new default is to treat a multi-line C++ comment block as a detailed +# description. Set this tag to YES if you prefer the old behaviour instead. + +MULTILINE_CPP_IS_BRIEF = NO + +# If the INHERIT_DOCS tag is set to YES (the default) then an undocumented +# member inherits the documentation from any documented member that it +# re-implements. + +INHERIT_DOCS = YES + +# If the SEPARATE_MEMBER_PAGES tag is set to YES, then doxygen will produce +# a new page for each member. If set to NO, the documentation of a member will +# be part of the file/class/namespace that contains it. + +SEPARATE_MEMBER_PAGES = NO + +# The TAB_SIZE tag can be used to set the number of spaces in a tab. +# Doxygen uses this value to replace tabs by spaces in code fragments. + +TAB_SIZE = 8 + +# This tag can be used to specify a number of aliases that acts +# as commands in the documentation. An alias has the form "name=value". +# For example adding "sideeffect=\par Side Effects:\n" will allow you to +# put the command \sideeffect (or @sideeffect) in the documentation, which +# will result in a user-defined paragraph with heading "Side Effects:". +# You can put \n's in the value part of an alias to insert newlines. + +ALIASES = + +# Set the OPTIMIZE_OUTPUT_FOR_C tag to YES if your project consists of C +# sources only. Doxygen will then generate output that is more tailored for C. +# For instance, some of the names that are used will be different. The list +# of all members will be omitted, etc. + +OPTIMIZE_OUTPUT_FOR_C = NO + +# Set the OPTIMIZE_OUTPUT_JAVA tag to YES if your project consists of Java +# sources only. Doxygen will then generate output that is more tailored for +# Java. For instance, namespaces will be presented as packages, qualified +# scopes will look different, etc. + +OPTIMIZE_OUTPUT_JAVA = NO + +# Set the OPTIMIZE_FOR_FORTRAN tag to YES if your project consists of Fortran +# sources only. Doxygen will then generate output that is more tailored for +# Fortran. + +OPTIMIZE_FOR_FORTRAN = NO + +# Set the OPTIMIZE_OUTPUT_VHDL tag to YES if your project consists of VHDL +# sources. Doxygen will then generate output that is tailored for +# VHDL. + +OPTIMIZE_OUTPUT_VHDL = NO + +# Doxygen selects the parser to use depending on the extension of the files it parses. +# With this tag you can assign which parser to use for a given extension. +# Doxygen has a built-in mapping, but you can override or extend it using this tag. +# The format is ext=language, where ext is a file extension, and language is one of +# the parsers supported by doxygen: IDL, Java, Javascript, C#, C, C++, D, PHP, +# Objective-C, Python, Fortran, VHDL, C, C++. For instance to make doxygen treat +# .inc files as Fortran files (default is PHP), and .f files as C (default is Fortran), +# use: inc=Fortran f=C + +EXTENSION_MAPPING = + +# If you use STL classes (i.e. std::string, std::vector, etc.) but do not want +# to include (a tag file for) the STL sources as input, then you should +# set this tag to YES in order to let doxygen match functions declarations and +# definitions whose arguments contain STL classes (e.g. func(std::string); v.s. +# func(std::string) {}). This also make the inheritance and collaboration +# diagrams that involve STL classes more complete and accurate. + +BUILTIN_STL_SUPPORT = YES + +# If you use Microsoft's C++/CLI language, you should set this option to YES to +# enable parsing support. + +CPP_CLI_SUPPORT = NO + +# Set the SIP_SUPPORT tag to YES if your project consists of sip sources only. +# Doxygen will parse them like normal C++ but will assume all classes use public +# instead of private inheritance when no explicit protection keyword is present. + +SIP_SUPPORT = NO + +# For Microsoft's IDL there are propget and propput attributes to indicate getter +# and setter methods for a property. Setting this option to YES (the default) +# will make doxygen to replace the get and set methods by a property in the +# documentation. This will only work if the methods are indeed getting or +# setting a simple type. If this is not the case, or you want to show the +# methods anyway, you should set this option to NO. + +IDL_PROPERTY_SUPPORT = YES + +# If member grouping is used in the documentation and the DISTRIBUTE_GROUP_DOC +# tag is set to YES, then doxygen will reuse the documentation of the first +# member in the group (if any) for the other members of the group. By default +# all members of a group must be documented explicitly. + +DISTRIBUTE_GROUP_DOC = NO + +# Set the SUBGROUPING tag to YES (the default) to allow class member groups of +# the same type (for instance a group of public functions) to be put as a +# subgroup of that type (e.g. under the Public Functions section). Set it to +# NO to prevent subgrouping. Alternatively, this can be done per class using +# the \nosubgrouping command. + +SUBGROUPING = YES + +# When TYPEDEF_HIDES_STRUCT is enabled, a typedef of a struct, union, or enum +# is documented as struct, union, or enum with the name of the typedef. So +# typedef struct TypeS {} TypeT, will appear in the documentation as a struct +# with name TypeT. When disabled the typedef will appear as a member of a file, +# namespace, or class. And the struct will be named TypeS. This can typically +# be useful for C code in case the coding convention dictates that all compound +# types are typedef'ed and only the typedef is referenced, never the tag name. + +TYPEDEF_HIDES_STRUCT = YES + +# The SYMBOL_CACHE_SIZE determines the size of the internal cache use to +# determine which symbols to keep in memory and which to flush to disk. +# When the cache is full, less often used symbols will be written to disk. +# For small to medium size projects (<1000 input files) the default value is +# probably good enough. For larger projects a too small cache size can cause +# doxygen to be busy swapping symbols to and from disk most of the time +# causing a significant performance penality. +# If the system has enough physical memory increasing the cache will improve the +# performance by keeping more symbols in memory. Note that the value works on +# a logarithmic scale so increasing the size by one will rougly double the +# memory usage. The cache size is given by this formula: +# 2^(16+SYMBOL_CACHE_SIZE). The valid range is 0..9, the default is 0, +# corresponding to a cache size of 2^16 = 65536 symbols + +SYMBOL_CACHE_SIZE = 0 + +#--------------------------------------------------------------------------- +# Build related configuration options +#--------------------------------------------------------------------------- + +# If the EXTRACT_ALL tag is set to YES doxygen will assume all entities in +# documentation are documented, even if no documentation was available. +# Private class members and static file members will be hidden unless +# the EXTRACT_PRIVATE and EXTRACT_STATIC tags are set to YES + +EXTRACT_ALL = YES + +# If the EXTRACT_PRIVATE tag is set to YES all private members of a class +# will be included in the documentation. + +EXTRACT_PRIVATE = NO + +# If the EXTRACT_STATIC tag is set to YES all static members of a file +# will be included in the documentation. + +EXTRACT_STATIC = YES + +# If the EXTRACT_LOCAL_CLASSES tag is set to YES classes (and structs) +# defined locally in source files will be included in the documentation. +# If set to NO only classes defined in header files are included. + +EXTRACT_LOCAL_CLASSES = YES + +# This flag is only useful for Objective-C code. When set to YES local +# methods, which are defined in the implementation section but not in +# the interface are included in the documentation. +# If set to NO (the default) only methods in the interface are included. + +EXTRACT_LOCAL_METHODS = NO + +# If this flag is set to YES, the members of anonymous namespaces will be +# extracted and appear in the documentation as a namespace called +# 'anonymous_namespace{file}', where file will be replaced with the base +# name of the file that contains the anonymous namespace. By default +# anonymous namespace are hidden. + +EXTRACT_ANON_NSPACES = NO + +# If the HIDE_UNDOC_MEMBERS tag is set to YES, Doxygen will hide all +# undocumented members of documented classes, files or namespaces. +# If set to NO (the default) these members will be included in the +# various overviews, but no documentation section is generated. +# This option has no effect if EXTRACT_ALL is enabled. + +HIDE_UNDOC_MEMBERS = YES + +# If the HIDE_UNDOC_CLASSES tag is set to YES, Doxygen will hide all +# undocumented classes that are normally visible in the class hierarchy. +# If set to NO (the default) these classes will be included in the various +# overviews. This option has no effect if EXTRACT_ALL is enabled. + +HIDE_UNDOC_CLASSES = YES + +# If the HIDE_FRIEND_COMPOUNDS tag is set to YES, Doxygen will hide all +# friend (class|struct|union) declarations. +# If set to NO (the default) these declarations will be included in the +# documentation. + +HIDE_FRIEND_COMPOUNDS = NO + +# If the HIDE_IN_BODY_DOCS tag is set to YES, Doxygen will hide any +# documentation blocks found inside the body of a function. +# If set to NO (the default) these blocks will be appended to the +# function's detailed documentation block. + +HIDE_IN_BODY_DOCS = NO + +# The INTERNAL_DOCS tag determines if documentation +# that is typed after a \internal command is included. If the tag is set +# to NO (the default) then the documentation will be excluded. +# Set it to YES to include the internal documentation. + +INTERNAL_DOCS = NO + +# If the CASE_SENSE_NAMES tag is set to NO then Doxygen will only generate +# file names in lower-case letters. If set to YES upper-case letters are also +# allowed. This is useful if you have classes or files whose names only differ +# in case and if your file system supports case sensitive file names. Windows +# and Mac users are advised to set this option to NO. + +CASE_SENSE_NAMES = NO + +# If the HIDE_SCOPE_NAMES tag is set to NO (the default) then Doxygen +# will show members with their full class and namespace scopes in the +# documentation. If set to YES the scope will be hidden. + +HIDE_SCOPE_NAMES = NO + +# If the SHOW_INCLUDE_FILES tag is set to YES (the default) then Doxygen +# will put a list of the files that are included by a file in the documentation +# of that file. + +SHOW_INCLUDE_FILES = NO + +# If the INLINE_INFO tag is set to YES (the default) then a tag [inline] +# is inserted in the documentation for inline members. + +INLINE_INFO = YES + +# If the SORT_MEMBER_DOCS tag is set to YES (the default) then doxygen +# will sort the (detailed) documentation of file and class members +# alphabetically by member name. If set to NO the members will appear in +# declaration order. + +SORT_MEMBER_DOCS = YES + +# If the SORT_BRIEF_DOCS tag is set to YES then doxygen will sort the +# brief documentation of file, namespace and class members alphabetically +# by member name. If set to NO (the default) the members will appear in +# declaration order. + +SORT_BRIEF_DOCS = YES + +# If the SORT_GROUP_NAMES tag is set to YES then doxygen will sort the +# hierarchy of group names into alphabetical order. If set to NO (the default) +# the group names will appear in their defined order. + +SORT_GROUP_NAMES = NO + +# If the SORT_BY_SCOPE_NAME tag is set to YES, the class list will be +# sorted by fully-qualified names, including namespaces. If set to +# NO (the default), the class list will be sorted only by class name, +# not including the namespace part. +# Note: This option is not very useful if HIDE_SCOPE_NAMES is set to YES. +# Note: This option applies only to the class list, not to the +# alphabetical list. + +SORT_BY_SCOPE_NAME = YES + +# The GENERATE_TODOLIST tag can be used to enable (YES) or +# disable (NO) the todo list. This list is created by putting \todo +# commands in the documentation. + +GENERATE_TODOLIST = YES + +# The GENERATE_TESTLIST tag can be used to enable (YES) or +# disable (NO) the test list. This list is created by putting \test +# commands in the documentation. + +GENERATE_TESTLIST = YES + +# The GENERATE_BUGLIST tag can be used to enable (YES) or +# disable (NO) the bug list. This list is created by putting \bug +# commands in the documentation. + +GENERATE_BUGLIST = YES + +# The GENERATE_DEPRECATEDLIST tag can be used to enable (YES) or +# disable (NO) the deprecated list. This list is created by putting +# \deprecated commands in the documentation. + +GENERATE_DEPRECATEDLIST= YES + +# The ENABLED_SECTIONS tag can be used to enable conditional +# documentation sections, marked by \if sectionname ... \endif. + +ENABLED_SECTIONS = + +# The MAX_INITIALIZER_LINES tag determines the maximum number of lines +# the initial value of a variable or define consists of for it to appear in +# the documentation. If the initializer consists of more lines than specified +# here it will be hidden. Use a value of 0 to hide initializers completely. +# The appearance of the initializer of individual variables and defines in the +# documentation can be controlled using \showinitializer or \hideinitializer +# command in the documentation regardless of this setting. + +MAX_INITIALIZER_LINES = 30 + +# Set the SHOW_USED_FILES tag to NO to disable the list of files generated +# at the bottom of the documentation of classes and structs. If set to YES the +# list will mention the files that were used to generate the documentation. + +SHOW_USED_FILES = YES + +# If the sources in your project are distributed over multiple directories +# then setting the SHOW_DIRECTORIES tag to YES will show the directory hierarchy +# in the documentation. The default is NO. + +SHOW_DIRECTORIES = NO + +# Set the SHOW_FILES tag to NO to disable the generation of the Files page. +# This will remove the Files entry from the Quick Index and from the +# Folder Tree View (if specified). The default is YES. + +SHOW_FILES = YES + +# Set the SHOW_NAMESPACES tag to NO to disable the generation of the +# Namespaces page. This will remove the Namespaces entry from the Quick Index +# and from the Folder Tree View (if specified). The default is YES. + +SHOW_NAMESPACES = YES + +# The FILE_VERSION_FILTER tag can be used to specify a program or script that +# doxygen should invoke to get the current version for each file (typically from +# the version control system). Doxygen will invoke the program by executing (via +# popen()) the command , where is the value of +# the FILE_VERSION_FILTER tag, and is the name of an input file +# provided by doxygen. Whatever the program writes to standard output +# is used as the file version. See the manual for examples. + +FILE_VERSION_FILTER = + +# The LAYOUT_FILE tag can be used to specify a layout file which will be parsed by +# doxygen. The layout file controls the global structure of the generated output files +# in an output format independent way. The create the layout file that represents +# doxygen's defaults, run doxygen with the -l option. You can optionally specify a +# file name after the option, if omitted DoxygenLayout.xml will be used as the name +# of the layout file. + +LAYOUT_FILE = + +#--------------------------------------------------------------------------- +# configuration options related to warning and progress messages +#--------------------------------------------------------------------------- + +# The QUIET tag can be used to turn on/off the messages that are generated +# by doxygen. Possible values are YES and NO. If left blank NO is used. + +QUIET = NO + +# The WARNINGS tag can be used to turn on/off the warning messages that are +# generated by doxygen. Possible values are YES and NO. If left blank +# NO is used. + +WARNINGS = YES + +# If WARN_IF_UNDOCUMENTED is set to YES, then doxygen will generate warnings +# for undocumented members. If EXTRACT_ALL is set to YES then this flag will +# automatically be disabled. + +WARN_IF_UNDOCUMENTED = YES + +# If WARN_IF_DOC_ERROR is set to YES, doxygen will generate warnings for +# potential errors in the documentation, such as not documenting some +# parameters in a documented function, or documenting parameters that +# don't exist or using markup commands wrongly. + +WARN_IF_DOC_ERROR = YES + +# This WARN_NO_PARAMDOC option can be abled to get warnings for +# functions that are documented, but have no documentation for their parameters +# or return value. If set to NO (the default) doxygen will only warn about +# wrong or incomplete parameter documentation, but not about the absence of +# documentation. + +WARN_NO_PARAMDOC = NO + +# The WARN_FORMAT tag determines the format of the warning messages that +# doxygen can produce. The string should contain the $file, $line, and $text +# tags, which will be replaced by the file and line number from which the +# warning originated and the warning text. Optionally the format may contain +# $version, which will be replaced by the version of the file (if it could +# be obtained via FILE_VERSION_FILTER) + +WARN_FORMAT = "$file:$line: $text" + +# The WARN_LOGFILE tag can be used to specify a file to which warning +# and error messages should be written. If left blank the output is written +# to stderr. + +WARN_LOGFILE = + +#--------------------------------------------------------------------------- +# configuration options related to the input files +#--------------------------------------------------------------------------- + +# The INPUT tag can be used to specify the files and/or directories that contain +# documented source files. You may enter file names like "myfile.cpp" or +# directories like "/usr/src/myproject". Separate the files or directories +# with spaces. + +INPUT = ../doc/dox_cmd.h + +# This tag can be used to specify the character encoding of the source files +# that doxygen parses. Internally doxygen uses the UTF-8 encoding, which is +# also the default input encoding. Doxygen uses libiconv (or the iconv built +# into libc) for the transcoding. See http://www.gnu.org/software/libiconv for +# the list of possible encodings. + +INPUT_ENCODING = UTF-8 + +# If the value of the INPUT tag contains directories, you can use the +# FILE_PATTERNS tag to specify one or more wildcard pattern (like *.cpp +# and *.h) to filter out the source-files in the directories. If left +# blank the following patterns are tested: +# *.c *.cc *.cxx *.cpp *.c++ *.java *.ii *.ixx *.ipp *.i++ *.inl *.h *.hh *.hxx +# *.hpp *.h++ *.idl *.odl *.cs *.php *.php3 *.inc *.m *.mm *.py *.f90 + +FILE_PATTERNS = *.c \ + *.cc \ + *.cxx \ + *.cpp \ + *.c++ \ + *.d \ + *.java \ + *.ii \ + *.ixx \ + *.ipp \ + *.i++ \ + *.inl \ + *.h \ + *.hh \ + *.hxx \ + *.hpp \ + *.h++ \ + *.idl \ + *.odl \ + *.cs \ + *.php \ + *.php3 \ + *.inc \ + *.m \ + *.mm \ + *.dox \ + *.py + +# The RECURSIVE tag can be used to turn specify whether or not subdirectories +# should be searched for input files as well. Possible values are YES and NO. +# If left blank NO is used. + +RECURSIVE = YES + +# The EXCLUDE tag can be used to specify files and/or directories that should +# excluded from the INPUT source files. This way you can easily exclude a +# subdirectory from a directory tree whose root is specified with the INPUT tag. + +EXCLUDE = ../include/BoostWorkaround + +# The EXCLUDE_SYMLINKS tag can be used select whether or not files or +# directories that are symbolic links (a Unix filesystem feature) are excluded +# from the input. + +EXCLUDE_SYMLINKS = NO + +# If the value of the INPUT tag contains directories, you can use the +# EXCLUDE_PATTERNS tag to specify one or more wildcard patterns to exclude +# certain files from those directories. Note that the wildcards are matched +# against the file with absolute path, so to exclude all test directories +# for example use the pattern */test/* + +EXCLUDE_PATTERNS = */.svn/* \ + */.svn + +# The EXCLUDE_SYMBOLS tag can be used to specify one or more symbol names +# (namespaces, classes, functions, etc.) that should be excluded from the +# output. The symbol name can be a fully qualified name, a word, or if the +# wildcard * is used, a substring. Examples: ANamespace, AClass, +# AClass::ANamespace, ANamespace::*Test + +EXCLUDE_SYMBOLS = + +# The EXAMPLE_PATH tag can be used to specify one or more files or +# directories that contain example code fragments that are included (see +# the \include command). + +EXAMPLE_PATH = + +# If the value of the EXAMPLE_PATH tag contains directories, you can use the +# EXAMPLE_PATTERNS tag to specify one or more wildcard pattern (like *.cpp +# and *.h) to filter out the source-files in the directories. If left +# blank all files are included. + +EXAMPLE_PATTERNS = * + +# If the EXAMPLE_RECURSIVE tag is set to YES then subdirectories will be +# searched for input files to be used with the \include or \dontinclude +# commands irrespective of the value of the RECURSIVE tag. +# Possible values are YES and NO. If left blank NO is used. + +EXAMPLE_RECURSIVE = NO + +# The IMAGE_PATH tag can be used to specify one or more files or +# directories that contain image that are included in the documentation (see +# the \image command). + +IMAGE_PATH = + +# The INPUT_FILTER tag can be used to specify a program that doxygen should +# invoke to filter for each input file. Doxygen will invoke the filter program +# by executing (via popen()) the command , where +# is the value of the INPUT_FILTER tag, and is the name of an +# input file. Doxygen will then use the output that the filter program writes +# to standard output. If FILTER_PATTERNS is specified, this tag will be +# ignored. + +INPUT_FILTER = + +# The FILTER_PATTERNS tag can be used to specify filters on a per file pattern +# basis. Doxygen will compare the file name with each pattern and apply the +# filter if there is a match. The filters are a list of the form: +# pattern=filter (like *.cpp=my_cpp_filter). See INPUT_FILTER for further +# info on how filters are used. If FILTER_PATTERNS is empty, INPUT_FILTER +# is applied to all files. + +FILTER_PATTERNS = + +# If the FILTER_SOURCE_FILES tag is set to YES, the input filter (if set using +# INPUT_FILTER) will be used to filter the input files when producing source +# files to browse (i.e. when SOURCE_BROWSER is set to YES). + +FILTER_SOURCE_FILES = NO + +#--------------------------------------------------------------------------- +# configuration options related to source browsing +#--------------------------------------------------------------------------- + +# If the SOURCE_BROWSER tag is set to YES then a list of source files will +# be generated. Documented entities will be cross-referenced with these sources. +# Note: To get rid of all source code in the generated output, make sure also +# VERBATIM_HEADERS is set to NO. + +SOURCE_BROWSER = NO + +# Setting the INLINE_SOURCES tag to YES will include the body +# of functions and classes directly in the documentation. + +INLINE_SOURCES = NO + +# Setting the STRIP_CODE_COMMENTS tag to YES (the default) will instruct +# doxygen to hide any special comment blocks from generated source code +# fragments. Normal C and C++ comments will always remain visible. + +STRIP_CODE_COMMENTS = YES + +# If the REFERENCED_BY_RELATION tag is set to YES +# then for each documented function all documented +# functions referencing it will be listed. + +REFERENCED_BY_RELATION = NO + +# If the REFERENCES_RELATION tag is set to YES +# then for each documented function all documented entities +# called/used by that function will be listed. + +REFERENCES_RELATION = NO + +# If the REFERENCES_LINK_SOURCE tag is set to YES (the default) +# and SOURCE_BROWSER tag is set to YES, then the hyperlinks from +# functions in REFERENCES_RELATION and REFERENCED_BY_RELATION lists will +# link to the source code. Otherwise they will link to the documentation. + +REFERENCES_LINK_SOURCE = YES + +# If the USE_HTAGS tag is set to YES then the references to source code +# will point to the HTML generated by the htags(1) tool instead of doxygen +# built-in source browser. The htags tool is part of GNU's global source +# tagging system (see http://www.gnu.org/software/global/global.html). You +# will need version 4.8.6 or higher. + +USE_HTAGS = NO + +# If the VERBATIM_HEADERS tag is set to YES (the default) then Doxygen +# will generate a verbatim copy of the header file for each class for +# which an include is specified. Set to NO to disable this. + +VERBATIM_HEADERS = NO + +#--------------------------------------------------------------------------- +# configuration options related to the alphabetical class index +#--------------------------------------------------------------------------- + +# If the ALPHABETICAL_INDEX tag is set to YES, an alphabetical index +# of all compounds will be generated. Enable this if the project +# contains a lot of classes, structs, unions or interfaces. + +ALPHABETICAL_INDEX = NO + +# If the alphabetical index is enabled (see ALPHABETICAL_INDEX) then +# the COLS_IN_ALPHA_INDEX tag can be used to specify the number of columns +# in which this list will be split (can be a number in the range [1..20]) + +COLS_IN_ALPHA_INDEX = 5 + +# In case all classes in a project start with a common prefix, all +# classes will be put under the same header in the alphabetical index. +# The IGNORE_PREFIX tag can be used to specify one or more prefixes that +# should be ignored while generating the index headers. + +IGNORE_PREFIX = + +#--------------------------------------------------------------------------- +# configuration options related to the HTML output +#--------------------------------------------------------------------------- + +# If the GENERATE_HTML tag is set to YES (the default) Doxygen will +# generate HTML output. + +GENERATE_HTML = YES + +# The HTML_OUTPUT tag is used to specify where the HTML docs will be put. +# If a relative path is entered the value of OUTPUT_DIRECTORY will be +# put in front of it. If left blank `html' will be used as the default path. + +HTML_OUTPUT = AssimpCmdDoc_Html + +# The HTML_FILE_EXTENSION tag can be used to specify the file extension for +# each generated HTML page (for example: .htm,.php,.asp). If it is left blank +# doxygen will generate files with .html extension. + +HTML_FILE_EXTENSION = .html + +# The HTML_HEADER tag can be used to specify a personal HTML header for +# each generated HTML page. If it is left blank doxygen will generate a +# standard header. + +HTML_HEADER = + +# The HTML_FOOTER tag can be used to specify a personal HTML footer for +# each generated HTML page. If it is left blank doxygen will generate a +# standard footer. + +HTML_FOOTER = + +# The HTML_STYLESHEET tag can be used to specify a user-defined cascading +# style sheet that is used by each HTML page. It can be used to +# fine-tune the look of the HTML output. If the tag is left blank doxygen +# will generate a default style sheet. Note that doxygen will try to copy +# the style sheet file to the HTML output directory, so don't put your own +# stylesheet in the HTML output directory as well, or it will be erased! + +HTML_STYLESHEET = style.css + +# If the HTML_ALIGN_MEMBERS tag is set to YES, the members of classes, +# files or namespaces will be aligned in HTML using tables. If set to +# NO a bullet list will be used. + +HTML_ALIGN_MEMBERS = YES + +# If the HTML_DYNAMIC_SECTIONS tag is set to YES then the generated HTML +# documentation will contain sections that can be hidden and shown after the +# page has loaded. For this to work a browser that supports +# JavaScript and DHTML is required (for instance Mozilla 1.0+, Firefox +# Netscape 6.0+, Internet explorer 5.0+, Konqueror, or Safari). + +HTML_DYNAMIC_SECTIONS = NO + +# If the GENERATE_DOCSET tag is set to YES, additional index files +# will be generated that can be used as input for Apple's Xcode 3 +# integrated development environment, introduced with OSX 10.5 (Leopard). +# To create a documentation set, doxygen will generate a Makefile in the +# HTML output directory. Running make will produce the docset in that +# directory and running "make install" will install the docset in +# ~/Library/Developer/Shared/Documentation/DocSets so that Xcode will find +# it at startup. +# See http://developer.apple.com/tools/creatingdocsetswithdoxygen.html for more information. + +GENERATE_DOCSET = NO + +# When GENERATE_DOCSET tag is set to YES, this tag determines the name of the +# feed. A documentation feed provides an umbrella under which multiple +# documentation sets from a single provider (such as a company or product suite) +# can be grouped. + +DOCSET_FEEDNAME = "Doxygen generated docs" + +# When GENERATE_DOCSET tag is set to YES, this tag specifies a string that +# should uniquely identify the documentation set bundle. This should be a +# reverse domain-name style string, e.g. com.mycompany.MyDocSet. Doxygen +# will append .docset to the name. + +DOCSET_BUNDLE_ID = org.doxygen.Project + +# If the GENERATE_HTMLHELP tag is set to YES, additional index files +# will be generated that can be used as input for tools like the +# Microsoft HTML help workshop to generate a compiled HTML help file (.chm) +# of the generated HTML documentation. + +GENERATE_HTMLHELP = YES + +# If the GENERATE_HTMLHELP tag is set to YES, the CHM_FILE tag can +# be used to specify the file name of the resulting .chm file. You +# can add a path in front of the file if the result should not be +# written to the html output directory. + +CHM_FILE = AssimpCmdDoc.chm + +# If the GENERATE_HTMLHELP tag is set to YES, the HHC_LOCATION tag can +# be used to specify the location (absolute path including file name) of +# the HTML help compiler (hhc.exe). If non-empty doxygen will try to run +# the HTML help compiler on the generated index.hhp. + +HHC_LOCATION = "C:/Program Files/HTML Help Workshop/hhc.exe" + +# If the GENERATE_HTMLHELP tag is set to YES, the GENERATE_CHI flag +# controls if a separate .chi index file is generated (YES) or that +# it should be included in the master .chm file (NO). + +GENERATE_CHI = NO + +# If the GENERATE_HTMLHELP tag is set to YES, the CHM_INDEX_ENCODING +# is used to encode HtmlHelp index (hhk), content (hhc) and project file +# content. + +CHM_INDEX_ENCODING = + +# If the GENERATE_HTMLHELP tag is set to YES, the BINARY_TOC flag +# controls whether a binary table of contents is generated (YES) or a +# normal table of contents (NO) in the .chm file. + +BINARY_TOC = NO + +# The TOC_EXPAND flag can be set to YES to add extra items for group members +# to the contents of the HTML help documentation and to the tree view. + +TOC_EXPAND = NO + +# If the GENERATE_QHP tag is set to YES and both QHP_NAMESPACE and QHP_VIRTUAL_FOLDER +# are set, an additional index file will be generated that can be used as input for +# Qt's qhelpgenerator to generate a Qt Compressed Help (.qch) of the generated +# HTML documentation. + +GENERATE_QHP = NO + +# If the QHG_LOCATION tag is specified, the QCH_FILE tag can +# be used to specify the file name of the resulting .qch file. +# The path specified is relative to the HTML output folder. + +QCH_FILE = + +# The QHP_NAMESPACE tag specifies the namespace to use when generating +# Qt Help Project output. For more information please see +# http://doc.trolltech.com/qthelpproject.html#namespace + +QHP_NAMESPACE = + +# The QHP_VIRTUAL_FOLDER tag specifies the namespace to use when generating +# Qt Help Project output. For more information please see +# http://doc.trolltech.com/qthelpproject.html#virtual-folders + +QHP_VIRTUAL_FOLDER = doc + +# If QHP_CUST_FILTER_NAME is set, it specifies the name of a custom filter to add. +# For more information please see +# http://doc.trolltech.com/qthelpproject.html#custom-filters + +QHP_CUST_FILTER_NAME = + +# The QHP_CUST_FILT_ATTRS tag specifies the list of the attributes of the custom filter to add.For more information please see +# Qt Help Project / Custom Filters. + +QHP_CUST_FILTER_ATTRS = + +# The QHP_SECT_FILTER_ATTRS tag specifies the list of the attributes this project's +# filter section matches. +# Qt Help Project / Filter Attributes. + +QHP_SECT_FILTER_ATTRS = + +# If the GENERATE_QHP tag is set to YES, the QHG_LOCATION tag can +# be used to specify the location of Qt's qhelpgenerator. +# If non-empty doxygen will try to run qhelpgenerator on the generated +# .qhp file. + +QHG_LOCATION = + +# The DISABLE_INDEX tag can be used to turn on/off the condensed index at +# top of each HTML page. The value NO (the default) enables the index and +# the value YES disables it. + +DISABLE_INDEX = NO + +# This tag can be used to set the number of enum values (range [1..20]) +# that doxygen will group on one line in the generated HTML documentation. + +ENUM_VALUES_PER_LINE = 4 + +# The GENERATE_TREEVIEW tag is used to specify whether a tree-like index +# structure should be generated to display hierarchical information. +# If the tag value is set to FRAME, a side panel will be generated +# containing a tree-like index structure (just like the one that +# is generated for HTML Help). For this to work a browser that supports +# JavaScript, DHTML, CSS and frames is required (for instance Mozilla 1.0+, +# Netscape 6.0+, Internet explorer 5.0+, or Konqueror). Windows users are +# probably better off using the HTML help feature. Other possible values +# for this tag are: HIERARCHIES, which will generate the Groups, Directories, +# and Class Hierarchy pages using a tree view instead of an ordered list; +# ALL, which combines the behavior of FRAME and HIERARCHIES; and NONE, which +# disables this behavior completely. For backwards compatibility with previous +# releases of Doxygen, the values YES and NO are equivalent to FRAME and NONE +# respectively. + +GENERATE_TREEVIEW = NO + +# If the treeview is enabled (see GENERATE_TREEVIEW) then this tag can be +# used to set the initial width (in pixels) of the frame in which the tree +# is shown. + +TREEVIEW_WIDTH = 250 + +# Use this tag to change the font size of Latex formulas included +# as images in the HTML documentation. The default is 10. Note that +# when you change the font size after a successful doxygen run you need +# to manually remove any form_*.png images from the HTML output directory +# to force them to be regenerated. + +FORMULA_FONTSIZE = 10 + +#--------------------------------------------------------------------------- +# configuration options related to the LaTeX output +#--------------------------------------------------------------------------- + +# If the GENERATE_LATEX tag is set to YES (the default) Doxygen will +# generate Latex output. + +GENERATE_LATEX = NO + +# The LATEX_OUTPUT tag is used to specify where the LaTeX docs will be put. +# If a relative path is entered the value of OUTPUT_DIRECTORY will be +# put in front of it. If left blank `latex' will be used as the default path. + +LATEX_OUTPUT = latex + +# The LATEX_CMD_NAME tag can be used to specify the LaTeX command name to be +# invoked. If left blank `latex' will be used as the default command name. + +LATEX_CMD_NAME = latex + +# The MAKEINDEX_CMD_NAME tag can be used to specify the command name to +# generate index for LaTeX. If left blank `makeindex' will be used as the +# default command name. + +MAKEINDEX_CMD_NAME = makeindex + +# If the COMPACT_LATEX tag is set to YES Doxygen generates more compact +# LaTeX documents. This may be useful for small projects and may help to +# save some trees in general. + +COMPACT_LATEX = NO + +# The PAPER_TYPE tag can be used to set the paper type that is used +# by the printer. Possible values are: a4, a4wide, letter, legal and +# executive. If left blank a4wide will be used. + +PAPER_TYPE = a4wide + +# The EXTRA_PACKAGES tag can be to specify one or more names of LaTeX +# packages that should be included in the LaTeX output. + +EXTRA_PACKAGES = + +# The LATEX_HEADER tag can be used to specify a personal LaTeX header for +# the generated latex document. The header should contain everything until +# the first chapter. If it is left blank doxygen will generate a +# standard header. Notice: only use this tag if you know what you are doing! + +LATEX_HEADER = + +# If the PDF_HYPERLINKS tag is set to YES, the LaTeX that is generated +# is prepared for conversion to pdf (using ps2pdf). The pdf file will +# contain links (just like the HTML output) instead of page references +# This makes the output suitable for online browsing using a pdf viewer. + +PDF_HYPERLINKS = NO + +# If the USE_PDFLATEX tag is set to YES, pdflatex will be used instead of +# plain latex in the generated Makefile. Set this option to YES to get a +# higher quality PDF documentation. + +USE_PDFLATEX = NO + +# If the LATEX_BATCHMODE tag is set to YES, doxygen will add the \\batchmode. +# command to the generated LaTeX files. This will instruct LaTeX to keep +# running if errors occur, instead of asking the user for help. +# This option is also used when generating formulas in HTML. + +LATEX_BATCHMODE = NO + +# If LATEX_HIDE_INDICES is set to YES then doxygen will not +# include the index chapters (such as File Index, Compound Index, etc.) +# in the output. + +LATEX_HIDE_INDICES = NO + +#--------------------------------------------------------------------------- +# configuration options related to the RTF output +#--------------------------------------------------------------------------- + +# If the GENERATE_RTF tag is set to YES Doxygen will generate RTF output +# The RTF output is optimized for Word 97 and may not look very pretty with +# other RTF readers or editors. + +GENERATE_RTF = NO + +# The RTF_OUTPUT tag is used to specify where the RTF docs will be put. +# If a relative path is entered the value of OUTPUT_DIRECTORY will be +# put in front of it. If left blank `rtf' will be used as the default path. + +RTF_OUTPUT = rtf + +# If the COMPACT_RTF tag is set to YES Doxygen generates more compact +# RTF documents. This may be useful for small projects and may help to +# save some trees in general. + +COMPACT_RTF = NO + +# If the RTF_HYPERLINKS tag is set to YES, the RTF that is generated +# will contain hyperlink fields. The RTF file will +# contain links (just like the HTML output) instead of page references. +# This makes the output suitable for online browsing using WORD or other +# programs which support those fields. +# Note: wordpad (write) and others do not support links. + +RTF_HYPERLINKS = NO + +# Load stylesheet definitions from file. Syntax is similar to doxygen's +# config file, i.e. a series of assignments. You only have to provide +# replacements, missing definitions are set to their default value. + +RTF_STYLESHEET_FILE = + +# Set optional variables used in the generation of an rtf document. +# Syntax is similar to doxygen's config file. + +RTF_EXTENSIONS_FILE = + +#--------------------------------------------------------------------------- +# configuration options related to the man page output +#--------------------------------------------------------------------------- + +# If the GENERATE_MAN tag is set to YES (the default) Doxygen will +# generate man pages + +GENERATE_MAN = NO + +# The MAN_OUTPUT tag is used to specify where the man pages will be put. +# If a relative path is entered the value of OUTPUT_DIRECTORY will be +# put in front of it. If left blank `man' will be used as the default path. + +MAN_OUTPUT = man + +# The MAN_EXTENSION tag determines the extension that is added to +# the generated man pages (default is the subroutine's section .3) + +MAN_EXTENSION = .3 + +# If the MAN_LINKS tag is set to YES and Doxygen generates man output, +# then it will generate one additional man file for each entity +# documented in the real man page(s). These additional files +# only source the real man page, but without them the man command +# would be unable to find the correct page. The default is NO. + +MAN_LINKS = NO + +#--------------------------------------------------------------------------- +# configuration options related to the XML output +#--------------------------------------------------------------------------- + +# If the GENERATE_XML tag is set to YES Doxygen will +# generate an XML file that captures the structure of +# the code including all documentation. + +GENERATE_XML = NO + +# The XML_OUTPUT tag is used to specify where the XML pages will be put. +# If a relative path is entered the value of OUTPUT_DIRECTORY will be +# put in front of it. If left blank `xml' will be used as the default path. + +XML_OUTPUT = xml + +# The XML_SCHEMA tag can be used to specify an XML schema, +# which can be used by a validating XML parser to check the +# syntax of the XML files. + +XML_SCHEMA = + +# The XML_DTD tag can be used to specify an XML DTD, +# which can be used by a validating XML parser to check the +# syntax of the XML files. + +XML_DTD = + +# If the XML_PROGRAMLISTING tag is set to YES Doxygen will +# dump the program listings (including syntax highlighting +# and cross-referencing information) to the XML output. Note that +# enabling this will significantly increase the size of the XML output. + +XML_PROGRAMLISTING = YES + +#--------------------------------------------------------------------------- +# configuration options for the AutoGen Definitions output +#--------------------------------------------------------------------------- + +# If the GENERATE_AUTOGEN_DEF tag is set to YES Doxygen will +# generate an AutoGen Definitions (see autogen.sf.net) file +# that captures the structure of the code including all +# documentation. Note that this feature is still experimental +# and incomplete at the moment. + +GENERATE_AUTOGEN_DEF = NO + +#--------------------------------------------------------------------------- +# configuration options related to the Perl module output +#--------------------------------------------------------------------------- + +# If the GENERATE_PERLMOD tag is set to YES Doxygen will +# generate a Perl module file that captures the structure of +# the code including all documentation. Note that this +# feature is still experimental and incomplete at the +# moment. + +GENERATE_PERLMOD = NO + +# If the PERLMOD_LATEX tag is set to YES Doxygen will generate +# the necessary Makefile rules, Perl scripts and LaTeX code to be able +# to generate PDF and DVI output from the Perl module output. + +PERLMOD_LATEX = NO + +# If the PERLMOD_PRETTY tag is set to YES the Perl module output will be +# nicely formatted so it can be parsed by a human reader. This is useful +# if you want to understand what is going on. On the other hand, if this +# tag is set to NO the size of the Perl module output will be much smaller +# and Perl will parse it just the same. + +PERLMOD_PRETTY = YES + +# The names of the make variables in the generated doxyrules.make file +# are prefixed with the string contained in PERLMOD_MAKEVAR_PREFIX. +# This is useful so different doxyrules.make files included by the same +# Makefile don't overwrite each other's variables. + +PERLMOD_MAKEVAR_PREFIX = + +#--------------------------------------------------------------------------- +# Configuration options related to the preprocessor +#--------------------------------------------------------------------------- + +# If the ENABLE_PREPROCESSING tag is set to YES (the default) Doxygen will +# evaluate all C-preprocessor directives found in the sources and include +# files. + +ENABLE_PREPROCESSING = YES + +# If the MACRO_EXPANSION tag is set to YES Doxygen will expand all macro +# names in the source code. If set to NO (the default) only conditional +# compilation will be performed. Macro expansion can be done in a controlled +# way by setting EXPAND_ONLY_PREDEF to YES. + +MACRO_EXPANSION = YES + +# If the EXPAND_ONLY_PREDEF and MACRO_EXPANSION tags are both set to YES +# then the macro expansion is limited to the macros specified with the +# PREDEFINED and EXPAND_AS_DEFINED tags. + +EXPAND_ONLY_PREDEF = YES + +# If the SEARCH_INCLUDES tag is set to YES (the default) the includes files +# in the INCLUDE_PATH (see below) will be search if a #include is found. + +SEARCH_INCLUDES = YES + +# The INCLUDE_PATH tag can be used to specify one or more directories that +# contain include files that are not input files but should be processed by +# the preprocessor. + +INCLUDE_PATH = + +# You can use the INCLUDE_FILE_PATTERNS tag to specify one or more wildcard +# patterns (like *.h and *.hpp) to filter out the header-files in the +# directories. If left blank, the patterns specified with FILE_PATTERNS will +# be used. + +INCLUDE_FILE_PATTERNS = + +# The PREDEFINED tag can be used to specify one or more macro names that +# are defined before the preprocessor is started (similar to the -D option of +# gcc). The argument of the tag is a list of macros of the form: name +# or name=definition (no spaces). If the definition and the = are +# omitted =1 is assumed. To prevent a macro definition from being +# undefined via #undef or recursively expanded use the := operator +# instead of the = operator. + +PREDEFINED = ASSIMP_DOXYGEN_BUILD=1 \ + __cplusplus + +# If the MACRO_EXPANSION and EXPAND_ONLY_PREDEF tags are set to YES then +# this tag can be used to specify a list of macro names that should be expanded. +# The macro definition that is found in the sources will be used. +# Use the PREDEFINED tag if you want to use a different macro definition. + +EXPAND_AS_DEFINED = C_STRUCT \ + C_ENUM + +# If the SKIP_FUNCTION_MACROS tag is set to YES (the default) then +# doxygen's preprocessor will remove all function-like macros that are alone +# on a line, have an all uppercase name, and do not end with a semicolon. Such +# function macros are typically used for boiler-plate code, and will confuse +# the parser if not removed. + +SKIP_FUNCTION_MACROS = YES + +#--------------------------------------------------------------------------- +# Configuration::additions related to external references +#--------------------------------------------------------------------------- + +# The TAGFILES option can be used to specify one or more tagfiles. +# Optionally an initial location of the external documentation +# can be added for each tagfile. The format of a tag file without +# this location is as follows: +# TAGFILES = file1 file2 ... +# Adding location for the tag files is done as follows: +# TAGFILES = file1=loc1 "file2 = loc2" ... +# where "loc1" and "loc2" can be relative or absolute paths or +# URLs. If a location is present for each tag, the installdox tool +# does not have to be run to correct the links. +# Note that each tag file must have a unique name +# (where the name does NOT include the path) +# If a tag file is not located in the directory in which doxygen +# is run, you must also specify the path to the tagfile here. + +TAGFILES = + +# When a file name is specified after GENERATE_TAGFILE, doxygen will create +# a tag file that is based on the input files it reads. + +GENERATE_TAGFILE = + +# If the ALLEXTERNALS tag is set to YES all external classes will be listed +# in the class index. If set to NO only the inherited external classes +# will be listed. + +ALLEXTERNALS = NO + +# If the EXTERNAL_GROUPS tag is set to YES all external groups will be listed +# in the modules index. If set to NO, only the current project's groups will +# be listed. + +EXTERNAL_GROUPS = YES + +# The PERL_PATH should be the absolute path and name of the perl script +# interpreter (i.e. the result of `which perl'). + +PERL_PATH = /usr/bin/perl + +#--------------------------------------------------------------------------- +# Configuration options related to the dot tool +#--------------------------------------------------------------------------- + +# If the CLASS_DIAGRAMS tag is set to YES (the default) Doxygen will +# generate a inheritance diagram (in HTML, RTF and LaTeX) for classes with base +# or super classes. Setting the tag to NO turns the diagrams off. Note that +# this option is superseded by the HAVE_DOT option below. This is only a +# fallback. It is recommended to install and use dot, since it yields more +# powerful graphs. + +CLASS_DIAGRAMS = NO + +# You can define message sequence charts within doxygen comments using the \msc +# command. Doxygen will then run the mscgen tool (see +# http://www.mcternan.me.uk/mscgen/) to produce the chart and insert it in the +# documentation. The MSCGEN_PATH tag allows you to specify the directory where +# the mscgen tool resides. If left empty the tool is assumed to be found in the +# default search path. + +MSCGEN_PATH = + +# If set to YES, the inheritance and collaboration graphs will hide +# inheritance and usage relations if the target is undocumented +# or is not a class. + +HIDE_UNDOC_RELATIONS = YES + +# If you set the HAVE_DOT tag to YES then doxygen will assume the dot tool is +# available from the path. This tool is part of Graphviz, a graph visualization +# toolkit from AT&T and Lucent Bell Labs. The other options in this section +# have no effect if this option is set to NO (the default) + +HAVE_DOT = NO + +# By default doxygen will write a font called FreeSans.ttf to the output +# directory and reference it in all dot files that doxygen generates. This +# font does not include all possible unicode characters however, so when you need +# these (or just want a differently looking font) you can specify the font name +# using DOT_FONTNAME. You need need to make sure dot is able to find the font, +# which can be done by putting it in a standard location or by setting the +# DOTFONTPATH environment variable or by setting DOT_FONTPATH to the directory +# containing the font. + +DOT_FONTNAME = FreeSans + +# The DOT_FONTSIZE tag can be used to set the size of the font of dot graphs. +# The default size is 10pt. + +DOT_FONTSIZE = 10 + +# By default doxygen will tell dot to use the output directory to look for the +# FreeSans.ttf font (which doxygen will put there itself). If you specify a +# different font using DOT_FONTNAME you can set the path where dot +# can find it using this tag. + +DOT_FONTPATH = + +# If the CLASS_GRAPH and HAVE_DOT tags are set to YES then doxygen +# will generate a graph for each documented class showing the direct and +# indirect inheritance relations. Setting this tag to YES will force the +# the CLASS_DIAGRAMS tag to NO. + +CLASS_GRAPH = YES + +# If the COLLABORATION_GRAPH and HAVE_DOT tags are set to YES then doxygen +# will generate a graph for each documented class showing the direct and +# indirect implementation dependencies (inheritance, containment, and +# class references variables) of the class with other documented classes. + +COLLABORATION_GRAPH = YES + +# If the GROUP_GRAPHS and HAVE_DOT tags are set to YES then doxygen +# will generate a graph for groups, showing the direct groups dependencies + +GROUP_GRAPHS = YES + +# If the UML_LOOK tag is set to YES doxygen will generate inheritance and +# collaboration diagrams in a style similar to the OMG's Unified Modeling +# Language. + +UML_LOOK = NO + +# If set to YES, the inheritance and collaboration graphs will show the +# relations between templates and their instances. + +TEMPLATE_RELATIONS = NO + +# If the ENABLE_PREPROCESSING, SEARCH_INCLUDES, INCLUDE_GRAPH, and HAVE_DOT +# tags are set to YES then doxygen will generate a graph for each documented +# file showing the direct and indirect include dependencies of the file with +# other documented files. + +INCLUDE_GRAPH = YES + +# If the ENABLE_PREPROCESSING, SEARCH_INCLUDES, INCLUDED_BY_GRAPH, and +# HAVE_DOT tags are set to YES then doxygen will generate a graph for each +# documented header file showing the documented files that directly or +# indirectly include this file. + +INCLUDED_BY_GRAPH = YES + +# If the CALL_GRAPH and HAVE_DOT options are set to YES then +# doxygen will generate a call dependency graph for every global function +# or class method. Note that enabling this option will significantly increase +# the time of a run. So in most cases it will be better to enable call graphs +# for selected functions only using the \callgraph command. + +CALL_GRAPH = NO + +# If the CALLER_GRAPH and HAVE_DOT tags are set to YES then +# doxygen will generate a caller dependency graph for every global function +# or class method. Note that enabling this option will significantly increase +# the time of a run. So in most cases it will be better to enable caller +# graphs for selected functions only using the \callergraph command. + +CALLER_GRAPH = NO + +# If the GRAPHICAL_HIERARCHY and HAVE_DOT tags are set to YES then doxygen +# will graphical hierarchy of all classes instead of a textual one. + +GRAPHICAL_HIERARCHY = YES + +# If the DIRECTORY_GRAPH, SHOW_DIRECTORIES and HAVE_DOT tags are set to YES +# then doxygen will show the dependencies a directory has on other directories +# in a graphical way. The dependency relations are determined by the #include +# relations between the files in the directories. + +DIRECTORY_GRAPH = YES + +# The DOT_IMAGE_FORMAT tag can be used to set the image format of the images +# generated by dot. Possible values are png, jpg, or gif +# If left blank png will be used. + +DOT_IMAGE_FORMAT = png + +# The tag DOT_PATH can be used to specify the path where the dot tool can be +# found. If left blank, it is assumed the dot tool can be found in the path. + +DOT_PATH = + +# The DOTFILE_DIRS tag can be used to specify one or more directories that +# contain dot files that are included in the documentation (see the +# \dotfile command). + +DOTFILE_DIRS = + +# The DOT_GRAPH_MAX_NODES tag can be used to set the maximum number of +# nodes that will be shown in the graph. If the number of nodes in a graph +# becomes larger than this value, doxygen will truncate the graph, which is +# visualized by representing a node as a red box. Note that doxygen if the +# number of direct children of the root node in a graph is already larger than +# DOT_GRAPH_MAX_NODES then the graph will not be shown at all. Also note +# that the size of a graph can be further restricted by MAX_DOT_GRAPH_DEPTH. + +DOT_GRAPH_MAX_NODES = 50 + +# The MAX_DOT_GRAPH_DEPTH tag can be used to set the maximum depth of the +# graphs generated by dot. A depth value of 3 means that only nodes reachable +# from the root by following a path via at most 3 edges will be shown. Nodes +# that lay further from the root node will be omitted. Note that setting this +# option to 1 or 2 may greatly reduce the computation time needed for large +# code bases. Also note that the size of a graph can be further restricted by +# DOT_GRAPH_MAX_NODES. Using a depth of 0 means no depth restriction. + +MAX_DOT_GRAPH_DEPTH = 1000 + +# Set the DOT_TRANSPARENT tag to YES to generate images with a transparent +# background. This is disabled by default, because dot on Windows does not +# seem to support this out of the box. Warning: Depending on the platform used, +# enabling this option may lead to badly anti-aliased labels on the edges of +# a graph (i.e. they become hard to read). + +DOT_TRANSPARENT = NO + +# Set the DOT_MULTI_TARGETS tag to YES allow dot to generate multiple output +# files in one run (i.e. multiple -o and -T options on the command line). This +# makes dot run faster, but since only newer versions of dot (>1.8.10) +# support this, this feature is disabled by default. + +DOT_MULTI_TARGETS = NO + +# If the GENERATE_LEGEND tag is set to YES (the default) Doxygen will +# generate a legend page explaining the meaning of the various boxes and +# arrows in the dot generated graphs. + +GENERATE_LEGEND = YES + +# If the DOT_CLEANUP tag is set to YES (the default) Doxygen will +# remove the intermediate dot files that are used to generate +# the various graphs. + +DOT_CLEANUP = YES + +#--------------------------------------------------------------------------- +# Options related to the search engine +#--------------------------------------------------------------------------- + +# The SEARCHENGINE tag specifies whether or not a search engine should be +# used. If set to NO the values of all tags below this one will be ignored. + +SEARCHENGINE = NO diff --git a/doc/dox_cmd.h b/doc/dox_cmd.h new file mode 100644 index 000000000..af0cbce9e --- /dev/null +++ b/doc/dox_cmd.h @@ -0,0 +1,427 @@ +/** @file dox_cmd.h + * @brief General documentation for assimp_cmd + */ + + +//---------------------------------------------------------------------------------------------- +// ASSIMP CMD MAINPAGE +/** +@mainpage ASSIMP Command-line tools + + + +@section intro Introduction + +This document describes the usage of assimp's command line tools. +This is *not* the SDK reference and programming-related stuff is not covered here. +

+NOTE: For simplicity, the following sections are written with Windows in mind. However +it's not different for Linux/Mac at all, except there's probably no assimp.exe ... + +@section basic_use Basic use + +Open a command prompt and navigate to the directory where assimp.exe resides. The basic command line is: + +@code +assimp [command] [parameters] +@endcode + +The following commands are available: + + + + + + + + + + + + + + + + + + + +
@link version version @endlinkRetrieve the current version of assimp
@link help help @endlinkGet a list of all commands (yes, it's this list ...)
@link dump dump @endlinkGenerate a human-readable text dump of a model
@link extract extract @endlinkExtract an embedded texture image
+ +If you use assimp's command line frequently, consider adding assimp to your PATH +environment. + + */ + + +/** +@page version 'version'-Command + + + */ + +/** +@page help 'help'-Command + + + */ + +//---------------------------------------------------------------------------------------------- +// ASSIMP DUMP + +/** +@page dump 'dump'-Command + +Generate a text or binary dump of a model. This is the core component of Assimp's internal +regression test suite but it could also be useful for other developers to quickly +examine the contents of a model. Note that text dumps are not intended to be used as +intermediate format, Assimp is not able to read them again, nor is the file format +stable or well-defined. It may change with every revision without notice. +Binary dumps (*.assfile) are backward- and forward-compatible. + +

Syntax:

+ +@code +assimp dump [] [-b] [-s] [common parameters] +@endcode + + +

Parameters:

+ +

+ +model

+Required. Relative or absolute path to the input model. A wildcard may be specified. +See the @link wildcard wildcards page @endlink for more information. +

+

+ +out

+Optional. Relative or absolute path to write the output dump to. If it is ommitted, +the dump is written to -dump.txt +

+ +

+-b
+

+Optional. If this switch is specified, the dumb is written in binary format. +The long form of this parameter is --binary. +

+ +

+-s
+

+Optional. If this switch is specified, the dumb is shortened to include only +min/max values for all vertex components and animation channels. The resulting +file is much smaller, but the original model can't be reconstructed from it. This is +used by Assimp's regression test suite,comapring those minidumps provides +a fast way to verify whether a loader works correctly or not. +The long form of this parameter is --short. +

+ +

+ +common parameters

+Optional. Import configuration & postprocessing. +See the @link common common parameters page @endlink for more information. +

+ +
+ +

Sample:

+ +@code +assimp dump test.3ds test.txt -l -cfull +assimp dump test.3ds test.txt -include-log -config=full +@endcode + +Dumps 'test.3ds' to 'test.txt' after executing full post-processing on tehe imported data. +The log output is included with the dump. + + +@code +assimp dump files\*.* +assimp dump files\*.* +@endcode + +Dumps all loadable model files in the 'files' subdir. The output dumps are named +-dump.txt. The log is not included. + */ + +//---------------------------------------------------------------------------------------------- +// ASSIMP EXTRACT + +/** +@page extract 'extract'-Command + +Extracts one or more embedded texture images from models. + +

Syntax:

+ +@code +assimp extract [] [-t] [-f] [-ba] [-s] [common parameters] +@endcode + + +

Parameters:

+ +

+ +model

+Required. Relative or absolute path to the input model. A wildcard may be specified. +See the @link wildcard wildcards page @endlink for more information. +

+

+ +out

+Optional. Relative or absolute path to write the output images to. If the file name is +ommitted the output images are named
+The suffix _img is appended to the file name if the -s switch is not specified +(where is the zero-based index of the texture in the model file).
+ +The output file format is determined from the given file extension. Supported +formats are BMP and TGA. If the file format can't be determined, +the value specified with the -f switch is taken. +
+Format settings are ignored for compressed embedded textures. They're always +written in their native file format (e.g. jpg). +

+ +

+-t
+

+Optional. Specifies the (zero-based) index of the embedded texture to be extracted from +the model. If this option is *not* specified all textures found are exported. +The long form of this parameter is --texture=. +

+ +

+-t
+

+Optional. Specifies whether output BMPs contain an alpha channel or not. +The long form of this parameter is --bmp-with-alpha=. +

+ + +

+-f
+

+Optional. Specifies the output file format. Supported +formats are BMP and TGA. The default value is BMP (if a full output filename is +specified, the output file format is taken from its extension, not from here). +The long form of this parameter is --format=. +

+ +

+-s
+

+Optional. Prevents the tool from adding the _img suffix to all filenames. This option +must be specified together with -t to ensure that just one image is written. +The long form of this parameter is --nosuffix. +

+ +

+ +common parameters

+Optional. Import configuration & postprocessing. Most postprocessing-steps don't affect +embedded texture images, configuring too much is probably senseless here. +See the @link common common parameters page @endlink for more information. +

+ +
+ +

Sample:

+ +@code +assimp extract test.mdl test.bmp --texture=0 --validate-data-structure +assimp extract test.mdl test.bmp -t=0 -vds +@endcode + +Extracts the first embedded texture (if any) from test.mdl after validating the +imported data structure and writes it to test_img0.bmp. + + +@code +assimp extract files\*.mdl *.bmp +assimp extract files\*.mdl *.bmp +@endcode + +Extracts all embedded textures from all loadable .mdl files in the 'files' subdirectory +and writes them to bitmaps which are named _img.bmp + */ + +//---------------------------------------------------------------------------------------------- +// ASSIMP COMMON PARAMETERS +/** +@page common Common parameters + +The parameters described on this page are commonly used by almost every assimp command. They +specify how the library will postprocess the imported data. This is done by several +configurable pipeline stages, called 'post processing steps'. Below you can find a list +of all supported steps along with short descriptions of what they're doing.
Programmers: +more information can be found in the aiPostProcess.h header. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
ParameterLong parameterDescription
-ptv--pretransform-verticesMove all vertices into worldspace and collapse the scene graph. Animation data is lost. + This is intended for applications which don't support scenegraph-oriented rendering.
-gsn--gen-smooth-normalsComputes 'smooth' per-vertex normal vectors if necessary. Mutually exclusive with -gn
-gn--gen-normalsComputes 'hard' per-face normal vectors if necessary. Mutually exclusive with -gsn
-cts--calc-tangent-spaceIf one UV channel and normal vectors are given, compute tangents and bitangents
-jiv--join-identical-verticesOptimize the index buffer. If this flag is not specified all vertices are referenced once.
-rrm--remove-redundant-materialsRemove redundant materials from the imported data.
-fd--find-degeneratesFind and process degenerates primitives.
-slm--split-large-meshesSplit large meshes over a specific treshold in smaller sub meshes. The default vertex & face limit is 1000000
-lbw--limit-bone-weightsLimit the number of bones influencing a single vertex. The default limit is 4.
-vds--validate-data-structurePerforms a full validation of the imported data structure. Recommended to avoid crashes if + an import plugin produces rubbish
-icl--improve-cache-localityImprove the cache locality of the vertex buffer by reordering the index buffer + to achieve a lower ACMR (average post-transform vertex cache miss ratio)
-sbpt--sort-by-ptypeSplits meshes which consist of more than one kind of primitives (e.g. lines and triangles mixed up) + in 'clean' submeshes.
-lh--convert-to-lhConverts the imported data to left-handed coordinate space
-fuv--flip-uvFlip UV coordinates from upper-left origin to lower-left origin
-fwo--flip-winding-orderFlip face winding order from CCW to CW
-ett--evaluate-texture-transformEvaluate per-texture UV transformations (e.g scaling, offset) and build pretransformed UV channels
-guv--gen-uvcoordsReplace abstract mapping descriptions, such as 'spherical' or 'cylindrical' with proper UV channels
-fixn--fix-normalsRun a heuristic algorithm to detect meshes with wrong face winding order/normals.
-tri--triangulateTriangulate poylgons with 4 and more points. Lines, points and triangles are not affected.
-fi--find-instancesSearch the data structure for instanced meshes and replace them by references. This can + reduce vertex/face counts but the postprocessing-step takes some time.
+ +For convenience some default postprocessing configurations are provided. +The corresponding command line parameter is -c (or --config=). + + + + + + + + + + + + + + + + + + + + + + + +
NameDescriptionList of steps executed
fastFast post processing config, performs some essential optimizations and computes tangents-cts, -gn, -jiv, -tri, -guv, -sbpt
defaultBalanced post processing config, performs most optimizations-cts, -gsn, -jiv, -icl, -lbw, -rrm, -slm, -tri, -guv, -sbpt, -fd, -fiv
fullFull post processing. May take a while, but results in best output quality for most purposes-cts, -gsn, -jiv, -icl, -lbw, -rrm, -slm, -tri, -guv, -sbpt, -fd, -fiv, -fi, -vds
+ +There are also some common flags to specify Assimp's logging behaviour: + + + + + + + + + + + + + + + + + + + +
NameDescription
-l or --show-logShow log file on console window (stderr)
-lo or --log-out=Streams the log to
-v or --verboseEnables verbose logging. Debug messages will be produced, too. This will + decrease loading performance and might result in *very* long logs ...
+ */ diff --git a/doc/lib_html/AssimpDoc.chm b/doc/lib_html/AssimpDoc.chm deleted file mode 100644 index 4306657c8b6625cf6b836c7a74fedb76c6d031b9..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 519974 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 q(VHkbNh<75KFmX+Q9Qdz#y~+L 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

4!Q><1F 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 z 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

uHWz*H2w*7_OkIu^h+BJuj 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

lNDj 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�e4t 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Ʃ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 z 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 assert_dummy;assert_dummy;} #endif -#endif // !! AI_BOOST_STATIC_ASSERT_INCLUDED \ No newline at end of file +#endif // !! AI_BOOST_STATIC_ASSERT_INCLUDED diff --git a/include/DefaultLogger.h b/include/DefaultLogger.h index ede298623..eeee24181 100644 --- a/include/DefaultLogger.h +++ b/include/DefaultLogger.h @@ -54,7 +54,7 @@ namespace Assimp { class IOStream; struct LogStreamInfo; -//! Default log file +//! Default log file name #define ASSIMP_DEFAULT_LOG_NAME "AssimpLog.txt" // ------------------------------------------------------------------------------------ @@ -111,17 +111,13 @@ public: /** @brief Will kill the singleton instance and setup a NullLogger as logger */ static void kill(); - - - /** @brief Severity setter */ - /* override */ void setLogSeverity(LogSeverity log_severity); /** @brief Attach a stream to the logger. */ - /* override */ void attachStream(LogStream *pStream, + /* override */ bool attachStream(LogStream *pStream, unsigned int severity); /** @brief Detach a still attached stream from logger */ - /* override */ void detatchStream(LogStream *pStream, + /* override */ bool detatchStream(LogStream *pStream, unsigned int severity); private: @@ -165,8 +161,6 @@ private: static Logger *m_pLogger; static NullLogger s_pNullLogger; - //! Logger severity - LogSeverity m_Severity; //! Attached streams StreamArray m_StreamArray; diff --git a/include/Logger.h b/include/Logger.h index 48ac91da0..45dff2cc0 100644 --- a/include/Logger.h +++ b/include/Logger.h @@ -50,6 +50,9 @@ namespace Assimp { class LogStream; +// maximum length of a log message. Longer messages are rejected. +#define MAX_LOG_MESSAGE_LENGTH 1024u + // ---------------------------------------------------------------------------------- /** @class Logger * @brief Abstract interface for logger implementations. @@ -85,11 +88,8 @@ public: ERR = 8 //!< Error log message }; - /** @brief Maximum length for log messages - */ - static const size_t MAX_LOG_MESSAGE_LENGTH = 1024; - public: + /** @brief Virtual destructor */ virtual ~Logger(); @@ -99,24 +99,28 @@ public: void debug(const std::string &message); /** @brief Writes a info message - * @param message Info message + * @param message Info message */ void info(const std::string &message); /** @brief Writes a warning message - * @param message Warn message + * @param message Warn message */ void warn(const std::string &message); /** @brief Writes an error message - * @param message Error message + * @param message Error message */ void error(const std::string &message); /** @brief Set a new log severity. - * @param log_severity New severity for logging + * @param log_severity New severity for logging */ - virtual void setLogSeverity(LogSeverity log_severity) = 0; + void setLogSeverity(LogSeverity log_severity); + + /** @brief Get the current log severity + */ + LogSeverity getLogSeverity() const; /** @brief Attach a new logstream * @@ -128,8 +132,9 @@ public: * @param severity Message filter, specified which types of log * messages are dispatched to the stream. Provide a bitwise * combination of the ErrorSeverity flags. + * @return true if the stream has been attached, false otherwise. */ - virtual void attachStream(LogStream *pStream, + virtual bool attachStream(LogStream *pStream, unsigned int severity = DEBUGGING | ERR | WARN | INFO) = 0; /** @brief Detach a still attached stream from the logger (or @@ -139,14 +144,19 @@ public: * flags. This value is &~ed with the current flags of the stream, * if the result is 0 the stream is detached from the Logger and * the caller retakes the possession of the stream. + * @return true if the stream has been dettached, false otherwise. */ - virtual void detatchStream(LogStream *pStream, + virtual bool detatchStream(LogStream *pStream, unsigned int severity = DEBUGGING | ERR | WARN | INFO) = 0; protected: - /** @brief Default constructor */ + + /** Default constructor */ Logger(); + /** Construction with a given log severity */ + Logger(LogSeverity severity); + /** @brief Called as a request to write a specific debug message * @param message Debug message. Never longer than * MAX_LOG_MESSAGE_LENGTH characters (exluding the '0'). @@ -178,21 +188,43 @@ protected: * the function is left. */ virtual void OnError(const char* message) = 0; + +protected: + + //! Logger severity + LogSeverity m_Severity; }; // ---------------------------------------------------------------------------------- // Default constructor -inline Logger::Logger() -{ - // empty +inline Logger::Logger() { + setLogSeverity(NORMAL); } // ---------------------------------------------------------------------------------- // Virtual destructor inline Logger::~Logger() { - // empty } + +// ---------------------------------------------------------------------------------- +// Construction with given logging severity +inline Logger::Logger(LogSeverity severity) { + setLogSeverity(severity); +} + +// ---------------------------------------------------------------------------------- +// Log severity setter +inline void Logger::setLogSeverity(LogSeverity log_severity){ + m_Severity = log_severity; +} + +// ---------------------------------------------------------------------------------- +// Log severity getter +inline Logger::LogSeverity Logger::getLogSeverity() const { + return m_Severity; +} + // ---------------------------------------------------------------------------------- } // Namespace Assimp diff --git a/include/NullLogger.h b/include/NullLogger.h index ddeca4fc2..0ef19f841 100644 --- a/include/NullLogger.h +++ b/include/NullLogger.h @@ -58,6 +58,7 @@ namespace Assimp { class ASSIMP_API NullLogger : public Logger { public: + /** @brief Logs a debug message */ void OnDebug(const char* message) { (void)message; //this avoids compiler warnings @@ -78,20 +79,19 @@ public: (void)message; //this avoids compiler warnings } - /** @brief Log severity setter */ - void setLogSeverity(LogSeverity log_severity) { - (void)log_severity; //this avoids compiler warnings + /** @brief Detach a still attached stream from logger */ + bool attachStream(LogStream *pStream, unsigned int severity) { + (void)pStream; (void)severity; //this avoids compiler warnings + return false; } /** @brief Detach a still attached stream from logger */ - void attachStream(LogStream *pStream, unsigned int severity) { + bool detatchStream(LogStream *pStream, unsigned int severity) { (void)pStream; (void)severity; //this avoids compiler warnings + return false; } - /** @brief Detach a still attached stream from logger */ - void detatchStream(LogStream *pStream, unsigned int severity) { - (void)pStream; (void)severity; //this avoids compiler warnings - } +private: }; } diff --git a/include/aiAnim.h b/include/aiAnim.h index a53710874..4084e711f 100644 --- a/include/aiAnim.h +++ b/include/aiAnim.h @@ -57,29 +57,42 @@ extern "C" { /** A time-value pair specifying a certain 3D vector for the given time. */ struct aiVectorKey { - double mTime; ///< The time of this key - C_STRUCT aiVector3D mValue; ///< The value of this key + //! The time of this key + double mTime; + //! The value of this key + C_STRUCT aiVector3D mValue; #ifdef __cplusplus + + //! Default constructor + aiVectorKey(){} + + //! Construction from a given time and key value + aiVectorKey(double time, const aiVector3D& value) + : mTime (time) + , mValue (value) + {} + + typedef aiVector3D elem_type; - // time is not compared - bool operator == (const aiVectorKey& o) const - {return o.mValue == this->mValue;} - - bool operator != (const aiVectorKey& o) const - {return o.mValue != this->mValue;} - - - - // Only time is compared. This operator is defined - // for use with std::sort - bool operator < (const aiVectorKey& o) const - {return mTime < o.mTime;} - - bool operator > (const aiVectorKey& o) const - {return mTime > o.mTime;} + //! Comparison operators. Just the key value is compared + //! For use with std::find(); + bool operator == (const aiVectorKey& o) const { + return o.mValue == this->mValue; + } + bool operator != (const aiVectorKey& o) const { + return o.mValue != this->mValue; + } + //! Relational operators. Just the key time is compared + //! For use with std::sort(); + bool operator < (const aiVectorKey& o) const { + return mTime < o.mTime; + } + bool operator > (const aiVectorKey& o) const { + return mTime > o.mTime; + } #endif }; @@ -89,28 +102,41 @@ struct aiVectorKey */ struct aiQuatKey { - double mTime; ///< The time of this key - C_STRUCT aiQuaternion mValue; ///< The value of this key + //! The time of this key + double mTime; + //! The value of this key + C_STRUCT aiQuaternion mValue; #ifdef __cplusplus + + //! Default constructor + aiQuatKey(){} + + //! Construction from a given time and key value + aiQuatKey(double time, const aiQuaternion& value) + : mTime (time) + , mValue (value) + {} + typedef aiQuaternion elem_type; - // time is not compared - bool operator == (const aiQuatKey& o) const - {return o.mValue == this->mValue;} - - bool operator != (const aiQuatKey& o) const - {return o.mValue != this->mValue;} - - - // Only time is compared. This operator is defined - // for use with std::sort - bool operator < (const aiQuatKey& o) const - {return mTime < o.mTime;} - - bool operator > (const aiQuatKey& o) const - {return mTime < o.mTime;} + //! Comparison operators. Just the key value is compared + //! For use with std::find(); + bool operator == (const aiQuatKey& o) const { + return o.mValue == this->mValue; + } + bool operator != (const aiQuatKey& o) const { + return o.mValue != this->mValue; + } + //! Relational operators. Just the key time is compared + //! For use with std::sort(); + bool operator < (const aiQuatKey& o) const { + return mTime < o.mTime; + } + bool operator > (const aiQuatKey& o) const { + return mTime > o.mTime; + } #endif }; @@ -314,7 +340,8 @@ struct Interpolator /** @brief Get the result of the interpolation between a,b. * * The interpolation algorithm depends on the type of the operands. - * aiVectorKey LERPs, aiQuatKey SLERPs. Any other type lerps, too. + * aiQuaternion's and aiQuatKey's SLERP, the rest does a simple + * linear interpolation. */ void operator () (T& out,const T& a, const T& b, float d) const { out = a + (b-a)*d; @@ -354,5 +381,8 @@ struct Interpolator { //! @endcond } // ! end namespace Assimp + + + #endif // __cplusplus #endif // AI_ANIM_H_INC diff --git a/include/aiCamera.h b/include/aiCamera.h index fa6d7bfa6..52745fedd 100644 --- a/include/aiCamera.h +++ b/include/aiCamera.h @@ -152,7 +152,7 @@ struct aiCamera /** Distance of the far clipping plane from the camera. * * The far clipping plane must, of course, be farer away than the - * near clipping plane. The default value is 1000.f. The radio + * near clipping plane. The default value is 1000.f. The ratio * between the near and the far plane should not be too * large (between 1000-10000 should be ok) to avoid floating-point * inaccuracies which could lead to z-fighting. diff --git a/include/aiConfig.h b/include/aiConfig.h index ffd9d66c2..c49f1c9bd 100644 --- a/include/aiConfig.h +++ b/include/aiConfig.h @@ -43,14 +43,14 @@ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. * @brief Defines constants for configurable properties for the library * * Typically these properties are set via - * #Importer::SetPropertyFloat, - * #Importer::SetPropertyInteger or - * #Importer::SetPropertyString, + * #Assimp::Importer::SetPropertyFloat, + * #Assimp::Importer::SetPropertyInteger or + * #Assimp::Importer::SetPropertyString, * depending on the data type of a property. All properties have a * default value. See the doc for the mentioned methods for more details. * - * @note - * The functions for use with the plain-c API are: + *

+ * The corresponding functions for use with the plain-c API are: * #aiSetImportPropertyInteger, * #aiSetImportPropertyFloat, * #aiSetImportPropertyString @@ -63,34 +63,66 @@ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. * * This is used by the "SplitLargeMeshes" PostProcess-Step to determine * whether a mesh must be split or not. - * @note The default value is AI_SLM_DEFAULT_MAX_VERTICES, defined in - * the internal header file SplitLargeMeshes.h + * @note The default value is AI_SLM_DEFAULT_MAX_VERTICES * Property type: integer. */ -#define AI_CONFIG_PP_SLM_TRIANGLE_LIMIT "pp.slm.triangle_limit" +#define AI_CONFIG_PP_SLM_TRIANGLE_LIMIT \ + "PP_SLM_TRIANGLE_LIMIT" +// default value for AI_CONFIG_PP_SLM_TRIANGLE_LIMIT +#if (!defined AI_SLM_DEFAULT_MAX_TRIANGLES) +# define AI_SLM_DEFAULT_MAX_TRIANGLES 1000000 +#endif // --------------------------------------------------------------------------- /** @brief Set the maximum number of triangles in a mesh. * * This is used by the "SplitLargeMeshes" PostProcess-Step to determine * whether a mesh must be split or not. - * @note The default value is AI_SLM_DEFAULT_MAX_TRIANGLES, defined in - * the internal header file SplitLargeMeshes.h + * @note The default value is AI_SLM_DEFAULT_MAX_TRIANGLES * Property type: integer. */ -#define AI_CONFIG_PP_SLM_VERTEX_LIMIT "pp.slm.vertex_limit" +#define AI_CONFIG_PP_SLM_VERTEX_LIMIT \ + "PP_SLM_VERTEX_LIMIT" +// default value for AI_CONFIG_PP_SLM_VERTEX_LIMIT +#if (!defined AI_SLM_DEFAULT_MAX_VERTICES) +# define AI_SLM_DEFAULT_MAX_VERTICES 1000000 +#endif // --------------------------------------------------------------------------- /** @brief Set the maximum number of bones affecting a single vertex * - * This is used by the aiProcess_LimitBoneWeights PostProcess-Step. - * @note The default value is AI_LBW_MAX_WEIGHTS, defined in - * the internal header file LimitBoneWeightsProcess.h + * This is used by the #aiProcess_LimitBoneWeights PostProcess-Step. + * @note The default value is AI_LBW_MAX_WEIGHTS * Property type: integer. */ -#define AI_CONFIG_PP_LBW_MAX_WEIGHTS "pp.lbw.weights_limit" +#define AI_CONFIG_PP_LBW_MAX_WEIGHTS \ + "PP_LBW_MAX_WEIGHTS" + +// default value for AI_CONFIG_PP_LBW_MAX_WEIGHTS +#if (!defined AI_LMW_MAX_WEIGHTS) +# define AI_LMW_MAX_WEIGHTS 0x4 +#endif // !! AI_LMW_MAX_WEIGHTS + +/** @brief Default value for the #AI_CONFIG_PP_ICL_PTCACHE_SIZE property + */ +#ifndef PP_ICL_PTCACHE_SIZE +# define PP_ICL_PTCACHE_SIZE 12 +#endif + +// --------------------------------------------------------------------------- +/** @brief Set the size of the post-transform vertex cache to optimize the + * vertices for. This configures the #aiProcess_ImproveCacheLocality step. + * + * The size is given in vertices. Of course you can't know how the vertex + * format will exactly look like after the import returns, but you can still + * guess what your meshes will probably have. + * @note The default value is #PP_ICL_PTCACHE_SIZE. That results in slight + * performance improvements for most nVidia/AMD cards since 2002. + * Property type: integer. + */ +#define AI_CONFIG_PP_ICL_PTCACHE_SIZE "PP_ICL_PTCACHE_SIZE" // --------------------------------------------------------------------------- @@ -106,15 +138,14 @@ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. * want to override the global setting). * Property type: integer. */ -#define AI_CONFIG_IMPORT_GLOBAL_KEYFRAME "imp.global.kf" - -#define AI_CONFIG_IMPORT_MD3_KEYFRAME "imp.md3.kf" -#define AI_CONFIG_IMPORT_MD2_KEYFRAME "imp.md2.kf" -#define AI_CONFIG_IMPORT_MDL_KEYFRAME "imp.mdl.kf" -#define AI_CONFIG_IMPORT_MDC_KEYFRAME "imp.mdc.kf" -#define AI_CONFIG_IMPORT_MDR_KEYFRAME "imp.mdr.kf" -#define AI_CONFIG_IMPORT_SMD_KEYFRAME "imp.smd.kf" +#define AI_CONFIG_IMPORT_GLOBAL_KEYFRAME "IMPORT_GLOBAL_KEYFRAME" +#define AI_CONFIG_IMPORT_MD3_KEYFRAME "IMPORT_MD3_KEYFRAME" +#define AI_CONFIG_IMPORT_MD2_KEYFRAME "IMPORT_MD2_KEYFRAME" +#define AI_CONFIG_IMPORT_MDL_KEYFRAME "IMPORT_MDL_KEYFRAME" +#define AI_CONFIG_IMPORT_MDC_KEYFRAME "IMPORT_MDC_KEYFRAME" +#define AI_CONFIG_IMPORT_SMD_KEYFRAME "IMPORT_SMD_KEYFRAME" +#define AI_CONFIG_IMPORT_UNREAL_KEYFRAME "IMPORT_UNREAL_KEYFRAME" // --------------------------------------------------------------------------- @@ -123,8 +154,30 @@ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. * * Property type: integer (0: false; !0: true). Default value: true. */ -#define AI_CONFIG_IMPORT_AC_SEPARATE_BFCULL "imp.ac.sepbfcull" +#define AI_CONFIG_IMPORT_AC_SEPARATE_BFCULL \ + "IMPORT_AC_SEPARATE_BFCULL" +// --------------------------------------------------------------------------- +/** @brief Configures the UNREAL 3D loader to separate faces with different + * surface flags (e.g. two-sided vs. single-sided). + * + * Property type: integer (0: false; !0: true). Default value: true. + */ +#define AI_CONFIG_IMPORT_UNREAL_HANDLE_FLAGS \ + "UNREAL_HANDLE_FLAGS" + +// --------------------------------------------------------------------------- +/** @brief Configures the terragen import plugin to compute uv's for + * terrains, if not given. Furthermore a default texture is assigned. + * + * UV coordinates for terrains are so simple to compute that you'll usually + * want to compute them on your own, if you need them. This option is intended + * for model viewers which want to offer an easy way to apply textures to + * terrains. + * Property type: integer (0: false; !0: true). Default value: false. + */ +#define AI_CONFIG_IMPORT_TER_MAKE_UVS \ + "IMPORT_TER_MAKE_UVS" // --------------------------------------------------------------------------- /** @brief Configures the ASE loader to always reconstruct normal vectors @@ -133,8 +186,8 @@ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. * Many ASE files have invalid normals (they're not orthonormal). * Property type: integer (0: false; !0: true). Default value: true. */ -#define AI_CONFIG_IMPORT_ASE_RECONSTRUCT_NORMALS "imp.ase.reconn" - +#define AI_CONFIG_IMPORT_ASE_RECONSTRUCT_NORMALS \ + "IMPORT_ASE_RECONSTRUCT_NORMALS" // --------------------------------------------------------------------------- /** @brief Configures the M3D loader to process multi-part player models. @@ -177,7 +230,6 @@ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. #define AI_CONFIG_IMPORT_MD3_SHADER_SRC \ "IMPORT_MD3_SHADER_SRC" - // --------------------------------------------------------------------------- /** @brief Configures the LWO loader to load just one layer from the model. * @@ -186,11 +238,34 @@ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. * the name of the layer - or an integer - the index of the layer. If the * property is not set the whole LWO model is loaded. Loading fails if the * requested layer is not available. The layer index is zero-based and the - * layer name may not be empty. + * layer name may not be empty.
+ * Property type: Integer. Default value: all layers are loaded. */ -#define AI_CONFIG_IMPORT_LWO_ONE_LAYER_ONLY "imp.lwo.layer" +#define AI_CONFIG_IMPORT_LWO_ONE_LAYER_ONLY \ + "IMPORT_LWO_ONE_LAYER_ONLY" +// --------------------------------------------------------------------------- +/** @brief Defines the begin of the time range for which the LWS loader + * evaluates animations and computes aiNodeAnim's. + * + * Assimp provides full conversion of LightWave's envelope system, including + * pre and post conditions. The loader computes linearly subsampled animation + * chanels with the frame rate given in the LWS file. This property defines + * the start time. Note: animation channels are only generated if a node + * has at least one envelope with more tan one key assigned. This property. + * is given in frames, '0' is the first frame. By default, if this property + * is not set, the importer takes the animation start from the input LWS + * file ('FirstFrame' line)
+ * Property type: Integer. Default value: taken from file. + * + * @see AI_CONFIG_IMPORT_LWS_ANIM_END - end of the imported time range + */ +#define AI_CONFIG_IMPORT_LWS_ANIM_START \ + "IMPORT_LWS_ANIM_START" +#define AI_CONFIG_IMPORT_LWS_ANIM_END \ + "IMPORT_LWS_ANIM_END" + // --------------------------------------------------------------------------- /** @brief Defines the output frame rate of the IRR loader. * @@ -199,8 +274,8 @@ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. * are returned by the converter.
* Property type: integer. Default value: 100 */ -#define AI_CONFIG_IMPORT_IRR_ANIM_FPS "imp.irr.fps" - +#define AI_CONFIG_IMPORT_IRR_ANIM_FPS \ + "IMPORT_IRR_ANIM_FPS" // --------------------------------------------------------------------------- /** @brief Specifies the maximum angle that may be between two vertex tangents @@ -211,7 +286,8 @@ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. * 45 degrees. The maximum value is 175. * Property type: float. */ -#define AI_CONFIG_PP_CT_MAX_SMOOTHING_ANGLE "pp.ct.max_smoothing" +#define AI_CONFIG_PP_CT_MAX_SMOOTHING_ANGLE \ + "PP_CT_MAX_SMOOTHING_ANGLE" // --------------------------------------------------------------------------- /** @brief Specifies the maximum angle that may be between two face normals @@ -225,32 +301,8 @@ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. * performance is unaffected if the AI_CONFIG_FAVOUR_SPEED flag is set, but * the output quality may be reduced. */ -#define AI_CONFIG_PP_GSN_MAX_SMOOTHING_ANGLE "pp.gsn.max_smoothing" - - -// --------------------------------------------------------------------------- -/** @brief Specifies the minimum number of faces a node should have. - * This is an input parameter to the OptimizeGraph-Step. - * - * Nodes whose referenced meshes have less faces than this value - * are probably joined with neighbors with identical local matrices. - * However, it is just a hint to the step. - * Property type: integer - */ -#define AI_CONFIG_PP_OG_MIN_NUM_FACES "pp.og.min_faces" - - -// --------------------------------------------------------------------------- -/** @brief Specifies whether the OptimizeGraphProcess joins nodes even if - * their local transformations are not equal. - * - * By default, nodes with different local transformations are never joined. - * The intention is that all vertices should remain in their original - * local coordinate space where they are correctly centered and aligned, - * which could also allow for significant culling improvements. - */ -#define AI_CONFIG_PP_OG_JOIN_INEQUAL_TRANSFORMS "pp.og.allow_diffwm" - +#define AI_CONFIG_PP_GSN_MAX_SMOOTHING_ANGLE \ + "PP_GSN_MAX_SMOOTHING_ANGLE" // --------------------------------------------------------------------------- /** @brief Sets the colormap (= palette) to be used to decode embedded @@ -262,8 +314,72 @@ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. * a default palette (from Quake 1) is used. * Property type: string. */ -#define AI_CONFIG_IMPORT_MDL_COLORMAP "imp.mdl.color_map" +#define AI_CONFIG_IMPORT_MDL_COLORMAP \ + "IMPORT_MDL_COLORMAP" +// --------------------------------------------------------------------------- +/** @brief Configures the #aiProcess_RemoveRedundantMaterials step to + * keep materials matching a name in a given list. + * + * This is a list of 1 to n strings, ' ' serves as delimiter character. + * Identifiers containing whitespaces must be enclosed in *single* + * quotation marks. For example: + * "keep-me and_me_to anotherMaterialToBeKept \'name with whitespace\'". + * If a material matches on of these names, it will not be modified or + * removed by the postprocessing step nor will other materials be replaced + * by a reference to it.
+ * This option might be useful if you are using some magic material names + * to pass additional semantics through the content pipeline. This ensures + * they won't be optimized away, but a general optimization is still + * performed for materials not contained in the list. + * Property type: String. Default value: n/a + * @note Linefeeds, tabs or carriage returns are treated as whitespace. + * Material names are case sensitive. + */ +#define AI_CONFIG_PP_RRM_EXCLUDE_LIST \ + "PP_RRM_EXCLUDE_LIST" + +// --------------------------------------------------------------------------- +/** @brief Configures the #aiProcess_PretransformVertices step to + * keep the scene hierarchy. Meshes are moved to worldspace, but + * no optimization is performed (means: meshes are not joined. The total + * number of meshes won't change). + * + * This option could be of use for you if the scene hierarchy contains + * important additional information which you want to interpret. + * For rendering, you can still render all meshes in the scene without + * any transformations. + * Property type: integer (0: false; !0: true). Default value: false. + */ +#define AI_CONFIG_PP_PTV_KEEP_HIERARCHY \ + "PP_PTV_KEEP_HIERARCHY" + +// --------------------------------------------------------------------------- +/** @brief Configures the #aiProcess_FindDegenerates step to + * remove degenerated primitives from the import - immediately. + * + * The default behaviour converts degenerated triangles to lines and + * degenerated lines to points. See the documentation to the + * #aiProcess_FindDegenerates step for a detailed example of the various ways + * to get rid of these lines and points if you don't want them. + * Property type: integer (0: false; !0: true). Default value: false. + */ +#define AI_CONFIG_PP_FD_REMOVE \ + "PP_FD_REMOVE" + +#if 0 +// --------------------------------------------------------------------------- +/** @brief Specifies the shape of the scene returned by the CSM format loader. + * + * If this property is set to 1, the loader tries to build a hierarchy from + * the capture points laoded from the file. A dummy mesh representing the + * recorded human is build. Otherwise, no meshes are returned, there's just + * a single root node with several children. These children represent the + * capture points, their translation channel is absolute. + * Property type: integer. Default value: 1 + */ +#define AI_CONFIG_IMPORT_CSM_BUILD_HIERARCHY "imp.csm.mkhier" +#endif // --------------------------------------------------------------------------- /** @brief Enumerates components of the aiScene and aiMesh data structures @@ -342,7 +458,8 @@ enum aiComponent * of the flags defined above) the import FAILS. Mainly because there is * no data to work on anymore ... */ -#define AI_CONFIG_PP_RVC_FLAGS "pp.rvc.flags" +#define AI_CONFIG_PP_RVC_FLAGS \ + "PP_RVC_FLAGS" // --------------------------------------------------------------------------- /** @brief Input parameter to the #aiProcess_SortByPType step: @@ -353,7 +470,8 @@ enum aiComponent * be to exclude all line and point meshes from the import. This * is an integer property, its default value is 0. */ -#define AI_CONFIG_PP_SBP_REMOVE "pp.sbp.remove" +#define AI_CONFIG_PP_SBP_REMOVE \ + "PP_SBP_REMOVE" // TransformUVCoords evaluates UV scalings @@ -376,7 +494,8 @@ enum aiComponent * property, of course). By default all transformations are enabled * (AI_UVTRAFO_ALL). */ -#define AI_CONFIG_PP_TUV_EVALUATE "pp.tuv.process" +#define AI_CONFIG_PP_TUV_EVALUATE \ + "PP_TUV_EVALUATE" // --------------------------------------------------------------------------- @@ -388,5 +507,7 @@ enum aiComponent * This property is expected to be an integer, != 0 stands for true. * The default value is 0. */ -#define AI_CONFIG_FAVOUR_SPEED "imp.speed_flag" +#define AI_CONFIG_FAVOUR_SPEED \ + "FAVOUR_SPEED" + #endif // !! AI_CONFIG_H_INC diff --git a/include/aiDefines.h b/include/aiDefines.h index cfab02a3a..773a789ce 100644 --- a/include/aiDefines.h +++ b/include/aiDefines.h @@ -190,6 +190,7 @@ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. # define AI_C_THREADSAFE #endif // !! ASSIMP_BUILD_SINGLETHREADED + #if (defined _DEBUG || defined DEBUG) // one of the two should be defined .. # define ASSIMP_BUILD_DEBUG #endif diff --git a/include/aiLight.h b/include/aiLight.h index 4da3c61b8..b610f4d9b 100644 --- a/include/aiLight.h +++ b/include/aiLight.h @@ -134,6 +134,7 @@ struct aiLight * Atten = 1/( att0 + att1 * d + att2 * d*d) * @endcode * This member corresponds to the att0 variable in the equation. + * Naturally undefined for directional lights. */ float mAttenuationConstant; @@ -145,6 +146,7 @@ struct aiLight * Atten = 1/( att0 + att1 * d + att2 * d*d) * @endcode * This member corresponds to the att1 variable in the equation. + * Naturally undefined for directional lights. */ float mAttenuationLinear; @@ -156,6 +158,7 @@ struct aiLight * Atten = 1/( att0 + att1 * d + att2 * d*d) * @endcode * This member corresponds to the att2 variable in the equation. + * Naturally undefined for directional lights. */ float mAttenuationQuadratic; diff --git a/include/aiMaterial.h b/include/aiMaterial.h index fe4d1604d..232ef88c0 100644 --- a/include/aiMaterial.h +++ b/include/aiMaterial.h @@ -52,8 +52,9 @@ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. extern "C" { #endif -// Name for the default material -#define AI_DEFAULT_MATERIAL_NAME "aiDefaultMat" +// Name for default materials (2nd is used if meshes have UV coords) +#define AI_DEFAULT_MATERIAL_NAME "DefaultMaterial" +#define AI_DEFAULT_TEXTURED_MATERIAL_NAME "TexturedDefaultMaterial" // --------------------------------------------------------------------------- /** @brief A very primitive RTTI system to store the data type of a @@ -577,7 +578,7 @@ struct aiUVTransform * ~ * A temporary property for internal use. If someone forgets to * cleanup, some of these might still be contained in the output. - * Don't complain, if you understood what the first paragraph tried + * Don't complain! If you understood what the first paragraph tried * to tell you, you wouldn't even know. * @endcode * @see aiMaterial @@ -1475,7 +1476,6 @@ extern "C" { */ #define AI_MATKEY_GLOBAL_BACKGROUND_IMAGE "$global.bg.image2d",0,0 - // --------------------------------------------------------------------------- /** @brief Retrieve a material property with a specific key from the material * @@ -1495,7 +1495,6 @@ ASSIMP_API C_ENUM aiReturn aiGetMaterialProperty( unsigned int index, const C_STRUCT aiMaterialProperty** pPropOut); - // --------------------------------------------------------------------------- /** @brief Retrieve an array of float values with a specific key * from the material @@ -1532,7 +1531,6 @@ ASSIMP_API C_ENUM aiReturn aiGetMaterialFloatArray( unsigned int* pMax); - #ifdef __cplusplus // --------------------------------------------------------------------------- diff --git a/include/aiMaterial.inl b/include/aiMaterial.inl index 5bc49e4eb..009bff423 100644 --- a/include/aiMaterial.inl +++ b/include/aiMaterial.inl @@ -70,7 +70,7 @@ inline aiReturn aiMaterial::Get(const char* pKey,unsigned int type, unsigned int iNum = pMax ? *pMax : 1; aiMaterialProperty* prop; - aiReturn ret = aiGetMaterialProperty(this,pKey,type,idx,&prop); + aiReturn ret = ::aiGetMaterialProperty(this,pKey,type,idx,&prop); if ( AI_SUCCESS == ret ) { if (prop->mDataLength < sizeof(Type)*iNum) @@ -92,7 +92,7 @@ inline aiReturn aiMaterial::Get(const char* pKey,unsigned int type, unsigned int idx,Type& pOut) const { aiMaterialProperty* prop; - aiReturn ret = aiGetMaterialProperty(this,pKey,type,idx,&prop); + aiReturn ret = ::aiGetMaterialProperty(this,pKey,type,idx,&prop); if ( AI_SUCCESS == ret ) { if (prop->mDataLength < sizeof(Type)) diff --git a/include/aiMatrix4x4.h b/include/aiMatrix4x4.h index d43de7202..df3c59f91 100644 --- a/include/aiMatrix4x4.h +++ b/include/aiMatrix4x4.h @@ -201,6 +201,14 @@ public: */ static aiMatrix4x4& Translation( const aiVector3D& v, aiMatrix4x4& out); + // ------------------------------------------------------------------- + /** @brief Returns a scaling matrix + * @param v Scaling vector + * @param out Receives the output matrix + * @return Reference to the output matrix + */ + static aiMatrix4x4& Scaling( const aiVector3D& v, aiMatrix4x4& out); + // ------------------------------------------------------------------- /** @brief A function for creating a rotation matrix that rotates a diff --git a/include/aiMatrix4x4.inl b/include/aiMatrix4x4.inl index 94d0fca2a..93942e6dc 100644 --- a/include/aiMatrix4x4.inl +++ b/include/aiMatrix4x4.inl @@ -385,6 +385,16 @@ inline aiMatrix4x4& aiMatrix4x4::Translation( const aiVector3D& v, aiMatrix4x4& return out; } +// ---------------------------------------------------------------------------------------- +inline aiMatrix4x4& aiMatrix4x4::Scaling( const aiVector3D& v, aiMatrix4x4& out) +{ + out = aiMatrix4x4(); + out.a1 = v.x; + out.b2 = v.y; + out.c3 = v.z; + return out; +} + // ---------------------------------------------------------------------------------------- /** A function for creating a rotation matrix that rotates a vector called * "from" into another vector called "to". diff --git a/include/aiPostProcess.h b/include/aiPostProcess.h index 09e8659df..d6cceb517 100644 --- a/include/aiPostProcess.h +++ b/include/aiPostProcess.h @@ -296,30 +296,46 @@ enum aiPostProcessSteps }; -/** @def AI_POSTPROCESS_DEFAULT_REALTIME_FASTEST - * @brief Default postprocess configuration targeted at realtime applications - * which need to load models as fast as possible. +// --------------------------------------------------------------------------------------- +/** @def aiProcessPreset_TargetRealtimeUse_Fast + * @brief Default postprocess configuration optimizing the data for real-time rendering. * - * If you're using DirectX, don't forget to combine this value with - * the #aiProcess_ConvertToLeftHanded step. + * Applications would want to use this preset to load models on end-user PCs, + * maybe for direct use in game. + * + * If you're using DirectX, don't forget to combine this value with + * the #aiProcess_ConvertToLeftHanded step. If you don't support UV transformations + * in your application apply the #aiProcess_TransformUVCoords step, too. + * @note Please take the time to read the doc to the steps enabled by this preset. + * Some of them offer further configurable properties, some of them might not be of + * use for you so it might be better to not specify them. */ -#define AI_POSTPROCESS_DEFAULT_REALTIME_FASTEST \ +#define aiProcessPreset_TargetRealtime_Fast \ aiProcess_CalcTangentSpace | \ aiProcess_GenNormals | \ aiProcess_JoinIdenticalVertices | \ aiProcess_Triangulate | \ - aiProcess_GenUVCoords + aiProcess_GenUVCoords | \ + aiProcess_SortByPType | \ + 0 - - /** @def AI_POSTPROCESS_DEFAULT_REALTIME - * @brief Default postprocess configuration targeted at realtime applications. - * Unlike AI_POSTPROCESS_DEFAULT_REALTIME_FASTEST, this configuration - * performs some extra optimizations. - * - * If you're using DirectX, don't forget to combine this value with - * the #aiProcess_ConvertToLeftHanded step. - */ -#define AI_POSTPROCESS_DEFAULT_REALTIME \ + // --------------------------------------------------------------------------------------- + /** @def aiProcessPreset_TargetRealtime_Quality + * @brief Default postprocess configuration optimizing the data for real-time rendering. + * + * Unlike #aiProcessPreset_TargetRealtime_Fast, this configuration + * performs some extra optimizations to improve rendering speed and + * to minimize memory usage. It could be a good choice for a level editor + * environment where import speed is not so important. + * + * If you're using DirectX, don't forget to combine this value with + * the #aiProcess_ConvertToLeftHanded step. If you don't support UV transformations + * in your application apply the #aiProcess_TransformUVCoords step, too. + * @note Please take the time to read the doc to the steps enabled by this preset. + * Some of them offer further configurable properties, some of them might not be of + * use for you so it might be better to not specify them. + */ +#define aiProcessPreset_TargetRealtime_Quality \ aiProcess_CalcTangentSpace | \ aiProcess_GenSmoothNormals | \ aiProcess_JoinIdenticalVertices | \ @@ -327,9 +343,33 @@ enum aiPostProcessSteps aiProcess_LimitBoneWeights | \ aiProcess_RemoveRedundantMaterials | \ aiProcess_SplitLargeMeshes | \ - aiProcess_OptimizeGraph | \ aiProcess_Triangulate | \ - aiProcess_GenUVCoords + aiProcess_GenUVCoords | \ + aiProcess_SortByPType | \ + aiProcess_FindDegenerates | \ + aiProcess_FindInvalidData | \ + 0 + + // --------------------------------------------------------------------------------------- + /** @def aiProcessPreset_TargetRealtime_MaxQuality + * @brief Default postprocess configuration optimizing the data for real-time rendering. + * + * This preset enables almost every optimization step to achieve perfectly + * optimized data. It's your choice for level editor environments where import speed + * doesn't care. + * + * If you're using DirectX, don't forget to combine this value with + * the #aiProcess_ConvertToLeftHanded step. If you don't support UV transformations + * in your application apply the #aiProcess_TransformUVCoords step, too. + * @note Please take the time to read the doc to the steps enabled by this preset. + * Some of them offer further configurable properties, some of them might not be of + * use for you so it might be better to not specify them. + */ +#define aiProcessPreset_TargetRealtime_MaxQuality \ + aiProcessPreset_TargetRealtime_Quality | \ + aiProcess_FindInstances | \ + aiProcess_ValidateDataStructure | \ + 0 #ifdef __cplusplus diff --git a/include/aiQuaternion.h b/include/aiQuaternion.h index 223ff4268..8cab09d14 100644 --- a/include/aiQuaternion.h +++ b/include/aiQuaternion.h @@ -281,6 +281,7 @@ inline aiQuaternion aiQuaternion::operator* (const aiQuaternion& t) const } } // end extern "C" + #endif // __cplusplus #endif // AI_QUATERNION_H_INC diff --git a/include/aiScene.h b/include/aiScene.h index cd921df87..80f399a08 100644 --- a/include/aiScene.h +++ b/include/aiScene.h @@ -77,6 +77,10 @@ struct aiNode * * Cameras and lights are assigned to a specific node name - if there * are multiple nodes with this name, they're assigned to each of them. + *
+ * There are no limitations regarding the characters contained in + * this text. You should be able to handle stuff like whitespace, tabs, + * linefeeds, quotation marks, ampersands, ... . */ C_STRUCT aiString mName; diff --git a/include/aiTexture.h b/include/aiTexture.h index 4fa7446a1..c00310486 100644 --- a/include/aiTexture.h +++ b/include/aiTexture.h @@ -143,7 +143,8 @@ struct aiTexture * file extension of the format without a trailing dot. If there * are multiple file extensions for a format, the shortest * extension is chosen (JPEG maps to 'jpg', not to 'jpeg'). - * E.g. 'dds\\0', 'pcx\\0', 'jpg'. All characters are lower-case. + * E.g. 'dds\\0', 'pcx\\0', 'jpg\\0'. All characters are lower-case. + * The fourth character will always be '\\0'. */ char achFormatHint[4]; @@ -162,13 +163,13 @@ struct aiTexture //! For compressed textures (mHeight == 0): compare the //! format hint against a given string. - //! @param s Input string. 4 characters are maximally processed. + //! @param s Input string. 3 characters are maximally processed. //! Example values: "jpg", "png" //! @return true if the given string matches the format hint bool CheckFormat(const char* s) const { ai_assert(s && !mHeight); - return (0 == ::strncmp(achFormatHint,s,4)); + return (0 == ::strncmp(achFormatHint,s,3)); } // Construction diff --git a/include/aiTypes.h b/include/aiTypes.h index 31cdda8b8..3ff2a8053 100644 --- a/include/aiTypes.h +++ b/include/aiTypes.h @@ -245,6 +245,7 @@ struct aiColor4D float r, g, b, a; } PACK_STRUCT; // !struct aiColor4D + #include "./Compiler/poppack1.h" @@ -477,5 +478,6 @@ struct aiMemoryInfo #include "aiMatrix4x4.inl" + #endif //!! include guard diff --git a/include/aiVector3D.inl b/include/aiVector3D.inl index 394bf8663..e228aa0de 100644 --- a/include/aiVector3D.inl +++ b/include/aiVector3D.inl @@ -176,21 +176,6 @@ AI_FORCE_INLINE aiVector3D operator - ( const aiVector3D& v) { return aiVector3D( -v.x, -v.y, -v.z); } -#ifdef ASSIMP_INTERNAL_BUILD -namespace std { - - // std::min for aiVector3D - inline ::aiVector3D min (const ::aiVector3D& a, const ::aiVector3D& b) { - return ::aiVector3D (min(a.x,b.x),min(a.y,b.y),min(a.z,b.z)); - } - - // std::max for aiVector3D - inline ::aiVector3D max (const ::aiVector3D& a, const ::aiVector3D& b) { - return ::aiVector3D (max(a.x,b.x),max(a.y,b.y),max(a.z,b.z)); - } - -} // end namespace std -#endif // !! ASSIMP_INTERNAL_BUILD #endif // __cplusplus #endif // AI_VECTOR3D_INL_INC diff --git a/include/assimp.hpp b/include/assimp.hpp index 816be4be2..f737334e3 100644 --- a/include/assimp.hpp +++ b/include/assimp.hpp @@ -300,6 +300,20 @@ public: bool IsDefaultIOHandler(); + // ------------------------------------------------------------------- + /** @brief Check whether a given set of postprocessing flags + * is supported. + * + * Some flags are mutually exclusive, others are probably + * not available because your excluded them from your + * Assimp builds. Calling this function is recommended if + * you're unsure. + * + * @param pFlags Bitwise combination of the aiPostProcess flags. + * @return true if this flag combination is not supported. + */ + bool ValidateFlags(unsigned int pFlags); + // ------------------------------------------------------------------- /** Reads the given file and returns its contents if successful. * @@ -316,6 +330,10 @@ public: * @return A pointer to the imported data, NULL if the import failed. * The pointer to the scene remains in possession of the Importer * instance. Use GetOrphanedScene() to take ownership of it. + * + * @note Assimp is able to determine the file format of a file + * automatically. However, you should make sure that the input file + * does not even have a file extension at all to enable this feature. */ const aiScene* ReadFile( const char* pFile, unsigned int pFlags); diff --git a/make_mingw.bat b/make_mingw.bat deleted file mode 100644 index 8935d0cd2..000000000 --- a/make_mingw.bat +++ /dev/null @@ -1,4 +0,0 @@ -cd code -mingw32-make -f makefile.mingw - -pause \ No newline at end of file diff --git a/mkutil/revision.h b/mkutil/revision.h index 65814ae21..328df1a59 100644 --- a/mkutil/revision.h +++ b/mkutil/revision.h @@ -1 +1 @@ -#define SVNRevision 342 +#define SVNRevision 355 diff --git a/test/RunUnitTestSuite.bat b/test/RunUnitTestSuite.bat index 1c39d1771..74917bc89 100644 --- a/test/RunUnitTestSuite.bat +++ b/test/RunUnitTestSuite.bat @@ -20,8 +20,8 @@ IF %PROCESSOR_ARCHITECTURE% == x86 ( rem Setup standard paths from here SET OUTDIR=results\ SET BINDIR=..\bin\ -SET FIRSTUTFAILURE=none -SET FIRSTUTNA=none +SET FIRSTUTFAILURE=nil +SET FIRSTUTNA=nil echo #===================================================================== echo # Open Asset Import Library - Unittests @@ -97,11 +97,11 @@ call RunSingleUnitTestSuite unit_debug-dll_%ARCHEXT% debug-dll.txt echo. echo ---------------------------------------------------------------------- -IF NOT FIRSTUTNA==none ( +IF NOT FIRSTUTNA== nil ( echo One or more test configs are not available. ) -IF NOT FIRSTUTFAILURE==none ( +IF NOT FIRSTUTFAILURE== nil ( echo One or more tests failed. ) diff --git a/test/models/3D/box.uc b/test/models/3D/box.uc new file mode 100644 index 000000000..9e2b593cd --- /dev/null +++ b/test/models/3D/box.uc @@ -0,0 +1,20 @@ +class box expands Actor; + +#exec MESH IMPORT MESH=box ANIVFILE=MODELS\box_a.3d DATAFILE=MODELS\box_d.3d X=0 Y=0 Z=0 +#exec MESH ORIGIN MESH=box X=0 Y=0 Z=0 + +#exec MESH SEQUENCE MESH=box SEQ=All STARTFRAME=0 NUMFRAMES=30 +//#exec MESH SEQUENCE MESH=box SEQ=??? STARTFRAME=0 NUMFRAMES=30 + +#exec MESHMAP NEW MESHMAP=box MESH=box +#exec MESHMAP SCALE MESHMAP=box X=0.1 Y=0.1 Z=0.2 + +#exec TEXTURE IMPORT NAME=Jtex1 FILE=texture1.pcx GROUP=Skins FLAGS=2 +#exec TEXTURE IMPORT NAME=Jtex1 FILE=texture1.pcx GROUP=Skins PALETTE=Jtex1 +#exec MESHMAP SETTEXTURE MESHMAP=box NUM=1 TEXTURE=Jtex1 + +defaultproperties +{ + DrawType=DT_Mesh + Mesh=box +} diff --git a/test/models/3D/box_a.3d b/test/models/3D/box_a.3d new file mode 100644 index 0000000000000000000000000000000000000000..22884c3ff6afb5babbeb2ae3380fa68bf44c76fe GIT binary patch literal 964 zcmb1RP+<7?-k$N_`~3{eFYFnaUjS(d21aIy28Ms~42=Kef%K^SX!wk#k3pM10LJA` A4gdfE literal 0 HcmV?d00001 diff --git a/test/models/3D/box_d.3d b/test/models/3D/box_d.3d new file mode 100644 index 0000000000000000000000000000000000000000..2f127a8ccc14e13f669bb3bbe263dc1d74b408d8 GIT binary patch literal 240 zcmb7-K@I>R2m_0#>|y`^UA6(-=+SbTOj=$%xQn1=!5zZWWM@c?+&8Zn$>lqFZhpX$ d%TID8_Kcg6-{aT^KgPfE!oIEsyT*UPnRo9! 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 literal 0 HcmV?d00001 diff --git a/test/models/3DS/testFormatDetection b/test/models/3DS/testFormatDetection new file mode 100644 index 0000000000000000000000000000000000000000..a2f5736250adb618973f27c778fb81fd883dfb6d GIT binary patch literal 29025 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 literal 0 HcmV?d00001 diff --git a/test/models/IRR/animMesh.irr b/test/models/IRR/animMesh.irr index d0b472f2c73d911c7e6ecfc112f4c771a6f94d43..d1c9e10183ae5671b19e5b50b4de56393f03b1b0 100644 GIT binary patch delta 22 ecmZ3H+LgND0_)~mtoK+pAL0t&+bkp5BMAU{;|X8@ delta 52 pcmeB5U6H!s0xPE*LncEGLn=e@=JTxgS&+DExdQo+xPK*jB>}st5ElRd diff --git a/test/models/IRR/warn_dwarf_scaling_is_intended.txt b/test/models/IRR/warn_dwarf_scaling_is_intended.txt new file mode 100644 index 000000000..1fcb03b9a --- /dev/null +++ b/test/models/IRR/warn_dwarf_scaling_is_intended.txt @@ -0,0 +1,3 @@ +for dawfInCellar_ChildOfCellar & dawfInCellar_SameHierarchy: + +the strange scalings of cellar and dwarf are intended. diff --git a/test/models/LWO/LWO2/boxuv.lwo b/test/models/LWO/LWO2/boxuv.lwo new file mode 100644 index 0000000000000000000000000000000000000000..9f314d0169e3a0b8d76a3299f626f660fac6156e GIT binary patch literal 1100 zcmZ{jJ8#oa6vzKgok!C&eWfi(9hguHEg-~z6xHU&wG)FITeh2|Ol@glK%%G+)Ts(1 z3j!uS0bvOepP(y9EJcEefrS|f!2ko|oSRABpFyiJ*I5!%pv&)#XR=0PV)cq*nd)<@~OD8StsSBIQx?R zWWHjRlhhnzn{|@er~FAy<}fSa9Og>JZ;?91wi5O$X{?HX%)fDKt$|d$v;VNYM-LC9 z`}A!2^WA6A%3ppzk(6RGx(~i%h@+BpbMgF<(cOK4w0Us#holTs`BOZHEJr2f%!B2? z=xu++u(^2YqNF^NIe+*ZBOH}fFnYg=<)g$EG${{U6^UP!M{d-q-mu;MxnGG>RmAPQ`YPAON#^Kam% z%U|_e2Ubngp>w?-2#fB3euZ5Z6*`wzx2uBB7jyoWRgY<(ejoK4xi@XvyVI}iSBHKq z2J;-@dGsCw%MWdb`&-d^#5xH5>!j17<+7ckb5==f&5-uj>9vT0rn(n#O|hKQoSIJ| PqL^;1@p%HbCGYYN(Pqze literal 0 HcmV?d00001 diff --git a/test/models/LWO/LWO2/boxuv.png b/test/models/LWO/LWO2/boxuv.png new file mode 100644 index 0000000000000000000000000000000000000000..9da32691ee2be68515b353e043709a0bf449bfc7 GIT binary patch literal 14080 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 literal 0 HcmV?d00001 diff --git a/test/models/LWO/LWOB/MappingModes/bluewithcylindrictexz.lwo b/test/models/LWO/LWOB/MappingModes/bluewithcylindrictexz.lwo new file mode 100644 index 0000000000000000000000000000000000000000..c26927077e7f3e542d27a7522fffdfb37c9c4f3b GIT binary patch literal 600 zcmZuv%}xR_5FTKK3un$efd`2fV}x3^>n7cwv;~dnK_Ux5K?uvmi{Ul!2sA{r&MU=+ISx?)|<`bH>UqtPHaQk~SI&zM< z(}3^5KgEAJ4yTE9_uP>OS)wvkARYGT49MXUP!$n}E6`P{?J>cs?c*L~4SrT}qU@`ZGMqgd>8A4Fv0^g$)By#~@LC+`MZ z=qs>`s8Ml&0-0!Jb`UbqB^AcqB9F<`%~z%!H~s@P`1^G7He61g2h(Oa8;rANG+2-k z(sejAI(($MyYKiJZWPsBFUMm9lP8|Of9kRmbqm- zu-z+WVZ;Le;{0VXMpX=jneZNlF@30-xc#`U Fe*w$Ne2D-6 literal 0 HcmV?d00001 diff --git a/test/models/LWO/LWOB/formatDetection b/test/models/LWO/LWOB/formatDetection new file mode 100644 index 0000000000000000000000000000000000000000..49f24e826d1ffd09f8abf09428e010e2322f0183 GIT binary patch literal 544 zcmX|7Jx>Bb5Pf%m;wLH!6q;y^or%R+8UcYrlH=~Occ6uZ7M_W*(J0Z_keFCnsD+7z zQ5*k&rQ8-4#K1q`7x)J#EOho@-D2m>+c$4!N4HoRP*cX1wc#+`0T9jadwXX`r?5?z za%H|zCzeiH)3nCZ!EAtU9+w+G=l22TfUkFx0scPR@$WQE;7sIl(f|5<32^Ma%R_xW zu4#NBocQP0T5YN4?%T7#Y4YJ-*9|ZS_{qgpfT=I9d0v2N9?7rY?#@a5N2}GAK8;T2 zmG}MqmFp$h*WW&_$$5Ow^W>a@m-7p~{Fm^N{}ujn52CMa8Dej%NYR}{0yCIK98;LY z1Y#J+7)CLIVGJRPK@1>*FhWqFKyfNer>Y0J^PFWcgqzJKbR%0N4U9^;Bx1g#>rfRq zb|EKnR?rO*U6wUPtdfv?=~PLIaJo*&v2%Tnk-GQlGP8$@hUHLYhMruC3M-lUUR~C( JH%X)7_YZ*Of=B=W literal 0 HcmV?d00001 diff --git a/test/models/LWS/QuickDraw v.2.2.lws b/test/models/LWS/QuickDraw v.2.2.lws index 0222af835..c1d713e24 100644 --- a/test/models/LWS/QuickDraw v.2.2.lws +++ b/test/models/LWS/QuickDraw v.2.2.lws @@ -10,7 +10,7 @@ PreviewFrameStep 1 CurrentFrame 0 FramesPerSecond 30 -LoadObjectLayer 1 Objects/WW_QuickDraw/QuickDraw--Chasis.lwo +LoadObjectLayer 1 ../LWO/LWO2/LWSReferences/QuickDraw--Chasis.lwo ShowObject 5 7 ObjectMotion NumChannels 9 @@ -85,7 +85,7 @@ ParentItem 1000000e IKAnchor 1 ShadowOptions 7 -LoadObjectLayer 1 Objects/WW_QuickDraw/QuickDraw--Wheels-Back.lwo +LoadObjectLayer 1 ../LWO/LWO2/LWSReferences/QuickDraw--Wheels-Back.lwo ShowObject 5 7 ObjectMotion NumChannels 9 @@ -160,7 +160,7 @@ PivotPosition 0 0.99 2.58 ParentItem 10000000 ShadowOptions 7 -LoadObjectLayer 1 Objects/WW_QuickDraw/QuickDraw--Wheels-Front.lwo +LoadObjectLayer 1 ../LWO/LWO2/LWSReferences/QuickDraw--Wheels-Front.lwo ShowObject 5 7 ObjectMotion NumChannels 9 @@ -235,7 +235,7 @@ PivotPosition 0 0.6799999 -2.539999 ParentItem 10000000 ShadowOptions 7 -LoadObjectLayer 1 Objects/WW_QuickDraw/QuickDraw--CabinPortals.lwo +LoadObjectLayer 1 ../LWO/LWO2/LWSReferences/QuickDraw--CabinPortals.lwo ShowObject 5 7 ObjectMotion NumChannels 9 @@ -312,7 +312,7 @@ PivotPosition 0 2.55 -1.61 ParentItem 10000000 ShadowOptions 7 -LoadObjectLayer 1 Objects/WW_QuickDraw/QuickDraw--Arm-Shoulder.lwo +LoadObjectLayer 1 ../LWO/LWO2/LWSReferences/QuickDraw--Arm-Shoulder.lwo ShowObject 5 7 ObjectMotion NumChannels 9 @@ -390,7 +390,7 @@ PivotPosition 0 1.81 -4.240001 ParentItem 10000000 ShadowOptions 7 -LoadObjectLayer 1 Objects/WW_QuickDraw/QuickDraw--Arm-ForeArm.lwo +LoadObjectLayer 1 ../LWO/LWO2/LWSReferences/QuickDraw--Arm-ForeArm.lwo ShowObject 5 7 ObjectMotion NumChannels 9 @@ -467,7 +467,7 @@ PivotPosition 0 1.82 -5.410002 ParentItem 10000004 ShadowOptions 7 -LoadObjectLayer 1 Objects/WW_QuickDraw/QuickDraw--Arm-Tip.lwo +LoadObjectLayer 1 ../LWO/LWO2/LWSReferences/QuickDraw--Arm-Tip.lwo ShowObject 5 7 ObjectMotion NumChannels 9 @@ -544,7 +544,7 @@ PivotPosition 0 3.98 -5.510003 ParentItem 10000005 ShadowOptions 7 -LoadObjectLayer 1 Objects/WW_QuickDraw/QuickDraw--GP-Pod.lwo +LoadObjectLayer 1 ../LWO/LWO2/LWSReferences/QuickDraw--GP-Pod.lwo ShowObject 5 7 ObjectMotion NumChannels 9 @@ -621,7 +621,7 @@ PivotPosition 0 3.1 -0.870001 ParentItem 10000000 ShadowOptions 7 -LoadObjectLayer 1 Objects/WW_QuickDraw/QuickDraw--GP-Lid.lwo +LoadObjectLayer 1 ../LWO/LWO2/LWSReferences/QuickDraw--GP-Lid.lwo ShowObject 5 7 ObjectMotion NumChannels 9 @@ -698,7 +698,7 @@ PivotPosition 0 3.13 1.66 ParentItem 10000007 ShadowOptions 7 -LoadObjectLayer 1 Objects/WW_QuickDraw/QuickDraw--GP-Gun.lwo +LoadObjectLayer 1 ../LWO/LWO2/LWSReferences/QuickDraw--GP-Gun.lwo ShowObject 5 7 ObjectMotion NumChannels 9 @@ -1395,7 +1395,7 @@ LockedChannels 4088 ParentItem 1000000e ShadowOptions 0 -LoadObjectLayer 1 Objects/WW_QuickDraw/QuickDraw--Standin-Driver.lwo +LoadObjectLayer 1 ../LWO/LWO2/LWSReferences/QuickDraw--Standin-Driver.lwo ShowObject 5 7 ObjectMotion NumChannels 9 diff --git a/test/models/LWS/QuickDraw v.2.2_oldformat_56.lws b/test/models/LWS/QuickDraw v.2.2_oldformat_56.lws new file mode 100644 index 000000000..926e03814 --- /dev/null +++ b/test/models/LWS/QuickDraw v.2.2_oldformat_56.lws @@ -0,0 +1,987 @@ +LWSC +2 + +RenderRangeType 0 +FirstFrame 1 +LastFrame 30 +FrameStep 1 +RenderRangeObject 0 +RenderRangeArbitrary 1-30 +PreviewFirstFrame 0 +PreviewLastFrame 30 +PreviewFrameStep 1 +FramesPerSecond 30 + +LoadObject ..\LWO\LWO2\LWSReferences\QuickDraw--Chasis.lwo +ShowObject 5 7 +Group 0 +ObjectMotion (unnamed) + 9 + 2 + 0 0 2 0 0 0 + 0 1 2 0 0 0 + 2 + 0 0 2 0 0 0 + 0 1 2 0 0 0 + 2 + 0 0 2 0 0 0 + 0 1 2 0 0 0 + 2 + 0 0 2 0 0 0 + 0 1 2 0 0 0 + 2 + 0 0 2 0 0 0 + 0 1 2 0 0 0 + 2 + 0 0 2 0 0 0 + 0 1 2 0 0 0 + 2 + 1 0 2 0 0 0 + 1 1 2 0 0 0 + 2 + 1 0 2 0 0 0 + 1 1 2 0 0 0 + 2 + 1 0 2 0 0 0 + 1 1 2 0 0 0 +Pre/PostBehavior 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 +HLimits 0 0 +PLimits 0 0 +BLimits 0 0 +PathAlignLookAhead 0.033 +PathAlignMaxLookSteps 10 +PathAlignReliableDist 0.001 +ParentObject 15 +IKInitialState 0 +IKAnchor 1 +SubPatchLevel 3 3 +LoadObject ..\LWO\LWO2\LWSReferences\QuickDraw--Wheels-Back.lwo +ShowObject 5 7 +Group 0 +ObjectMotion (unnamed) + 9 + 2 + 0 0 2 0 0 0 + 0 1 2 0 0 0 + 2 + 0.99 0 2 0 0 0 + 0.99 1 2 0 0 0 + 2 + 2.58 0 2 0 0 0 + 2.58 1 2 0 0 0 + 2 + 0 0 2 0 0 0 + 0 1 2 0 0 0 + 2 + 0 0 2 0 0 0 + 0 1 2 0 0 0 + 2 + 0 0 2 0 0 0 + 0 1 2 0 0 0 + 2 + 1 0 2 0 0 0 + 1 1 2 0 0 0 + 2 + 1 0 2 0 0 0 + 1 1 2 0 0 0 + 2 + 1 0 2 0 0 0 + 1 1 2 0 0 0 +Pre/PostBehavior 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 +LockedChannels 4079 +HLimits 0 0 +BLimits 0 0 +PathAlignLookAhead 0.033 +PathAlignMaxLookSteps 10 +PathAlignReliableDist 0.001 +PivotPoint 0 0.99 2.58 +ParentObject 1 +IKInitialState 0 +SubPatchLevel 3 3 +LoadObject ..\LWO\LWO2\LWSReferences\QuickDraw--Wheels-Front.lwo +ShowObject 5 7 +Group 0 +ObjectMotion (unnamed) + 9 + 2 + 0 0 2 0 0 0 + 0 1 2 0 0 0 + 2 + 0.6799999 0 2 0 0 0 + 0.6799999 1 2 0 0 0 + 2 + -2.539999 0 2 0 0 0 + -2.539999 1 2 0 0 0 + 2 + 0 0 2 0 0 0 + 0 1 2 0 0 0 + 2 + 0 0 2 0 0 0 + 0 1 2 0 0 0 + 2 + 0 0 2 0 0 0 + 0 1 2 0 0 0 + 2 + 1 0 2 0 0 0 + 1 1 2 0 0 0 + 2 + 1 0 2 0 0 0 + 1 1 2 0 0 0 + 2 + 1 0 2 0 0 0 + 1 1 2 0 0 0 +Pre/PostBehavior 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 +LockedChannels 4079 +HLimits 0 0 +BLimits 0 0 +PathAlignLookAhead 0.033 +PathAlignMaxLookSteps 10 +PathAlignReliableDist 0.001 +PivotPoint 0 0.6799999 -2.539999 +ParentObject 1 +IKInitialState 0 +SubPatchLevel 3 3 +LoadObject ..\LWO\LWO2\LWSReferences\QuickDraw--CabinPortals.lwo +ShowObject 5 7 +Group 0 +ObjectMotion (unnamed) + 9 + 2 + 0 0 2 0 0 0 + 0 1 2 0 0 0 + 2 + 2.55 0 2 0 0 0 + 2.55 1 2 0 0 0 + 2 + -1.61 0 2 0 0 0 + -1.61 1 2 0 0 0 + 2 + 0 0 2 0 0 0 + 0 1 2 0 0 0 + 2 + 0 0 2 0 0 0 + -114 1 2 0 0 0 + 2 + 0 0 2 0 0 0 + 0 1 2 0 0 0 + 2 + 1 0 2 0 0 0 + 1 1 2 0 0 0 + 2 + 1 0 2 0 0 0 + 1 1 2 0 0 0 + 2 + 1 0 2 0 0 0 + 1 1 2 0 0 0 +Pre/PostBehavior 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 +LockedChannels 4079 +HLimits 0 0 +PController 3 +PLimits -114 0 +BLimits 0 0 +PathAlignLookAhead 0.033 +PathAlignMaxLookSteps 10 +PathAlignReliableDist 0.001 +PivotPoint 0 2.55 -1.61 +ParentObject 1 +IKInitialState 0 +SubPatchLevel 3 3 +LoadObject ..\LWO\LWO2\LWSReferences\QuickDraw--Arm-Shoulder.lwo +ShowObject 5 7 +Group 0 +ObjectMotion (unnamed) + 9 + 2 + 0 0 2 0 0 0 + 0 1 2 0 0 0 + 2 + 1.81 0 2 0 0 0 + 1.81 1 2 0 0 0 + 2 + -4.240001 0 2 0 0 0 + -4.240001 1 2 0 0 0 + 2 + 0 0 2 0 0 0 + 0 1 2 0 0 0 + 2 + 0 0 2 0 0 0 + -23 1 2 0 0 0 + 2 + 0 0 2 0 0 0 + 0 1 2 0 0 0 + 2 + 1 0 2 0 0 0 + 1 1 2 0 0 0 + 2 + 1 0 2 0 0 0 + 1 1 2 0 0 0 + 2 + 1 0 2 0 0 0 + 1 1 2 0 0 0 +Pre/PostBehavior 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 +LockedChannels 4071 +HController 3 +HLimits -59.99999 59.99999 +PController 3 +PLimits -23 123 +BLimits 0 0 +PathAlignLookAhead 0.033 +PathAlignMaxLookSteps 10 +PathAlignReliableDist 0.001 +PivotPoint 0 1.81 -4.240001 +ParentObject 1 +IKInitialState 0 +SubPatchLevel 3 3 +LoadObject ..\LWO\LWO2\LWSReferences\QuickDraw--Arm-ForeArm.lwo +ShowObject 5 7 +Group 0 +ObjectMotion (unnamed) + 9 + 2 + 0 0 2 0 0 0 + 0 1 2 0 0 0 + 2 + 1.82 0 2 0 0 0 + 1.82 1 2 0 0 0 + 2 + -5.410002 0 2 0 0 0 + -5.410002 1 2 0 0 0 + 2 + 0 0 2 0 0 0 + 0 1 2 0 0 0 + 2 + 0 0 2 0 0 0 + 45.675 1 2 0 0 0 + 2 + 0 0 2 0 0 0 + 0 1 2 0 0 0 + 2 + 1 0 2 0 0 0 + 1 1 2 0 0 0 + 2 + 1 0 2 0 0 0 + 1 1 2 0 0 0 + 2 + 1 0 2 0 0 0 + 1 1 2 0 0 0 +Pre/PostBehavior 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 +LockedChannels 4079 +HLimits 0 0 +PController 3 +PLimits -90 46 +BLimits 0 0 +PathAlignLookAhead 0.033 +PathAlignMaxLookSteps 10 +PathAlignReliableDist 0.001 +PivotPoint 0 1.82 -5.410002 +ParentObject 5 +IKInitialState 0 +SubPatchLevel 3 3 +LoadObject ..\LWO\LWO2\LWSReferences\QuickDraw--Arm-Tip.lwo +ShowObject 5 7 +Group 0 +ObjectMotion (unnamed) + 9 + 2 + 0 0 2 0 0 0 + 0 1 2 0 0 0 + 2 + 3.98 0 2 0 0 0 + 3.98 1 2 0 0 0 + 2 + -5.510003 0 2 0 0 0 + -5.510003 1 2 0 0 0 + 2 + 0 0 2 0 0 0 + 0 1 2 0 0 0 + 2 + 0 0 2 0 0 0 + -28 1 2 0 0 0 + 2 + 0 0 2 0 0 0 + 0 1 2 0 0 0 + 2 + 1 0 2 0 0 0 + 1 1 2 0 0 0 + 2 + 1 0 2 0 0 0 + 1 1 2 0 0 0 + 2 + 1 0 2 0 0 0 + 1 1 2 0 0 0 +Pre/PostBehavior 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 +LockedChannels 4079 +HLimits 0 0 +PController 3 +PLimits -28 140 +BLimits 0 0 +PathAlignLookAhead 0.033 +PathAlignMaxLookSteps 10 +PathAlignReliableDist 0.001 +PivotPoint 0 3.98 -5.510003 +ParentObject 6 +IKInitialState 0 +SubPatchLevel 3 3 +LoadObject ..\LWO\LWO2\LWSReferences\QuickDraw--GP-Pod.lwo +ShowObject 5 7 +Group 0 +ObjectMotion (unnamed) + 9 + 2 + 0 0 2 0 0 0 + 0 1 2 0 0 0 + 2 + 3.1 0 2 0 0 0 + 3.1 1 2 0 0 0 + 2 + -0.870001 0 2 0 0 0 + -0.870001 1 2 0 0 0 + 2 + 0 0 2 0 0 0 + 0 1 2 0 0 0 + 2 + 0 0 2 0 0 0 + -89.99999 1 2 0 0 0 + 2 + 0 0 2 0 0 0 + 0 1 2 0 0 0 + 2 + 1 0 2 0 0 0 + 1 1 2 0 0 0 + 2 + 1 0 2 0 0 0 + 1 1 2 0 0 0 + 2 + 1 0 2 0 0 0 + 1 1 2 0 0 0 +Pre/PostBehavior 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 +LockedChannels 4079 +HLimits 0 0 +PController 3 +PLimits -90 0 +BLimits 0 0 +PathAlignLookAhead 0.033 +PathAlignMaxLookSteps 10 +PathAlignReliableDist 0.001 +PivotPoint 0 3.1 -0.870001 +ParentObject 1 +IKInitialState 0 +SubPatchLevel 3 3 +LoadObject ..\LWO\LWO2\LWSReferences\QuickDraw--GP-Lid.lwo +ShowObject 5 7 +Group 0 +ObjectMotion (unnamed) + 9 + 2 + 0 0 2 0 0 0 + 0 1 2 0 0 0 + 2 + 3.13 0 2 0 0 0 + 3.13 1 2 0 0 0 + 2 + 1.66 0 2 0 0 0 + 1.66 1 2 0 0 0 + 2 + 0 0 2 0 0 0 + 0 1 2 0 0 0 + 2 + 0 0 2 0 0 0 + 140 1 2 0 0 0 + 2 + 0 0 2 0 0 0 + 0 1 2 0 0 0 + 2 + 1 0 2 0 0 0 + 1 1 2 0 0 0 + 2 + 1 0 2 0 0 0 + 1 1 2 0 0 0 + 2 + 1 0 2 0 0 0 + 1 1 2 0 0 0 +Pre/PostBehavior 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 +LockedChannels 4079 +HLimits 0 0 +PController 3 +PLimits 0 140 +BLimits 0 0 +PathAlignLookAhead 0.033 +PathAlignMaxLookSteps 10 +PathAlignReliableDist 0.001 +PivotPoint 0 3.13 1.66 +ParentObject 8 +IKInitialState 0 +SubPatchLevel 3 3 +LoadObject ..\LWO\LWO2\LWSReferences\QuickDraw--GP-Gun.lwo +ShowObject 5 7 +Group 0 +ObjectMotion (unnamed) + 9 + 2 + 0 0 2 0 0 0 + 0 1 2 0 0 0 + 2 + 3.409999 0 2 0 0 0 + 3.409999 1 2 0 0 0 + 2 + 1.580001 0 2 0 0 0 + 1.580001 1 2 0 0 0 + 2 + 0 0 2 0 0 0 + 0 1 2 0 0 0 + 2 + 0 0 2 0 0 0 + 89.99999 1 2 0 0 0 + 2 + 0 0 2 0 0 0 + 0 1 2 0 0 0 + 2 + 1 0 2 0 0 0 + 1 1 2 0 0 0 + 2 + 1 0 2 0 0 0 + 1 1 2 0 0 0 + 2 + 1 0 2 0 0 0 + 1 1 2 0 0 0 +Pre/PostBehavior 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 +LockedChannels 4079 +HLimits 0 0 +PController 3 +PLimits 0 90 +BLimits 0 0 +PathAlignLookAhead 0.033 +PathAlignMaxLookSteps 10 +PathAlignReliableDist 0.001 +PivotPoint 0 3.409999 1.580001 +ParentObject 8 +IKInitialState 0 +SubPatchLevel 3 3 +AddNullObject Quick Draw -- magnet -- Portals +ShowObject 5 7 +Group 0 +ObjectMotion (unnamed) + 9 + 2 + 0 0 2 0 0 0 + 0 1 2 0 0 0 + 2 + 1.92 0 2 0 0 0 + 1.92 1 2 0 0 0 + 2 + -2.869999 0 2 0 0 0 + -2.869999 1 2 0 0 0 + 2 + 0 0 2 0 0 0 + 0 1 2 0 0 0 + 2 + 0 0 2 0 0 0 + 0 1 2 0 0 0 + 2 + 0 0 2 0 0 0 + 0 1 2 0 0 0 + 2 + 1 0 2 0 0 0 + 1 1 2 0 0 0 + 2 + 1 0 2 0 0 0 + 1 1 2 0 0 0 + 2 + 1 0 2 0 0 0 + 1 1 2 0 0 0 +Pre/PostBehavior 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 +LockedChannels 4095 +PathAlignLookAhead 0.033 +PathAlignMaxLookSteps 10 +PathAlignReliableDist 0.001 +ParentObject 4 +GoalObject 16 +FullTimeIK 0 +GoalStrength 1 +GoalObjective 0 +IKSoft 0 +IKSoftDistType 0 +IKInitialState 0 +SubPatchLevel 3 3 +AddNullObject Quick Draw -- magnet -- Pod-Gun +ShowObject 5 7 +Group 0 +ObjectMotion (unnamed) + 9 + 2 + 0 0 2 0 0 0 + 0 1 2 0 0 0 + 2 + 3.329999 0 2 0 0 0 + 3.329999 1 2 0 0 0 + 2 + -0.13 0 2 0 0 0 + -0.13 1 2 0 0 0 + 2 + 0 0 2 0 0 0 + 0 1 2 0 0 0 + 2 + 0 0 2 0 0 0 + 0 1 2 0 0 0 + 2 + 0 0 2 0 0 0 + 0 1 2 0 0 0 + 2 + 1 0 2 0 0 0 + 1 1 2 0 0 0 + 2 + 1 0 2 0 0 0 + 1 1 2 0 0 0 + 2 + 1 0 2 0 0 0 + 1 1 2 0 0 0 +Pre/PostBehavior 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 +LockedChannels 4095 +PathAlignLookAhead 0.033 +PathAlignMaxLookSteps 10 +PathAlignReliableDist 0.001 +ParentObject 10 +GoalObject 17 +FullTimeIK 0 +GoalStrength 1 +GoalObjective 0 +IKSoft 0 +IKSoftDistType 0 +IKInitialState 0 +SubPatchLevel 3 3 +AddNullObject Quick Draw -- magnet -- Pod Lid +ShowObject 5 7 +Group 0 +ObjectMotion (unnamed) + 9 + 2 + 0 0 2 0 0 0 + 0 1 2 0 0 0 + 2 + 3.56 0 2 0 0 0 + 3.56 1 2 0 0 0 + 2 + -0.28 0 2 0 0 0 + -0.28 1 2 0 0 0 + 2 + 0 0 2 0 0 0 + 0 1 2 0 0 0 + 2 + 0 0 2 0 0 0 + 0 1 2 0 0 0 + 2 + 0 0 2 0 0 0 + 0 1 2 0 0 0 + 2 + 1 0 2 0 0 0 + 1 1 2 0 0 0 + 2 + 1 0 2 0 0 0 + 1 1 2 0 0 0 + 2 + 1 0 2 0 0 0 + 1 1 2 0 0 0 +Pre/PostBehavior 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 +LockedChannels 4095 +PathAlignLookAhead 0.033 +PathAlignMaxLookSteps 10 +PathAlignReliableDist 0.001 +ParentObject 9 +GoalObject 18 +FullTimeIK 1 +GoalStrength 1 +GoalObjective 0 +IKSoft 0 +IKSoftDistType 0 +IKInitialState 0 +SubPatchLevel 3 3 +AddNullObject Quick Draw -- magnet -- Arm +ShowObject 5 7 +Group 0 +ObjectMotion (unnamed) + 9 + 2 + 0 0 2 0 0 0 + 0 1 2 0 0 0 + 2 + 3.999999 0 2 0 0 0 + 3.999999 1 2 0 0 0 + 2 + -6.8 0 2 0 0 0 + -6.8 1 2 0 0 0 + 2 + 0 0 2 0 0 0 + 0 1 2 0 0 0 + 2 + 0 0 2 0 0 0 + 0 1 2 0 0 0 + 2 + 0 0 2 0 0 0 + 0 1 2 0 0 0 + 2 + 1 0 2 0 0 0 + 1 1 2 0 0 0 + 2 + 1 0 2 0 0 0 + 1 1 2 0 0 0 + 2 + 1 0 2 0 0 0 + 1 1 2 0 0 0 +Pre/PostBehavior 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 +LockedChannels 4095 +PathAlignLookAhead 0.033 +PathAlignMaxLookSteps 10 +PathAlignReliableDist 0.001 +ParentObject 7 +GoalObject 19 +FullTimeIK 0 +GoalStrength 1 +GoalObjective 0 +IKSoft 0 +IKSoftDistType 0 +IKInitialState 0 +SubPatchLevel 3 3 +AddNullObject Quick Draw == HANDLE == MASTER +ShowObject 5 7 +Group 0 +ObjectMotion (unnamed) + 9 + 1 + 0 0 2 0 0 0 + 1 + 0 0 2 0 0 0 + 1 + 0 0 2 0 0 0 + 1 + 0 0 2 0 0 0 + 1 + 0 0 2 0 0 0 + 1 + 0 0 2 0 0 0 + 1 + 1 0 2 0 0 0 + 1 + 1 0 2 0 0 0 + 1 + 1 0 2 0 0 0 +Pre/PostBehavior 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 +LockedChannels 4064 +PathAlignLookAhead 0.033 +PathAlignMaxLookSteps 10 +PathAlignReliableDist 0.001 +IKInitialState 0 +SubPatchLevel 3 3 +AddNullObject Quick Draw == HANDLE == Portals +ShowObject 5 7 +Group 0 +ObjectMotion (unnamed) + 9 + 1 + 0 0 2 0 0 0 + 1 + 1.92 0 2 0 0 0 + 1 + -2.869999 0 2 0 0 0 + 1 + 0 0 2 0 0 0 + 1 + 0 0 2 0 0 0 + 1 + 0 0 2 0 0 0 + 1 + 1 0 2 0 0 0 + 1 + 1 0 2 0 0 0 + 1 + 1 0 2 0 0 0 +Pre/PostBehavior 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 +LockedChannels 4089 +PathAlignLookAhead 0.033 +PathAlignMaxLookSteps 10 +PathAlignReliableDist 0.001 +ParentObject 15 +IKInitialState 0 +SubPatchLevel 3 3 +AddNullObject Quick Draw == HANDLE == Pod-Gun +ShowObject 5 7 +Group 0 +ObjectMotion (unnamed) + 9 + 1 + 0 0 2 0 0 0 + 1 + 3.329999 0 2 0 0 0 + 1 + -0.13 0 2 0 0 0 + 1 + 0 0 2 0 0 0 + 1 + 0 0 2 0 0 0 + 1 + 0 0 2 0 0 0 + 1 + 1 0 2 0 0 0 + 1 + 1 0 2 0 0 0 + 1 + 1 0 2 0 0 0 +Pre/PostBehavior 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 +LockedChannels 4089 +PathAlignLookAhead 0.033 +PathAlignMaxLookSteps 10 +PathAlignReliableDist 0.001 +ParentObject 15 +IKInitialState 0 +SubPatchLevel 3 3 +AddNullObject Quick Draw == HANDLE == Pod Lid +ShowObject 5 7 +Group 0 +ObjectMotion (unnamed) + 9 + 2 + 0 0 2 0 0 0 + 0 1 2 0 0 0 + 2 + 3.56 0 2 0 0 0 + 8.400002 1 2 0 0 0 + 2 + -0.28 0 2 0 0 0 + -2.279999 1 2 0 0 0 + 2 + 0 0 2 0 0 0 + 0 1 2 0 0 0 + 2 + 0 0 2 0 0 0 + 0 1 2 0 0 0 + 2 + 0 0 2 0 0 0 + 0 1 2 0 0 0 + 2 + 1 0 2 0 0 0 + 1 1 2 0 0 0 + 2 + 1 0 2 0 0 0 + 1 1 2 0 0 0 + 2 + 1 0 2 0 0 0 + 1 1 2 0 0 0 +Pre/PostBehavior 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 +LockedChannels 4089 +PathAlignLookAhead 0.033 +PathAlignMaxLookSteps 10 +PathAlignReliableDist 0.001 +ParentObject 15 +IKInitialState 0 +SubPatchLevel 3 3 +AddNullObject Quick Draw == HANDLE == Arm +ShowObject 5 7 +Group 0 +ObjectMotion (unnamed) + 9 + 1 + 0 0 2 0 0 0 + 1 + 3.999999 0 2 0 0 0 + 1 + -6.8 0 2 0 0 0 + 1 + 0 0 2 0 0 0 + 1 + 0 0 2 0 0 0 + 1 + 0 0 2 0 0 0 + 1 + 1 0 2 0 0 0 + 1 + 1 0 2 0 0 0 + 1 + 1 0 2 0 0 0 +Pre/PostBehavior 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 +LockedChannels 4088 +PathAlignLookAhead 0.033 +PathAlignMaxLookSteps 10 +PathAlignReliableDist 0.001 +ParentObject 15 +IKInitialState 0 +SubPatchLevel 3 3 +LoadObject ..\LWO\LWO2\LWSReferences\QuickDraw--Standin-Driver.lwo +ShowObject 5 7 +Group 0 +ObjectMotion (unnamed) + 9 + 1 + 0 0 2 0 0 0 + 1 + 0 0 2 0 0 0 + 1 + 0 0 2 0 0 0 + 1 + 0 0 2 0 0 0 + 1 + 0 0 2 0 0 0 + 1 + 0 0 2 0 0 0 + 1 + 1 0 2 0 0 0 + 1 + 1 0 2 0 0 0 + 1 + 1 0 2 0 0 0 +Pre/PostBehavior 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 +PathAlignLookAhead 0.033 +PathAlignMaxLookSteps 10 +PathAlignReliableDist 0.001 +ParentObject 1 +IKInitialState 0 +SubPatchLevel 3 3 +AmbientColor 255 255 255 +AmbIntensity 0.25 +DoubleSidedAreaLights 1 + +AddLight +LightName Light +ShowLight 0 7 +LightMotion (unnamed) + 9 + 1 + 0 0 2 0 0 0 + 1 + 0 0 2 0 0 0 + 1 + 0 0 2 0 0 0 + 1 + 60 0 2 0 0 0 + 1 + 30 0 2 0 0 0 + 1 + 0 0 2 0 0 0 + 1 + 1 0 2 0 0 0 + 1 + 1 0 2 0 0 0 + 1 + 1 0 2 0 0 0 +Pre/PostBehavior 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 +PathAlignLookAhead 0.033 +PathAlignMaxLookSteps 10 +PathAlignReliableDist 0.001 +IKInitialState 0 +LightColor 255 255 255 +LgtIntensity 1.6 +LightType 0 +LensFlare 0 +FlareIntensity 0.5 +FlareDissolve 0 +LensFlareFade 4 +LensFlareOptions 11 +FlareRingColor 80 20 10 +FlareRingSize 0.22 +FlareRandStreakInt 0.03 +FlareRandStreakDens 50 +FlareRandStreakSharp 6 +ShadowType 1 +ShadowColor 0 0 0 +Plugin LightHandler 1 DistantLight +EndPlugin + +AddCamera +CameraName Camera +ShowCamera 1 7 +CameraMotion (unnamed) + 6 + 1 + -9.570365 0 2 0 0 0 + 1 + 8.390076 0 2 0 0 0 + 1 + -9.28088 0 2 0 0 0 + 1 + 50.3 0 2 0 0 0 + 1 + 25.40001 0 2 0 0 0 + 1 + 0 0 2 0 0 0 +Pre/PostBehavior 1 1 1 1 1 1 1 1 1 1 1 1 +PathAlignLookAhead 0.033 +PathAlignMaxLookSteps 10 +PathAlignReliableDist 0.001 +IKInitialState 0 +ZoomFactor 3.2 +ZoomType 1 +Resolution 1 +CustomSize 640 480 +PixelAspectRatio -1 +CustomPixelRatio 1 +MaskPosition 0 0 640 480 +MotionBlur 0 +MotionBlurPasses 1 +ShutterEfficiency 1 +Oversampling 0 +FieldRendering 0 +ApertureHeight 0.015 +DepthOfField 0 +FocalDistance 1 +LensFStop 4 +DiaphragmSides 0 +DiaphragmRotation 0 +AASamples 1 +Sampler 1 +AdaptiveThreshold 8 +Plugin CameraHandler 1 Classic +EndPlugin + +SegmentMemory 32000000 +Antialiasing 0 +AntiAliasingLevel -1 +ReconstructionFilter 0 +AdaptiveSampling 1 + +SolidBackdrop 1 +BackdropColor 0 0 0 +ZenithColor 0 40 80 +SkyColor 120 180 240 +GroundColor 50 40 30 +NadirColor 100 80 60 +FogType 0 +FogMinDistance 0 +FogMaxDistance 1 +FogMinAmount 0 +FogMaxAmount 1 +FogColor 130 130 140 +BackdropFog 0 +VolumeClipDiscance 0.1 +DynamicRangeMin 0 +DynamicRangeLimit 1 +DitherIntensity 1 +AnimatedDither 0 + +RenderMode 2 +RayTraceEffects 0 +DepthBufferAA 0 +RenderLines 1 +RayRecursionLimit 16 +RayPrecision 6 +RayCutoff 0.01 +DataOverlayLabel +SaveRGB 0 +SaveAlpha 0 + +ViewConfiguration 0 +DefineView 0 +ViewType 9 +ViewLevel 5 +ViewAimpoint 0 2.859999 -1.620002 +ViewZoomFactor 3.2 +ViewXRay 0 +ViewMBDofPreview 0 +ViewHeadlight 0 + +GridNumber 30 +GridSize 2 +CameraViewBG 0 +ShowMotionPath 1 +ShowFogRadius 0 +ShowFogEffect 0 +ShowFieldChart 0 +OverlayColor_fv 0 0 0 +MeshBackgroundGroup 1 diff --git a/test/models/LWS/move_x.lws b/test/models/LWS/move_x.lws new file mode 100644 index 000000000..41453b1b3 --- /dev/null +++ b/test/models/LWS/move_x.lws @@ -0,0 +1,472 @@ +LWSC +5 + +RenderRangeType 0 +FirstFrame 1 +LastFrame 60 +FrameStep 1 +RenderRangeObject 0 +RenderRangeArbitrary 1-60 +PreviewFirstFrame 0 +PreviewLastFrame 60 +PreviewFrameStep 1 +CurrentFrame 40 +FramesPerSecond 30 +ChangeScene 0 + +LoadObjectLayer 1 10000000 simple_cube.lwo +ChangeObject 0 +ShowObject 7 -1 0.376471 0.878431 0.941176 +Group 0 +ObjectMotion +NumChannels 9 +Channel 0 +{ Envelope + 3 + Key 0 0 0 0 0 0 0 2.0682507681379909 0 + Key 2.0691125392913818 0.66666666666666663 0 0 0 0 -1.1874328851699829 -1.1874328851699829 0 + Key -2.3748657703399658 1.3333333333333333 0 0 0 0 -4.4421274232050125 0 0 + Behaviors 1 1 +} +Channel 1 +{ Envelope + 1 + Key -0.040000002831220627 0 0 0 0 0 0 0 0 + Behaviors 1 1 +} +Channel 2 +{ Envelope + 1 + Key 0 0 0 0 0 0 0 0 0 + Behaviors 1 1 +} +Channel 3 +{ Envelope + 1 + Key 0 0 0 0 0 0 0 0 0 + Behaviors 1 1 +} +Channel 4 +{ Envelope + 1 + Key 0 0 0 0 0 0 0 0 0 + Behaviors 1 1 +} +Channel 5 +{ Envelope + 1 + Key 0 0 0 0 0 0 0 0 0 + Behaviors 1 1 +} +Channel 6 +{ Envelope + 1 + Key 0.97975808382034302 0 0 0 0 0 0 0 0 + Behaviors 1 1 +} +Channel 7 +{ Envelope + 1 + Key 0.88587331771850586 0 0 0 0 0 0 0 0 + Behaviors 1 1 +} +Channel 8 +{ Envelope + 1 + Key 0.95491594076156616 0 0 0 0 0 0 0 0 + Behaviors 1 1 +} +IKInitCustomFrame 0 +GoalStrength 1 +IKFKBlending 0 +IKSoftMin 0.25 +IKSoftMax 0.75 +CtrlPosItemBlend 1 +CtrlRotItemBlend 1 +CtrlScaleItemBlend 1 + +PathAlignLookAhead 0.033 +PathAlignMaxLookSteps 10 +PathAlignReliableDist 0.001 +IKInitialState 0 +SubPatchLevel 3 3 +APSDisplay +{ APS + Version 1 + Method 0 + { VParm + { ObjectLevel + 0 + { VariantParameter + 3 + 0 + { ParameterValue + 3 + 0 + } + } + } + { PolygonLevel + 0 + { VariantParameter + 3 + 0 + { ParameterValue + 3 + 0 + } + } + } + { PolygonPixelSize + 0 + { VariantParameter + 3 + 0 + { ParameterValue + 256 + 0 + } + } + } + } +} +APSRender +{ APS + Version 1 + Method 0 + { VParm + { ObjectLevel + 0 + { VariantParameter + 3 + 0 + { ParameterValue + 3 + 0 + } + } + } + { PolygonLevel + 0 + { VariantParameter + 3 + 0 + { ParameterValue + 3 + 0 + } + } + } + { PolygonPixelSize + 0 + { VariantParameter + 3 + 0 + { ParameterValue + 256 + 0 + } + } + } + } +} +NodeDisplacement 0 +{ Nodal_Block + { Root + Location 0 0 + Zoom 1 + Disabled 1 + } + Version 1 + { Nodes + Server "Displacement" + { Tag + RealName "Displacement" + Name "Displacement" + Coordinates -10 -10 + Mode 1 + { Data + } + Preview "" + Comment "" + } + } + { Connections + } +} +NodeDisplacementOrder 0 +UseObjGI 0 +ObjGIRadiosityRays 64 +ObjGISecondaryBounceRays 16 +ObjGIRadiosityTolerance 0.292893 +ObjGIMinPixelSpacing 4.000000 +ObjGIMaxPixelSpacing 100.000000 +ShadowOptions 7 + +AmbientColor 1 1 1 +AmbientIntensity 0.05 +DoubleSidedAreaLights 1 +RadiosityType 2 +RadiosityInterpolated 1 +RadiosityTransparency 0 +RadiosityIntensity 1 +RadiosityTolerance 0.2928932 +RadiosityRays 64 +SecondaryBounceRays 16 +RadiosityMinPixelSpacing 4 +RadiosityMaxPixelSpacing 100 +RadiosityMultiplier 1 +RadiosityDirectionalRays 0 +RadiosityUseGradients 0 +RadiosityUseBehindTest 1 +BlurRadiosity 1 +RadiosityFlags 0 +RadiosityCacheModulus 1 +RadiosityCacheFilePath radiosity.cache +PixelFilterForceMT 0 + +AddLight 20000000 +LightName Light +ShowLight 1 -1 0.941176 0.376471 0.941176 +LightMotion +NumChannels 9 +Channel 0 +{ Envelope + 1 + Key -2 0 0 0 0 0 0 0 0 + Behaviors 1 1 +} +Channel 1 +{ Envelope + 1 + Key 2 0 0 0 0 0 0 0 0 + Behaviors 1 1 +} +Channel 2 +{ Envelope + 1 + Key -2 0 0 0 0 0 0 0 0 + Behaviors 1 1 +} +Channel 3 +{ Envelope + 1 + Key 0.78539813999999997 0 0 0 0 0 0 0 0 + Behaviors 1 1 +} +Channel 4 +{ Envelope + 1 + Key 0.61086521999999999 0 0 0 0 0 0 0 0 + Behaviors 1 1 +} +Channel 5 +{ Envelope + 1 + Key 0 0 0 0 0 0 0 0 0 + Behaviors 1 1 +} +Channel 6 +{ Envelope + 1 + Key 1 0 0 0 0 0 0 0 0 + Behaviors 1 1 +} +Channel 7 +{ Envelope + 1 + Key 1 0 0 0 0 0 0 0 0 + Behaviors 1 1 +} +Channel 8 +{ Envelope + 1 + Key 1 0 0 0 0 0 0 0 0 + Behaviors 1 1 +} +IKInitCustomFrame 0 +GoalStrength 1 +IKFKBlending 0 +IKSoftMin 0.25 +IKSoftMax 0.75 +CtrlPosItemBlend 1 +CtrlRotItemBlend 1 +CtrlScaleItemBlend 1 + +PathAlignLookAhead 0.033 +PathAlignMaxLookSteps 10 +PathAlignReliableDist 0.001 +IKInitialState 0 +LightColor 1 1 1 +LightIntensity 1 +AffectCaustics 1 +LightType 0 +LensFlare 0 +FlareIntensity 0.5 +FlareDissolve 0 +LensFlareFade 4 +LensFlareOptions 11 +FlareRingColor 0.3137 0.0784 0.0392 +FlareRingSize 0.22 +FlareRandStreakInt 0.03 +FlareRandStreakDens 50 +FlareRandStreakSharp 6 +ShadowType 1 +ShadowColor 0 0 0 +Plugin LightHandler 1 DistantLight +EndPlugin + +AddCamera 30000000 +CameraName Camera +ShowCamera 1 -1 0.125490 0.878431 0.125490 +CameraMotion +NumChannels 6 +Channel 0 +{ Envelope + 1 + Key -0.10000002384185791 0 0 0 0 0 0 0 0 + Behaviors 1 1 +} +Channel 1 +{ Envelope + 1 + Key 0.94999998807907104 0 0 0 0 0 0 0 0 + Behaviors 1 1 +} +Channel 2 +{ Envelope + 1 + Key -6.384000301361084 0 0 0 0 0 0 0 0 + Behaviors 1 1 +} +Channel 3 +{ Envelope + 1 + Key 0 0 0 0 0 0 0 0 0 + Behaviors 1 1 +} +Channel 4 +{ Envelope + 1 + Key 0 0 0 0 0 0 0 0 0 + Behaviors 1 1 +} +Channel 5 +{ Envelope + 1 + Key 0 0 0 0 0 0 0 0 0 + Behaviors 1 1 +} +IKInitCustomFrame 0 +GoalStrength 1 +IKFKBlending 0 +IKSoftMin 0.25 +IKSoftMax 0.75 +CtrlPosItemBlend 1 +CtrlRotItemBlend 1 +CtrlScaleItemBlend 1 + +PathAlignLookAhead 0.033 +PathAlignMaxLookSteps 10 +PathAlignReliableDist 0.001 +IKInitialState 0 +ZoomFactor 3.2 +ZoomType 1 +ResolutionMultiplier 1.0 +FrameSize 640 480 +PixelAspect 1 +MaskPosition 0 0 640 480 +MotionBlur 0 +MotionBlurPasses 1 +ShutterEfficiency 1 +Oversampling 0 +FieldRendering 0 +ApertureHeight 0.015 +DepthOfField 0 +FocalDistance 1 +LensFStop 4 +DiaphragmSides 0 +DiaphragmRotation 0 +AASamples 1 +Sampler 1 +UseGlobalResolution 0 +UseGlobalMask 0 +UseGlobalBlur 0 +Plugin CameraHandler 1 Perspective +EndPlugin + +GlobalFrameSize 640 480 +GlobalMultiplier 1.0 +GlobalFieldRendering 0 +GlobalMotionBlur 0 +GlobalMaskPosition 0 0 640 480 +GlobalFilmHeight 0.015 +GlobalPixelAspect 1 + +Antialiasing 0 +AntiAliasingLevel -1 +ReconstructionFilter 0 +AdaptiveSampling 0 + +SolidBackdrop 1 +BackdropColor 0 0 0 +ZenithColor 0 0.1569 0.3137 +SkyColor 0.4706 0.7059 0.9412 +GroundColor 0.1961 0.1569 0.1176 +NadirColor 0.3922 0.3137 0.2353 +FogType 0 +FogMinDistance 0 +FogMaxDistance 1 +FogMinAmount 0 +FogMaxAmount 1 +FogColor 0.5098 0.5098 0.549 +BackdropFog 0 +VolumeClipDiscance 0.1 +DynamicRangeMin 0 +DynamicRangeLimit 1 +DitherIntensity 1 +AnimatedDither 0 + +RenderMode 2 +RayTraceEffects 0 +DepthBufferAA 0 +RenderLines 1 +RayRecursionLimit 16 +RayPrecision 6 +RayCutoff 0.01 +DataOverlayLabel +SaveRGB 0 +SaveAlpha 0 + +ViewConfiguration 0 +DefineView 0 +ViewType 7 +ViewLevel 5 +ViewAimpoint 0 0 0 +ViewRotation -17.2 18 0 +ViewZoomFactor 4 +ViewXRay 0 +ViewMBDofPreview 0 +ViewHeadlight 0 + +GridNumber 80 +GridSize 1 +CameraViewBG 0 +ShowMotionPath 1 +ShowFogRadius 0 +ShowFogEffect 0 +ShowFieldChart 0 +OverlayColor_fv 0 0 0 +MeshBackgroundGroup 1 + +CurrentObject 0 +CurrentLight 0 +CurrentCamera 0 +GraphEditorData +{ GraphEd_Favorites +} +{ GE_Expression_Lib + 1 +} +ImageEditorData +NumberOfClips 0 diff --git a/test/models/LWS/move_x_oldformat_56.lws b/test/models/LWS/move_x_oldformat_56.lws new file mode 100644 index 000000000..0acf0f27c --- /dev/null +++ b/test/models/LWS/move_x_oldformat_56.lws @@ -0,0 +1,196 @@ +LWSC +2 + +RenderRangeType 0 +FirstFrame 1 +LastFrame 60 +FrameStep 1 +RenderRangeObject 0 +RenderRangeArbitrary 1-60 +PreviewFirstFrame 0 +PreviewLastFrame 60 +PreviewFrameStep 1 +FramesPerSecond 30 + +LoadObject simple_cube.lwo +ShowObject 7 -1 0.376471 0.878431 0.941176 +Group 0 +ObjectMotion (unnamed) + 9 + 3 + 0 0 2 0 0 0 + 2.069113 0.6666667 2 0 0 0 + -2.374866 1.333333 2 0 0 0 + 1 + -0.04 0 2 0 0 0 + 1 + 0 0 2 0 0 0 + 1 + 0 0 2 0 0 0 + 1 + 0 0 2 0 0 0 + 1 + 0 0 2 0 0 0 + 1 + 0.9797581 0 2 0 0 0 + 1 + 0.8858733 0 2 0 0 0 + 1 + 0.9549159 0 2 0 0 0 +Pre/PostBehavior 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 +PathAlignLookAhead 0.033 +PathAlignMaxLookSteps 10 +PathAlignReliableDist 0.001 +IKInitialState 0 +SubPatchLevel 3 3 +AmbientColor 255 255 255 +AmbIntensity 0.05 +DoubleSidedAreaLights 1 + +AddLight +LightName Light +ShowLight 1 -1 0.941176 0.376471 0.941176 +LightMotion (unnamed) + 9 + 1 + -2 0 2 0 0 0 + 1 + 2 0 2 0 0 0 + 1 + -2 0 2 0 0 0 + 1 + 45 0 2 0 0 0 + 1 + 35 0 2 0 0 0 + 1 + 0 0 2 0 0 0 + 1 + 1 0 2 0 0 0 + 1 + 1 0 2 0 0 0 + 1 + 1 0 2 0 0 0 +Pre/PostBehavior 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 +PathAlignLookAhead 0.033 +PathAlignMaxLookSteps 10 +PathAlignReliableDist 0.001 +IKInitialState 0 +LightColor 255 255 255 +LgtIntensity 1 +LightType 0 +LensFlare 0 +FlareIntensity 0.5 +FlareDissolve 0 +LensFlareFade 4 +LensFlareOptions 11 +FlareRingColor 80 20 10 +FlareRingSize 0.22 +FlareRandStreakInt 0.03 +FlareRandStreakDens 50 +FlareRandStreakSharp 6 +ShadowType 1 +ShadowColor 0 0 0 +Plugin LightHandler 1 DistantLight +EndPlugin + +AddCamera +CameraName Camera +ShowCamera 1 -1 0.125490 0.878431 0.125490 +CameraMotion (unnamed) + 6 + 1 + -0.1 0 2 0 0 0 + 1 + 0.95 0 2 0 0 0 + 1 + -6.384 0 2 0 0 0 + 1 + 0 0 2 0 0 0 + 1 + 0 0 2 0 0 0 + 1 + 0 0 2 0 0 0 +Pre/PostBehavior 1 1 1 1 1 1 1 1 1 1 1 1 +PathAlignLookAhead 0.033 +PathAlignMaxLookSteps 10 +PathAlignReliableDist 0.001 +IKInitialState 0 +ZoomFactor 3.2 +ZoomType 1 +Resolution 1 +CustomSize 640 480 +PixelAspectRatio -1 +CustomPixelRatio 1 +MaskPosition 0 0 640 480 +MotionBlur 0 +MotionBlurPasses 1 +ShutterEfficiency 1 +Oversampling 0 +FieldRendering 0 +ApertureHeight 0.015 +DepthOfField 0 +FocalDistance 1 +LensFStop 4 +DiaphragmSides 0 +DiaphragmRotation 0 +AASamples 1 +Sampler 1 +Plugin CameraHandler 1 Perspective +EndPlugin + +SegmentMemory 32000000 +Antialiasing 0 +AntiAliasingLevel -1 +ReconstructionFilter 0 +AdaptiveSampling 0 + +SolidBackdrop 1 +BackdropColor 0 0 0 +ZenithColor 0 40 80 +SkyColor 120 180 240 +GroundColor 50 40 30 +NadirColor 100 80 60 +FogType 0 +FogMinDistance 0 +FogMaxDistance 1 +FogMinAmount 0 +FogMaxAmount 1 +FogColor 130 130 140 +BackdropFog 0 +VolumeClipDiscance 0.1 +DynamicRangeMin 0 +DynamicRangeLimit 1 +DitherIntensity 1 +AnimatedDither 0 + +RenderMode 2 +RayTraceEffects 0 +DepthBufferAA 0 +RenderLines 1 +RayRecursionLimit 16 +RayPrecision 6 +RayCutoff 0.01 +DataOverlayLabel +SaveRGB 0 +SaveAlpha 0 + +ViewConfiguration 0 +DefineView 0 +ViewType 7 +ViewLevel 5 +ViewAimpoint 0 0 0 +ViewDirection 0.3001966 -0.3141592 -0 +ViewZoomFactor 4 +ViewXRay 0 +ViewMBDofPreview 0 +ViewHeadlight 0 + +GridNumber 80 +GridSize 1 +CameraViewBG 0 +ShowMotionPath 1 +ShowFogRadius 0 +ShowFogEffect 0 +ShowFieldChart 0 +OverlayColor_fv 0 0 0 +MeshBackgroundGroup 1 diff --git a/test/models/LWS/move_x_oldformat_6.lws b/test/models/LWS/move_x_oldformat_6.lws new file mode 100644 index 000000000..ecafe3f7b --- /dev/null +++ b/test/models/LWS/move_x_oldformat_6.lws @@ -0,0 +1,447 @@ +LWSC +3 + +RenderRangeType 0 +FirstFrame 1 +LastFrame 60 +FrameStep 1 +RenderRangeObject 0 +RenderRangeArbitrary 1-60 +PreviewFirstFrame 0 +PreviewLastFrame 60 +PreviewFrameStep 1 +CurrentFrame 40 +FramesPerSecond 30 +ChangeScene 0 + +LoadObjectLayer 1 simple_cube.lwo +ShowObject 7 -1 0.376471 0.878431 0.941176 +Group 0 +ObjectMotion +NumChannels 9 +Channel 0 +{ Envelope + 3 + Key 0 0 0 0 0 0 0 2.0682507681379905 0 + Key 2.0691125392913814 0.66666666666666663 0 0 0 0 -1.1874328851699831 -1.1874328851699831 0 + Key -2.3748657703399658 1.3333333333333333 0 0 0 0 -4.4421274232050125 0 0 + Behaviors 1 1 +} +Channel 1 +{ Envelope + 1 + Key -0.040000002831220634 0 0 0 0 0 0 0 0 + Behaviors 1 1 +} +Channel 2 +{ Envelope + 1 + Key 0 0 0 0 0 0 0 0 0 + Behaviors 1 1 +} +Channel 3 +{ Envelope + 1 + Key 0 0 0 0 0 0 0 0 0 + Behaviors 1 1 +} +Channel 4 +{ Envelope + 1 + Key 0 0 0 0 0 0 0 0 0 + Behaviors 1 1 +} +Channel 5 +{ Envelope + 1 + Key 0 0 0 0 0 0 0 0 0 + Behaviors 1 1 +} +Channel 6 +{ Envelope + 1 + Key 0.97975808382034302 0 0 0 0 0 0 0 0 + Behaviors 1 1 +} +Channel 7 +{ Envelope + 1 + Key 0.88587331771850575 0 0 0 0 0 0 0 0 + Behaviors 1 1 +} +Channel 8 +{ Envelope + 1 + Key 0.95491594076156605 0 0 0 0 0 0 0 0 + Behaviors 1 1 +} + +PathAlignLookAhead 0.033 +PathAlignMaxLookSteps 10 +PathAlignReliableDist 0.001 +IKInitialState 0 +SubPatchLevel 3 3 +APSDisplay +{ APS + Version 1 + Method 0 + { VParm + { ObjectLevel + 0 + { VariantParameter + 3 + 0 + { ParameterValue + 3 + 0 + } + } + } + { PolygonLevel + 0 + { VariantParameter + 3 + 0 + { ParameterValue + 3 + 0 + } + } + } + { PolygonPixelSize + 0 + { VariantParameter + 3 + 0 + { ParameterValue + 256 + 0 + } + } + } + } +} +APSRender +{ APS + Version 1 + Method 0 + { VParm + { ObjectLevel + 0 + { VariantParameter + 3 + 0 + { ParameterValue + 3 + 0 + } + } + } + { PolygonLevel + 0 + { VariantParameter + 3 + 0 + { ParameterValue + 3 + 0 + } + } + } + { PolygonPixelSize + 0 + { VariantParameter + 3 + 0 + { ParameterValue + 256 + 0 + } + } + } + } +} +NodeDisplacement 0 +{ Nodal_Block + { Root + Location 0 0 + Zoom 1 + Disabled 1 + } + Version 1 + { Nodes + Server "Displacement" + { Tag + RealName "Displacement" + Name "Displacement" + Coordinates -10 -10 + Mode 1 + { Data + } + Preview "" + Comment "" + } + } + { Connections + } +} +NodeDisplacementOrder 0 +UseObjGI 0 +ObjGIRadiosityRays 64 +ObjGISecondaryBounceRays 16 +ObjGIRadiosityTolerance 0.292893 +ObjGIMinPixelSpacing 4.000000 +ObjGIMaxPixelSpacing 100.000000 +ShadowOptions 7 + +AmbientColor 1 1 1 +AmbientIntensity 0.05 +DoubleSidedAreaLights 1 +RadiosityType 2 +RadiosityInterpolated 1 +RadiosityTransparency 0 +RadiosityIntensity 1 +RadiosityTolerance 0.2928932 +RadiosityRays 64 +SecondaryBounceRays 16 +RadiosityMinPixelSpacing 4 +RadiosityMaxPixelSpacing 100 +RadiosityMultiplier 1 +RadiosityDirectionalRays 0 +RadiosityUseGradients 0 +RadiosityUseBehindTest 1 +BlurRadiosity 1 +RadiosityFlags 0 +RadiosityCacheModulus 1 +RadiosityCacheFilePath radiosity.cache +PixelFilterForceMT 0 + +AddLight +LightName Light +ShowLight 1 -1 0.941176 0.376471 0.941176 +LightMotion +NumChannels 9 +Channel 0 +{ Envelope + 1 + Key -2 0 0 0 0 0 0 0 0 + Behaviors 1 1 +} +Channel 1 +{ Envelope + 1 + Key 2 0 0 0 0 0 0 0 0 + Behaviors 1 1 +} +Channel 2 +{ Envelope + 1 + Key -2 0 0 0 0 0 0 0 0 + Behaviors 1 1 +} +Channel 3 +{ Envelope + 1 + Key 0.78539813999999986 0 0 0 0 0 0 0 0 + Behaviors 1 1 +} +Channel 4 +{ Envelope + 1 + Key 0.61086521999999999 0 0 0 0 0 0 0 0 + Behaviors 1 1 +} +Channel 5 +{ Envelope + 1 + Key 0 0 0 0 0 0 0 0 0 + Behaviors 1 1 +} +Channel 6 +{ Envelope + 1 + Key 1 0 0 0 0 0 0 0 0 + Behaviors 1 1 +} +Channel 7 +{ Envelope + 1 + Key 1 0 0 0 0 0 0 0 0 + Behaviors 1 1 +} +Channel 8 +{ Envelope + 1 + Key 1 0 0 0 0 0 0 0 0 + Behaviors 1 1 +} + +PathAlignLookAhead 0.033 +PathAlignMaxLookSteps 10 +PathAlignReliableDist 0.001 +IKInitialState 0 +LightColor 1 1 1 +LightIntensity 1 +AffectCaustics 1 +LightType 0 +LensFlare 0 +FlareIntensity 0.5 +FlareDissolve 0 +LensFlareFade 4 +LensFlareOptions 11 +FlareRingColor 0.3137 0.0784 0.0392 +FlareRingSize 0.22 +FlareRandStreakInt 0.03 +FlareRandStreakDens 50 +FlareRandStreakSharp 6 +ShadowType 1 +ShadowColor 0 0 0 +Plugin LightHandler 1 DistantLight +EndPlugin + +AddCamera +CameraName Camera +ShowCamera 1 -1 0.125490 0.878431 0.125490 +CameraMotion +NumChannels 6 +Channel 0 +{ Envelope + 1 + Key -0.10000002384185792 0 0 0 0 0 0 0 0 + Behaviors 1 1 +} +Channel 1 +{ Envelope + 1 + Key 0.94999998807907104 0 0 0 0 0 0 0 0 + Behaviors 1 1 +} +Channel 2 +{ Envelope + 1 + Key -6.384000301361084 0 0 0 0 0 0 0 0 + Behaviors 1 1 +} +Channel 3 +{ Envelope + 1 + Key 0 0 0 0 0 0 0 0 0 + Behaviors 1 1 +} +Channel 4 +{ Envelope + 1 + Key 0 0 0 0 0 0 0 0 0 + Behaviors 1 1 +} +Channel 5 +{ Envelope + 1 + Key 0 0 0 0 0 0 0 0 0 + Behaviors 1 1 +} + +PathAlignLookAhead 0.033 +PathAlignMaxLookSteps 10 +PathAlignReliableDist 0.001 +IKInitialState 0 +ZoomFactor 3.2 +ZoomType 1 +ResolutionMultiplier 1.0 +FrameSize 640 480 +PixelAspect 1 +MaskPosition 0 0 640 480 +MotionBlur 0 +MotionBlurPasses 1 +ShutterEfficiency 1 +Oversampling 0 +FieldRendering 0 +ApertureHeight 0.015 +DepthOfField 0 +FocalDistance 1 +LensFStop 4 +DiaphragmSides 0 +DiaphragmRotation 0 +AASamples 1 +Sampler 1 +UseGlobalResolution 0 +UseGlobalMask 0 +UseGlobalBlur 0 +Plugin CameraHandler 1 Perspective +EndPlugin + +GlobalFrameSize 640 480 +GlobalMultiplier 1.0 +GlobalFieldRendering 0 +GlobalMotionBlur 0 +GlobalMaskPosition 0 0 640 480 +GlobalFilmHeight 0.015 +GlobalPixelAspect 1 + +Antialiasing 0 +AntiAliasingLevel -1 +ReconstructionFilter 0 +AdaptiveSampling 0 + +SolidBackdrop 1 +BackdropColor 0 0 0 +ZenithColor 0 0.1569 0.3137 +SkyColor 0.4706 0.7059 0.9412 +GroundColor 0.1961 0.1569 0.1176 +NadirColor 0.3922 0.3137 0.2353 +FogType 0 +FogMinDistance 0 +FogMaxDistance 1 +FogMinAmount 0 +FogMaxAmount 1 +FogColor 0.5098 0.5098 0.549 +BackdropFog 0 +VolumeClipDiscance 0.1 +DynamicRangeMin 0 +DynamicRangeLimit 1 +DitherIntensity 1 +AnimatedDither 0 + +RenderMode 2 +RayTraceEffects 0 +DepthBufferAA 0 +RenderLines 1 +RayRecursionLimit 16 +RayPrecision 6 +RayCutoff 0.01 +DataOverlayLabel +SaveRGB 0 +SaveAlpha 0 + +ViewConfiguration 0 +DefineView 0 +ViewType 7 +ViewLevel 5 +ViewAimpoint 0 0 0 +ViewRotation -17.2 18 0 +ViewZoomFactor 4 +ViewXRay 0 +ViewMBDofPreview 0 +ViewHeadlight 0 + +GridNumber 80 +GridSize 1 +CameraViewBG 0 +ShowMotionPath 1 +ShowFogRadius 0 +ShowFogEffect 0 +ShowFieldChart 0 +OverlayColor_fv 0 0 0 +MeshBackgroundGroup 1 + +CurrentObject 0 +CurrentLight 0 +CurrentCamera 0 +GraphEditorData +{ GraphEd_Favorites +} +{ GE_Expression_Lib + 1 +} +ImageEditorData +NumberOfClips 0 diff --git a/test/models/LWS/move_x_post_constant.lws b/test/models/LWS/move_x_post_constant.lws new file mode 100644 index 000000000..f7fc47642 --- /dev/null +++ b/test/models/LWS/move_x_post_constant.lws @@ -0,0 +1,472 @@ +LWSC +5 + +RenderRangeType 0 +FirstFrame 1 +LastFrame 120 +FrameStep 1 +RenderRangeObject 0 +RenderRangeArbitrary 1-60 +PreviewFirstFrame 0 +PreviewLastFrame 120 +PreviewFrameStep 1 +CurrentFrame 0 +FramesPerSecond 30 +ChangeScene 0 + +LoadObjectLayer 1 10000000 simple_cube.lwo +ChangeObject 0 +ShowObject 7 -1 0.376471 0.878431 0.941176 +Group 0 +ObjectMotion +NumChannels 9 +Channel 0 +{ Envelope + 3 + Key 0 0 0 0 0 0 0 2.1372954575696919 0 + Key 2.1381859973436792 0.66666666666666663 0 0 0 0 -0.8400939672421186 -0.79808926888001264 0 + Key -1.6381832361221313 1.3 0 0 0 0 -3.7747136573003282 0 0 + Behaviors 1 1 +} +Channel 1 +{ Envelope + 1 + Key 0 0 0 0 0 0 0 0 0 + Behaviors 1 1 +} +Channel 2 +{ Envelope + 1 + Key 0 0 0 0 0 0 0 0 0 + Behaviors 1 1 +} +Channel 3 +{ Envelope + 1 + Key 0 0 0 0 0 0 0 0 0 + Behaviors 1 1 +} +Channel 4 +{ Envelope + 1 + Key 0 0 0 0 0 0 0 0 0 + Behaviors 1 1 +} +Channel 5 +{ Envelope + 1 + Key 0 0 0 0 0 0 0 0 0 + Behaviors 1 1 +} +Channel 6 +{ Envelope + 1 + Key 1 0 0 0 0 0 0 0 0 + Behaviors 1 1 +} +Channel 7 +{ Envelope + 1 + Key 1 0 0 0 0 0 0 0 0 + Behaviors 1 1 +} +Channel 8 +{ Envelope + 1 + Key 1 0 0 0 0 0 0 0 0 + Behaviors 1 1 +} +IKInitCustomFrame 0 +GoalStrength 1 +IKFKBlending 0 +IKSoftMin 0.25 +IKSoftMax 0.75 +CtrlPosItemBlend 1 +CtrlRotItemBlend 1 +CtrlScaleItemBlend 1 + +PathAlignLookAhead 0.033 +PathAlignMaxLookSteps 10 +PathAlignReliableDist 0.001 +IKInitialState 0 +SubPatchLevel 3 3 +APSDisplay +{ APS + Version 1 + Method 0 + { VParm + { ObjectLevel + 0 + { VariantParameter + 3 + 0 + { ParameterValue + 3 + 0 + } + } + } + { PolygonLevel + 0 + { VariantParameter + 3 + 0 + { ParameterValue + 3 + 0 + } + } + } + { PolygonPixelSize + 0 + { VariantParameter + 3 + 0 + { ParameterValue + 256 + 0 + } + } + } + } +} +APSRender +{ APS + Version 1 + Method 0 + { VParm + { ObjectLevel + 0 + { VariantParameter + 3 + 0 + { ParameterValue + 3 + 0 + } + } + } + { PolygonLevel + 0 + { VariantParameter + 3 + 0 + { ParameterValue + 3 + 0 + } + } + } + { PolygonPixelSize + 0 + { VariantParameter + 3 + 0 + { ParameterValue + 256 + 0 + } + } + } + } +} +NodeDisplacement 0 +{ Nodal_Block + { Root + Location 0 0 + Zoom 1 + Disabled 1 + } + Version 1 + { Nodes + Server "Displacement" + { Tag + RealName "Displacement" + Name "Displacement" + Coordinates -10 -10 + Mode 1 + { Data + } + Preview "" + Comment "" + } + } + { Connections + } +} +NodeDisplacementOrder 0 +UseObjGI 0 +ObjGIRadiosityRays 64 +ObjGISecondaryBounceRays 16 +ObjGIRadiosityTolerance 0.292893 +ObjGIMinPixelSpacing 4.000000 +ObjGIMaxPixelSpacing 100.000000 +ShadowOptions 7 + +AmbientColor 1 1 1 +AmbientIntensity 0.05 +DoubleSidedAreaLights 1 +RadiosityType 2 +RadiosityInterpolated 1 +RadiosityTransparency 0 +RadiosityIntensity 1 +RadiosityTolerance 0.2928932 +RadiosityRays 64 +SecondaryBounceRays 16 +RadiosityMinPixelSpacing 4 +RadiosityMaxPixelSpacing 100 +RadiosityMultiplier 1 +RadiosityDirectionalRays 0 +RadiosityUseGradients 0 +RadiosityUseBehindTest 1 +BlurRadiosity 1 +RadiosityFlags 0 +RadiosityCacheModulus 1 +RadiosityCacheFilePath radiosity.cache +PixelFilterForceMT 0 + +AddLight 20000000 +LightName Light +ShowLight 1 -1 0.941176 0.376471 0.941176 +LightMotion +NumChannels 9 +Channel 0 +{ Envelope + 1 + Key -2 0 0 0 0 0 0 0 0 + Behaviors 1 1 +} +Channel 1 +{ Envelope + 1 + Key 2 0 0 0 0 0 0 0 0 + Behaviors 1 1 +} +Channel 2 +{ Envelope + 1 + Key -2 0 0 0 0 0 0 0 0 + Behaviors 1 1 +} +Channel 3 +{ Envelope + 1 + Key 0.78539813999999997 0 0 0 0 0 0 0 0 + Behaviors 1 1 +} +Channel 4 +{ Envelope + 1 + Key 0.61086521999999999 0 0 0 0 0 0 0 0 + Behaviors 1 1 +} +Channel 5 +{ Envelope + 1 + Key 0 0 0 0 0 0 0 0 0 + Behaviors 1 1 +} +Channel 6 +{ Envelope + 1 + Key 1 0 0 0 0 0 0 0 0 + Behaviors 1 1 +} +Channel 7 +{ Envelope + 1 + Key 1 0 0 0 0 0 0 0 0 + Behaviors 1 1 +} +Channel 8 +{ Envelope + 1 + Key 1 0 0 0 0 0 0 0 0 + Behaviors 1 1 +} +IKInitCustomFrame 0 +GoalStrength 1 +IKFKBlending 0 +IKSoftMin 0.25 +IKSoftMax 0.75 +CtrlPosItemBlend 1 +CtrlRotItemBlend 1 +CtrlScaleItemBlend 1 + +PathAlignLookAhead 0.033 +PathAlignMaxLookSteps 10 +PathAlignReliableDist 0.001 +IKInitialState 0 +LightColor 1 1 1 +LightIntensity 1 +AffectCaustics 1 +LightType 0 +LensFlare 0 +FlareIntensity 0.5 +FlareDissolve 0 +LensFlareFade 4 +LensFlareOptions 11 +FlareRingColor 0.3137 0.0784 0.0392 +FlareRingSize 0.22 +FlareRandStreakInt 0.03 +FlareRandStreakDens 50 +FlareRandStreakSharp 6 +ShadowType 1 +ShadowColor 0 0 0 +Plugin LightHandler 1 DistantLight +EndPlugin + +AddCamera 30000000 +CameraName Camera +ShowCamera 1 -1 0.125490 0.878431 0.125490 +CameraMotion +NumChannels 6 +Channel 0 +{ Envelope + 1 + Key -0.10000002384185791 0 0 0 0 0 0 0 0 + Behaviors 1 1 +} +Channel 1 +{ Envelope + 1 + Key 0.94999998807907104 0 0 0 0 0 0 0 0 + Behaviors 1 1 +} +Channel 2 +{ Envelope + 1 + Key -6.384000301361084 0 0 0 0 0 0 0 0 + Behaviors 1 1 +} +Channel 3 +{ Envelope + 1 + Key 0 0 0 0 0 0 0 0 0 + Behaviors 1 1 +} +Channel 4 +{ Envelope + 1 + Key 0 0 0 0 0 0 0 0 0 + Behaviors 1 1 +} +Channel 5 +{ Envelope + 1 + Key 0 0 0 0 0 0 0 0 0 + Behaviors 1 1 +} +IKInitCustomFrame 0 +GoalStrength 1 +IKFKBlending 0 +IKSoftMin 0.25 +IKSoftMax 0.75 +CtrlPosItemBlend 1 +CtrlRotItemBlend 1 +CtrlScaleItemBlend 1 + +PathAlignLookAhead 0.033 +PathAlignMaxLookSteps 10 +PathAlignReliableDist 0.001 +IKInitialState 0 +ZoomFactor 3.2 +ZoomType 1 +ResolutionMultiplier 1.0 +FrameSize 640 480 +PixelAspect 1 +MaskPosition 0 0 640 480 +MotionBlur 0 +MotionBlurPasses 1 +ShutterEfficiency 1 +Oversampling 0 +FieldRendering 0 +ApertureHeight 0.015 +DepthOfField 0 +FocalDistance 1 +LensFStop 4 +DiaphragmSides 0 +DiaphragmRotation 0 +AASamples 1 +Sampler 1 +UseGlobalResolution 0 +UseGlobalMask 0 +UseGlobalBlur 0 +Plugin CameraHandler 1 Perspective +EndPlugin + +GlobalFrameSize 640 480 +GlobalMultiplier 1.0 +GlobalFieldRendering 0 +GlobalMotionBlur 0 +GlobalMaskPosition 0 0 640 480 +GlobalFilmHeight 0.015 +GlobalPixelAspect 1 + +Antialiasing 0 +AntiAliasingLevel -1 +ReconstructionFilter 0 +AdaptiveSampling 0 + +SolidBackdrop 1 +BackdropColor 0 0 0 +ZenithColor 0 0.1569 0.3137 +SkyColor 0.4706 0.7059 0.9412 +GroundColor 0.1961 0.1569 0.1176 +NadirColor 0.3922 0.3137 0.2353 +FogType 0 +FogMinDistance 0 +FogMaxDistance 1 +FogMinAmount 0 +FogMaxAmount 1 +FogColor 0.5098 0.5098 0.549 +BackdropFog 0 +VolumeClipDiscance 0.1 +DynamicRangeMin 0 +DynamicRangeLimit 1 +DitherIntensity 1 +AnimatedDither 0 + +RenderMode 2 +RayTraceEffects 0 +DepthBufferAA 0 +RenderLines 1 +RayRecursionLimit 16 +RayPrecision 6 +RayCutoff 0.01 +DataOverlayLabel +SaveRGB 0 +SaveAlpha 0 + +ViewConfiguration 0 +DefineView 0 +ViewType 7 +ViewLevel 5 +ViewAimpoint 0 0 0 +ViewRotation -17.2 18 0 +ViewZoomFactor 4 +ViewXRay 0 +ViewMBDofPreview 0 +ViewHeadlight 0 + +GridNumber 80 +GridSize 1 +CameraViewBG 0 +ShowMotionPath 1 +ShowFogRadius 0 +ShowFogEffect 0 +ShowFieldChart 0 +OverlayColor_fv 0 0 0 +MeshBackgroundGroup 1 + +CurrentObject 0 +CurrentLight 0 +CurrentCamera 0 +GraphEditorData +{ GraphEd_Favorites +} +{ GE_Expression_Lib + 1 +} +ImageEditorData +NumberOfClips 0 diff --git a/test/models/LWS/move_x_post_linear.lws b/test/models/LWS/move_x_post_linear.lws new file mode 100644 index 000000000..11ea23f96 --- /dev/null +++ b/test/models/LWS/move_x_post_linear.lws @@ -0,0 +1,472 @@ +LWSC +5 + +RenderRangeType 0 +FirstFrame 1 +LastFrame 120 +FrameStep 1 +RenderRangeObject 0 +RenderRangeArbitrary 1-60 +PreviewFirstFrame 0 +PreviewLastFrame 120 +PreviewFrameStep 1 +CurrentFrame 5 +FramesPerSecond 30 +ChangeScene 0 + +LoadObjectLayer 1 10000000 simple_cube.lwo +ChangeObject 0 +ShowObject 7 -1 0.376471 0.878431 0.941176 +Group 0 +ObjectMotion +NumChannels 9 +Channel 0 +{ Envelope + 3 + Key 0 0 0 0 0 0 0 2.1372954575696919 0 + Key 2.1381859973436792 0.66666666666666663 0 0 0 0 -0.8400939672421186 -0.79808926888001264 0 + Key -1.6381832361221313 1.3 0 0 0 0 -3.7747136573003282 0 0 + Behaviors 1 5 +} +Channel 1 +{ Envelope + 1 + Key 0 0 0 0 0 0 0 0 0 + Behaviors 1 1 +} +Channel 2 +{ Envelope + 1 + Key 0 0 0 0 0 0 0 0 0 + Behaviors 1 1 +} +Channel 3 +{ Envelope + 1 + Key 0 0 0 0 0 0 0 0 0 + Behaviors 1 1 +} +Channel 4 +{ Envelope + 1 + Key 0 0 0 0 0 0 0 0 0 + Behaviors 1 1 +} +Channel 5 +{ Envelope + 1 + Key 0 0 0 0 0 0 0 0 0 + Behaviors 1 1 +} +Channel 6 +{ Envelope + 1 + Key 1 0 0 0 0 0 0 0 0 + Behaviors 1 1 +} +Channel 7 +{ Envelope + 1 + Key 1 0 0 0 0 0 0 0 0 + Behaviors 1 1 +} +Channel 8 +{ Envelope + 1 + Key 1 0 0 0 0 0 0 0 0 + Behaviors 1 1 +} +IKInitCustomFrame 0 +GoalStrength 1 +IKFKBlending 0 +IKSoftMin 0.25 +IKSoftMax 0.75 +CtrlPosItemBlend 1 +CtrlRotItemBlend 1 +CtrlScaleItemBlend 1 + +PathAlignLookAhead 0.033 +PathAlignMaxLookSteps 10 +PathAlignReliableDist 0.001 +IKInitialState 0 +SubPatchLevel 3 3 +APSDisplay +{ APS + Version 1 + Method 0 + { VParm + { ObjectLevel + 0 + { VariantParameter + 3 + 0 + { ParameterValue + 3 + 0 + } + } + } + { PolygonLevel + 0 + { VariantParameter + 3 + 0 + { ParameterValue + 3 + 0 + } + } + } + { PolygonPixelSize + 0 + { VariantParameter + 3 + 0 + { ParameterValue + 256 + 0 + } + } + } + } +} +APSRender +{ APS + Version 1 + Method 0 + { VParm + { ObjectLevel + 0 + { VariantParameter + 3 + 0 + { ParameterValue + 3 + 0 + } + } + } + { PolygonLevel + 0 + { VariantParameter + 3 + 0 + { ParameterValue + 3 + 0 + } + } + } + { PolygonPixelSize + 0 + { VariantParameter + 3 + 0 + { ParameterValue + 256 + 0 + } + } + } + } +} +NodeDisplacement 0 +{ Nodal_Block + { Root + Location 0 0 + Zoom 1 + Disabled 1 + } + Version 1 + { Nodes + Server "Displacement" + { Tag + RealName "Displacement" + Name "Displacement" + Coordinates -10 -10 + Mode 1 + { Data + } + Preview "" + Comment "" + } + } + { Connections + } +} +NodeDisplacementOrder 0 +UseObjGI 0 +ObjGIRadiosityRays 64 +ObjGISecondaryBounceRays 16 +ObjGIRadiosityTolerance 0.292893 +ObjGIMinPixelSpacing 4.000000 +ObjGIMaxPixelSpacing 100.000000 +ShadowOptions 7 + +AmbientColor 1 1 1 +AmbientIntensity 0.05 +DoubleSidedAreaLights 1 +RadiosityType 2 +RadiosityInterpolated 1 +RadiosityTransparency 0 +RadiosityIntensity 1 +RadiosityTolerance 0.2928932 +RadiosityRays 64 +SecondaryBounceRays 16 +RadiosityMinPixelSpacing 4 +RadiosityMaxPixelSpacing 100 +RadiosityMultiplier 1 +RadiosityDirectionalRays 0 +RadiosityUseGradients 0 +RadiosityUseBehindTest 1 +BlurRadiosity 1 +RadiosityFlags 0 +RadiosityCacheModulus 1 +RadiosityCacheFilePath radiosity.cache +PixelFilterForceMT 0 + +AddLight 20000000 +LightName Light +ShowLight 1 -1 0.941176 0.376471 0.941176 +LightMotion +NumChannels 9 +Channel 0 +{ Envelope + 1 + Key -2 0 0 0 0 0 0 0 0 + Behaviors 1 1 +} +Channel 1 +{ Envelope + 1 + Key 2 0 0 0 0 0 0 0 0 + Behaviors 1 1 +} +Channel 2 +{ Envelope + 1 + Key -2 0 0 0 0 0 0 0 0 + Behaviors 1 1 +} +Channel 3 +{ Envelope + 1 + Key 0.78539813999999997 0 0 0 0 0 0 0 0 + Behaviors 1 1 +} +Channel 4 +{ Envelope + 1 + Key 0.61086521999999999 0 0 0 0 0 0 0 0 + Behaviors 1 1 +} +Channel 5 +{ Envelope + 1 + Key 0 0 0 0 0 0 0 0 0 + Behaviors 1 1 +} +Channel 6 +{ Envelope + 1 + Key 1 0 0 0 0 0 0 0 0 + Behaviors 1 1 +} +Channel 7 +{ Envelope + 1 + Key 1 0 0 0 0 0 0 0 0 + Behaviors 1 1 +} +Channel 8 +{ Envelope + 1 + Key 1 0 0 0 0 0 0 0 0 + Behaviors 1 1 +} +IKInitCustomFrame 0 +GoalStrength 1 +IKFKBlending 0 +IKSoftMin 0.25 +IKSoftMax 0.75 +CtrlPosItemBlend 1 +CtrlRotItemBlend 1 +CtrlScaleItemBlend 1 + +PathAlignLookAhead 0.033 +PathAlignMaxLookSteps 10 +PathAlignReliableDist 0.001 +IKInitialState 0 +LightColor 1 1 1 +LightIntensity 1 +AffectCaustics 1 +LightType 0 +LensFlare 0 +FlareIntensity 0.5 +FlareDissolve 0 +LensFlareFade 4 +LensFlareOptions 11 +FlareRingColor 0.3137 0.0784 0.0392 +FlareRingSize 0.22 +FlareRandStreakInt 0.03 +FlareRandStreakDens 50 +FlareRandStreakSharp 6 +ShadowType 1 +ShadowColor 0 0 0 +Plugin LightHandler 1 DistantLight +EndPlugin + +AddCamera 30000000 +CameraName Camera +ShowCamera 1 -1 0.125490 0.878431 0.125490 +CameraMotion +NumChannels 6 +Channel 0 +{ Envelope + 1 + Key -0.10000002384185791 0 0 0 0 0 0 0 0 + Behaviors 1 1 +} +Channel 1 +{ Envelope + 1 + Key 0.94999998807907104 0 0 0 0 0 0 0 0 + Behaviors 1 1 +} +Channel 2 +{ Envelope + 1 + Key -6.384000301361084 0 0 0 0 0 0 0 0 + Behaviors 1 1 +} +Channel 3 +{ Envelope + 1 + Key 0 0 0 0 0 0 0 0 0 + Behaviors 1 1 +} +Channel 4 +{ Envelope + 1 + Key 0 0 0 0 0 0 0 0 0 + Behaviors 1 1 +} +Channel 5 +{ Envelope + 1 + Key 0 0 0 0 0 0 0 0 0 + Behaviors 1 1 +} +IKInitCustomFrame 0 +GoalStrength 1 +IKFKBlending 0 +IKSoftMin 0.25 +IKSoftMax 0.75 +CtrlPosItemBlend 1 +CtrlRotItemBlend 1 +CtrlScaleItemBlend 1 + +PathAlignLookAhead 0.033 +PathAlignMaxLookSteps 10 +PathAlignReliableDist 0.001 +IKInitialState 0 +ZoomFactor 3.2 +ZoomType 1 +ResolutionMultiplier 1.0 +FrameSize 640 480 +PixelAspect 1 +MaskPosition 0 0 640 480 +MotionBlur 0 +MotionBlurPasses 1 +ShutterEfficiency 1 +Oversampling 0 +FieldRendering 0 +ApertureHeight 0.015 +DepthOfField 0 +FocalDistance 1 +LensFStop 4 +DiaphragmSides 0 +DiaphragmRotation 0 +AASamples 1 +Sampler 1 +UseGlobalResolution 0 +UseGlobalMask 0 +UseGlobalBlur 0 +Plugin CameraHandler 1 Perspective +EndPlugin + +GlobalFrameSize 640 480 +GlobalMultiplier 1.0 +GlobalFieldRendering 0 +GlobalMotionBlur 0 +GlobalMaskPosition 0 0 640 480 +GlobalFilmHeight 0.015 +GlobalPixelAspect 1 + +Antialiasing 0 +AntiAliasingLevel -1 +ReconstructionFilter 0 +AdaptiveSampling 0 + +SolidBackdrop 1 +BackdropColor 0 0 0 +ZenithColor 0 0.1569 0.3137 +SkyColor 0.4706 0.7059 0.9412 +GroundColor 0.1961 0.1569 0.1176 +NadirColor 0.3922 0.3137 0.2353 +FogType 0 +FogMinDistance 0 +FogMaxDistance 1 +FogMinAmount 0 +FogMaxAmount 1 +FogColor 0.5098 0.5098 0.549 +BackdropFog 0 +VolumeClipDiscance 0.1 +DynamicRangeMin 0 +DynamicRangeLimit 1 +DitherIntensity 1 +AnimatedDither 0 + +RenderMode 2 +RayTraceEffects 0 +DepthBufferAA 0 +RenderLines 1 +RayRecursionLimit 16 +RayPrecision 6 +RayCutoff 0.01 +DataOverlayLabel +SaveRGB 0 +SaveAlpha 0 + +ViewConfiguration 0 +DefineView 0 +ViewType 7 +ViewLevel 5 +ViewAimpoint 0 0 0 +ViewRotation -17.2 18 0 +ViewZoomFactor 4 +ViewXRay 0 +ViewMBDofPreview 0 +ViewHeadlight 0 + +GridNumber 80 +GridSize 1 +CameraViewBG 0 +ShowMotionPath 1 +ShowFogRadius 0 +ShowFogEffect 0 +ShowFieldChart 0 +OverlayColor_fv 0 0 0 +MeshBackgroundGroup 1 + +CurrentObject 0 +CurrentLight 0 +CurrentCamera 0 +GraphEditorData +{ GraphEd_Favorites +} +{ GE_Expression_Lib + 1 +} +ImageEditorData +NumberOfClips 0 diff --git a/test/models/LWS/move_x_post_offset_repeat.lws b/test/models/LWS/move_x_post_offset_repeat.lws new file mode 100644 index 000000000..1bb4c8f90 --- /dev/null +++ b/test/models/LWS/move_x_post_offset_repeat.lws @@ -0,0 +1,472 @@ +LWSC +5 + +RenderRangeType 0 +FirstFrame 1 +LastFrame 120 +FrameStep 1 +RenderRangeObject 0 +RenderRangeArbitrary 1-60 +PreviewFirstFrame 0 +PreviewLastFrame 120 +PreviewFrameStep 1 +CurrentFrame 0 +FramesPerSecond 30 +ChangeScene 0 + +LoadObjectLayer 1 10000000 simple_cube.lwo +ChangeObject 0 +ShowObject 7 -1 0.376471 0.878431 0.941176 +Group 0 +ObjectMotion +NumChannels 9 +Channel 0 +{ Envelope + 3 + Key 0 0 0 0 0 0 0 2.1372954575696919 0 + Key 2.1381859973436792 0.66666666666666663 0 0 0 0 -0.8400939672421186 -0.79808926888001264 0 + Key -1.6381832361221313 1.3 0 0 0 0 -3.7747136573003282 0 0 + Behaviors 1 4 +} +Channel 1 +{ Envelope + 1 + Key 0 0 0 0 0 0 0 0 0 + Behaviors 1 1 +} +Channel 2 +{ Envelope + 1 + Key 0 0 0 0 0 0 0 0 0 + Behaviors 1 1 +} +Channel 3 +{ Envelope + 1 + Key 0 0 0 0 0 0 0 0 0 + Behaviors 1 1 +} +Channel 4 +{ Envelope + 1 + Key 0 0 0 0 0 0 0 0 0 + Behaviors 1 1 +} +Channel 5 +{ Envelope + 1 + Key 0 0 0 0 0 0 0 0 0 + Behaviors 1 1 +} +Channel 6 +{ Envelope + 1 + Key 1 0 0 0 0 0 0 0 0 + Behaviors 1 1 +} +Channel 7 +{ Envelope + 1 + Key 1 0 0 0 0 0 0 0 0 + Behaviors 1 1 +} +Channel 8 +{ Envelope + 1 + Key 1 0 0 0 0 0 0 0 0 + Behaviors 1 1 +} +IKInitCustomFrame 0 +GoalStrength 1 +IKFKBlending 0 +IKSoftMin 0.25 +IKSoftMax 0.75 +CtrlPosItemBlend 1 +CtrlRotItemBlend 1 +CtrlScaleItemBlend 1 + +PathAlignLookAhead 0.033 +PathAlignMaxLookSteps 10 +PathAlignReliableDist 0.001 +IKInitialState 0 +SubPatchLevel 3 3 +APSDisplay +{ APS + Version 1 + Method 0 + { VParm + { ObjectLevel + 0 + { VariantParameter + 3 + 0 + { ParameterValue + 3 + 0 + } + } + } + { PolygonLevel + 0 + { VariantParameter + 3 + 0 + { ParameterValue + 3 + 0 + } + } + } + { PolygonPixelSize + 0 + { VariantParameter + 3 + 0 + { ParameterValue + 256 + 0 + } + } + } + } +} +APSRender +{ APS + Version 1 + Method 0 + { VParm + { ObjectLevel + 0 + { VariantParameter + 3 + 0 + { ParameterValue + 3 + 0 + } + } + } + { PolygonLevel + 0 + { VariantParameter + 3 + 0 + { ParameterValue + 3 + 0 + } + } + } + { PolygonPixelSize + 0 + { VariantParameter + 3 + 0 + { ParameterValue + 256 + 0 + } + } + } + } +} +NodeDisplacement 0 +{ Nodal_Block + { Root + Location 0 0 + Zoom 1 + Disabled 1 + } + Version 1 + { Nodes + Server "Displacement" + { Tag + RealName "Displacement" + Name "Displacement" + Coordinates -10 -10 + Mode 1 + { Data + } + Preview "" + Comment "" + } + } + { Connections + } +} +NodeDisplacementOrder 0 +UseObjGI 0 +ObjGIRadiosityRays 64 +ObjGISecondaryBounceRays 16 +ObjGIRadiosityTolerance 0.292893 +ObjGIMinPixelSpacing 4.000000 +ObjGIMaxPixelSpacing 100.000000 +ShadowOptions 7 + +AmbientColor 1 1 1 +AmbientIntensity 0.05 +DoubleSidedAreaLights 1 +RadiosityType 2 +RadiosityInterpolated 1 +RadiosityTransparency 0 +RadiosityIntensity 1 +RadiosityTolerance 0.2928932 +RadiosityRays 64 +SecondaryBounceRays 16 +RadiosityMinPixelSpacing 4 +RadiosityMaxPixelSpacing 100 +RadiosityMultiplier 1 +RadiosityDirectionalRays 0 +RadiosityUseGradients 0 +RadiosityUseBehindTest 1 +BlurRadiosity 1 +RadiosityFlags 0 +RadiosityCacheModulus 1 +RadiosityCacheFilePath radiosity.cache +PixelFilterForceMT 0 + +AddLight 20000000 +LightName Light +ShowLight 1 -1 0.941176 0.376471 0.941176 +LightMotion +NumChannels 9 +Channel 0 +{ Envelope + 1 + Key -2 0 0 0 0 0 0 0 0 + Behaviors 1 1 +} +Channel 1 +{ Envelope + 1 + Key 2 0 0 0 0 0 0 0 0 + Behaviors 1 1 +} +Channel 2 +{ Envelope + 1 + Key -2 0 0 0 0 0 0 0 0 + Behaviors 1 1 +} +Channel 3 +{ Envelope + 1 + Key 0.78539813999999997 0 0 0 0 0 0 0 0 + Behaviors 1 1 +} +Channel 4 +{ Envelope + 1 + Key 0.61086521999999999 0 0 0 0 0 0 0 0 + Behaviors 1 1 +} +Channel 5 +{ Envelope + 1 + Key 0 0 0 0 0 0 0 0 0 + Behaviors 1 1 +} +Channel 6 +{ Envelope + 1 + Key 1 0 0 0 0 0 0 0 0 + Behaviors 1 1 +} +Channel 7 +{ Envelope + 1 + Key 1 0 0 0 0 0 0 0 0 + Behaviors 1 1 +} +Channel 8 +{ Envelope + 1 + Key 1 0 0 0 0 0 0 0 0 + Behaviors 1 1 +} +IKInitCustomFrame 0 +GoalStrength 1 +IKFKBlending 0 +IKSoftMin 0.25 +IKSoftMax 0.75 +CtrlPosItemBlend 1 +CtrlRotItemBlend 1 +CtrlScaleItemBlend 1 + +PathAlignLookAhead 0.033 +PathAlignMaxLookSteps 10 +PathAlignReliableDist 0.001 +IKInitialState 0 +LightColor 1 1 1 +LightIntensity 1 +AffectCaustics 1 +LightType 0 +LensFlare 0 +FlareIntensity 0.5 +FlareDissolve 0 +LensFlareFade 4 +LensFlareOptions 11 +FlareRingColor 0.3137 0.0784 0.0392 +FlareRingSize 0.22 +FlareRandStreakInt 0.03 +FlareRandStreakDens 50 +FlareRandStreakSharp 6 +ShadowType 1 +ShadowColor 0 0 0 +Plugin LightHandler 1 DistantLight +EndPlugin + +AddCamera 30000000 +CameraName Camera +ShowCamera 1 -1 0.125490 0.878431 0.125490 +CameraMotion +NumChannels 6 +Channel 0 +{ Envelope + 1 + Key -0.10000002384185791 0 0 0 0 0 0 0 0 + Behaviors 1 1 +} +Channel 1 +{ Envelope + 1 + Key 0.94999998807907104 0 0 0 0 0 0 0 0 + Behaviors 1 1 +} +Channel 2 +{ Envelope + 1 + Key -6.384000301361084 0 0 0 0 0 0 0 0 + Behaviors 1 1 +} +Channel 3 +{ Envelope + 1 + Key 0 0 0 0 0 0 0 0 0 + Behaviors 1 1 +} +Channel 4 +{ Envelope + 1 + Key 0 0 0 0 0 0 0 0 0 + Behaviors 1 1 +} +Channel 5 +{ Envelope + 1 + Key 0 0 0 0 0 0 0 0 0 + Behaviors 1 1 +} +IKInitCustomFrame 0 +GoalStrength 1 +IKFKBlending 0 +IKSoftMin 0.25 +IKSoftMax 0.75 +CtrlPosItemBlend 1 +CtrlRotItemBlend 1 +CtrlScaleItemBlend 1 + +PathAlignLookAhead 0.033 +PathAlignMaxLookSteps 10 +PathAlignReliableDist 0.001 +IKInitialState 0 +ZoomFactor 3.2 +ZoomType 1 +ResolutionMultiplier 1.0 +FrameSize 640 480 +PixelAspect 1 +MaskPosition 0 0 640 480 +MotionBlur 0 +MotionBlurPasses 1 +ShutterEfficiency 1 +Oversampling 0 +FieldRendering 0 +ApertureHeight 0.015 +DepthOfField 0 +FocalDistance 1 +LensFStop 4 +DiaphragmSides 0 +DiaphragmRotation 0 +AASamples 1 +Sampler 1 +UseGlobalResolution 0 +UseGlobalMask 0 +UseGlobalBlur 0 +Plugin CameraHandler 1 Perspective +EndPlugin + +GlobalFrameSize 640 480 +GlobalMultiplier 1.0 +GlobalFieldRendering 0 +GlobalMotionBlur 0 +GlobalMaskPosition 0 0 640 480 +GlobalFilmHeight 0.015 +GlobalPixelAspect 1 + +Antialiasing 0 +AntiAliasingLevel -1 +ReconstructionFilter 0 +AdaptiveSampling 0 + +SolidBackdrop 1 +BackdropColor 0 0 0 +ZenithColor 0 0.1569 0.3137 +SkyColor 0.4706 0.7059 0.9412 +GroundColor 0.1961 0.1569 0.1176 +NadirColor 0.3922 0.3137 0.2353 +FogType 0 +FogMinDistance 0 +FogMaxDistance 1 +FogMinAmount 0 +FogMaxAmount 1 +FogColor 0.5098 0.5098 0.549 +BackdropFog 0 +VolumeClipDiscance 0.1 +DynamicRangeMin 0 +DynamicRangeLimit 1 +DitherIntensity 1 +AnimatedDither 0 + +RenderMode 2 +RayTraceEffects 0 +DepthBufferAA 0 +RenderLines 1 +RayRecursionLimit 16 +RayPrecision 6 +RayCutoff 0.01 +DataOverlayLabel +SaveRGB 0 +SaveAlpha 0 + +ViewConfiguration 0 +DefineView 0 +ViewType 7 +ViewLevel 5 +ViewAimpoint 0 0 0 +ViewRotation -17.2 18 0 +ViewZoomFactor 4 +ViewXRay 0 +ViewMBDofPreview 0 +ViewHeadlight 0 + +GridNumber 80 +GridSize 1 +CameraViewBG 0 +ShowMotionPath 1 +ShowFogRadius 0 +ShowFogEffect 0 +ShowFieldChart 0 +OverlayColor_fv 0 0 0 +MeshBackgroundGroup 1 + +CurrentObject 0 +CurrentLight 0 +CurrentCamera 0 +GraphEditorData +{ GraphEd_Favorites +} +{ GE_Expression_Lib + 1 +} +ImageEditorData +NumberOfClips 0 diff --git a/test/models/LWS/move_x_post_repeat.lws b/test/models/LWS/move_x_post_repeat.lws new file mode 100644 index 000000000..c5db40ae2 --- /dev/null +++ b/test/models/LWS/move_x_post_repeat.lws @@ -0,0 +1,472 @@ +LWSC +5 + +RenderRangeType 0 +FirstFrame 1 +LastFrame 120 +FrameStep 1 +RenderRangeObject 0 +RenderRangeArbitrary 1-60 +PreviewFirstFrame 0 +PreviewLastFrame 120 +PreviewFrameStep 1 +CurrentFrame 120 +FramesPerSecond 30 +ChangeScene 0 + +LoadObjectLayer 1 10000000 simple_cube.lwo +ChangeObject 0 +ShowObject 7 -1 0.376471 0.878431 0.941176 +Group 0 +ObjectMotion +NumChannels 9 +Channel 0 +{ Envelope + 3 + Key 0 0 0 0 0 0 0 2.1372954575696919 0 + Key 2.1381859973436792 0.66666666666666663 0 0 0 0 -0.8400939672421186 -0.79808926888001264 0 + Key -1.6381832361221313 1.3 0 0 0 0 -3.7747136573003282 0 0 + Behaviors 1 2 +} +Channel 1 +{ Envelope + 1 + Key 0 0 0 0 0 0 0 0 0 + Behaviors 1 1 +} +Channel 2 +{ Envelope + 1 + Key 0 0 0 0 0 0 0 0 0 + Behaviors 1 1 +} +Channel 3 +{ Envelope + 1 + Key 0 0 0 0 0 0 0 0 0 + Behaviors 1 1 +} +Channel 4 +{ Envelope + 1 + Key 0 0 0 0 0 0 0 0 0 + Behaviors 1 1 +} +Channel 5 +{ Envelope + 1 + Key 0 0 0 0 0 0 0 0 0 + Behaviors 1 1 +} +Channel 6 +{ Envelope + 1 + Key 1 0 0 0 0 0 0 0 0 + Behaviors 1 1 +} +Channel 7 +{ Envelope + 1 + Key 1 0 0 0 0 0 0 0 0 + Behaviors 1 1 +} +Channel 8 +{ Envelope + 1 + Key 1 0 0 0 0 0 0 0 0 + Behaviors 1 1 +} +IKInitCustomFrame 0 +GoalStrength 1 +IKFKBlending 0 +IKSoftMin 0.25 +IKSoftMax 0.75 +CtrlPosItemBlend 1 +CtrlRotItemBlend 1 +CtrlScaleItemBlend 1 + +PathAlignLookAhead 0.033 +PathAlignMaxLookSteps 10 +PathAlignReliableDist 0.001 +IKInitialState 0 +SubPatchLevel 3 3 +APSDisplay +{ APS + Version 1 + Method 0 + { VParm + { ObjectLevel + 0 + { VariantParameter + 3 + 0 + { ParameterValue + 3 + 0 + } + } + } + { PolygonLevel + 0 + { VariantParameter + 3 + 0 + { ParameterValue + 3 + 0 + } + } + } + { PolygonPixelSize + 0 + { VariantParameter + 3 + 0 + { ParameterValue + 256 + 0 + } + } + } + } +} +APSRender +{ APS + Version 1 + Method 0 + { VParm + { ObjectLevel + 0 + { VariantParameter + 3 + 0 + { ParameterValue + 3 + 0 + } + } + } + { PolygonLevel + 0 + { VariantParameter + 3 + 0 + { ParameterValue + 3 + 0 + } + } + } + { PolygonPixelSize + 0 + { VariantParameter + 3 + 0 + { ParameterValue + 256 + 0 + } + } + } + } +} +NodeDisplacement 0 +{ Nodal_Block + { Root + Location 0 0 + Zoom 1 + Disabled 1 + } + Version 1 + { Nodes + Server "Displacement" + { Tag + RealName "Displacement" + Name "Displacement" + Coordinates -10 -10 + Mode 1 + { Data + } + Preview "" + Comment "" + } + } + { Connections + } +} +NodeDisplacementOrder 0 +UseObjGI 0 +ObjGIRadiosityRays 64 +ObjGISecondaryBounceRays 16 +ObjGIRadiosityTolerance 0.292893 +ObjGIMinPixelSpacing 4.000000 +ObjGIMaxPixelSpacing 100.000000 +ShadowOptions 7 + +AmbientColor 1 1 1 +AmbientIntensity 0.05 +DoubleSidedAreaLights 1 +RadiosityType 2 +RadiosityInterpolated 1 +RadiosityTransparency 0 +RadiosityIntensity 1 +RadiosityTolerance 0.2928932 +RadiosityRays 64 +SecondaryBounceRays 16 +RadiosityMinPixelSpacing 4 +RadiosityMaxPixelSpacing 100 +RadiosityMultiplier 1 +RadiosityDirectionalRays 0 +RadiosityUseGradients 0 +RadiosityUseBehindTest 1 +BlurRadiosity 1 +RadiosityFlags 0 +RadiosityCacheModulus 1 +RadiosityCacheFilePath radiosity.cache +PixelFilterForceMT 0 + +AddLight 20000000 +LightName Light +ShowLight 1 -1 0.941176 0.376471 0.941176 +LightMotion +NumChannels 9 +Channel 0 +{ Envelope + 1 + Key -2 0 0 0 0 0 0 0 0 + Behaviors 1 1 +} +Channel 1 +{ Envelope + 1 + Key 2 0 0 0 0 0 0 0 0 + Behaviors 1 1 +} +Channel 2 +{ Envelope + 1 + Key -2 0 0 0 0 0 0 0 0 + Behaviors 1 1 +} +Channel 3 +{ Envelope + 1 + Key 0.78539813999999997 0 0 0 0 0 0 0 0 + Behaviors 1 1 +} +Channel 4 +{ Envelope + 1 + Key 0.61086521999999999 0 0 0 0 0 0 0 0 + Behaviors 1 1 +} +Channel 5 +{ Envelope + 1 + Key 0 0 0 0 0 0 0 0 0 + Behaviors 1 1 +} +Channel 6 +{ Envelope + 1 + Key 1 0 0 0 0 0 0 0 0 + Behaviors 1 1 +} +Channel 7 +{ Envelope + 1 + Key 1 0 0 0 0 0 0 0 0 + Behaviors 1 1 +} +Channel 8 +{ Envelope + 1 + Key 1 0 0 0 0 0 0 0 0 + Behaviors 1 1 +} +IKInitCustomFrame 0 +GoalStrength 1 +IKFKBlending 0 +IKSoftMin 0.25 +IKSoftMax 0.75 +CtrlPosItemBlend 1 +CtrlRotItemBlend 1 +CtrlScaleItemBlend 1 + +PathAlignLookAhead 0.033 +PathAlignMaxLookSteps 10 +PathAlignReliableDist 0.001 +IKInitialState 0 +LightColor 1 1 1 +LightIntensity 1 +AffectCaustics 1 +LightType 0 +LensFlare 0 +FlareIntensity 0.5 +FlareDissolve 0 +LensFlareFade 4 +LensFlareOptions 11 +FlareRingColor 0.3137 0.0784 0.0392 +FlareRingSize 0.22 +FlareRandStreakInt 0.03 +FlareRandStreakDens 50 +FlareRandStreakSharp 6 +ShadowType 1 +ShadowColor 0 0 0 +Plugin LightHandler 1 DistantLight +EndPlugin + +AddCamera 30000000 +CameraName Camera +ShowCamera 1 -1 0.125490 0.878431 0.125490 +CameraMotion +NumChannels 6 +Channel 0 +{ Envelope + 1 + Key -0.10000002384185791 0 0 0 0 0 0 0 0 + Behaviors 1 1 +} +Channel 1 +{ Envelope + 1 + Key 0.94999998807907104 0 0 0 0 0 0 0 0 + Behaviors 1 1 +} +Channel 2 +{ Envelope + 1 + Key -6.384000301361084 0 0 0 0 0 0 0 0 + Behaviors 1 1 +} +Channel 3 +{ Envelope + 1 + Key 0 0 0 0 0 0 0 0 0 + Behaviors 1 1 +} +Channel 4 +{ Envelope + 1 + Key 0 0 0 0 0 0 0 0 0 + Behaviors 1 1 +} +Channel 5 +{ Envelope + 1 + Key 0 0 0 0 0 0 0 0 0 + Behaviors 1 1 +} +IKInitCustomFrame 0 +GoalStrength 1 +IKFKBlending 0 +IKSoftMin 0.25 +IKSoftMax 0.75 +CtrlPosItemBlend 1 +CtrlRotItemBlend 1 +CtrlScaleItemBlend 1 + +PathAlignLookAhead 0.033 +PathAlignMaxLookSteps 10 +PathAlignReliableDist 0.001 +IKInitialState 0 +ZoomFactor 3.2 +ZoomType 1 +ResolutionMultiplier 1.0 +FrameSize 640 480 +PixelAspect 1 +MaskPosition 0 0 640 480 +MotionBlur 0 +MotionBlurPasses 1 +ShutterEfficiency 1 +Oversampling 0 +FieldRendering 0 +ApertureHeight 0.015 +DepthOfField 0 +FocalDistance 1 +LensFStop 4 +DiaphragmSides 0 +DiaphragmRotation 0 +AASamples 1 +Sampler 1 +UseGlobalResolution 0 +UseGlobalMask 0 +UseGlobalBlur 0 +Plugin CameraHandler 1 Perspective +EndPlugin + +GlobalFrameSize 640 480 +GlobalMultiplier 1.0 +GlobalFieldRendering 0 +GlobalMotionBlur 0 +GlobalMaskPosition 0 0 640 480 +GlobalFilmHeight 0.015 +GlobalPixelAspect 1 + +Antialiasing 0 +AntiAliasingLevel -1 +ReconstructionFilter 0 +AdaptiveSampling 0 + +SolidBackdrop 1 +BackdropColor 0 0 0 +ZenithColor 0 0.1569 0.3137 +SkyColor 0.4706 0.7059 0.9412 +GroundColor 0.1961 0.1569 0.1176 +NadirColor 0.3922 0.3137 0.2353 +FogType 0 +FogMinDistance 0 +FogMaxDistance 1 +FogMinAmount 0 +FogMaxAmount 1 +FogColor 0.5098 0.5098 0.549 +BackdropFog 0 +VolumeClipDiscance 0.1 +DynamicRangeMin 0 +DynamicRangeLimit 1 +DitherIntensity 1 +AnimatedDither 0 + +RenderMode 2 +RayTraceEffects 0 +DepthBufferAA 0 +RenderLines 1 +RayRecursionLimit 16 +RayPrecision 6 +RayCutoff 0.01 +DataOverlayLabel +SaveRGB 0 +SaveAlpha 0 + +ViewConfiguration 0 +DefineView 0 +ViewType 7 +ViewLevel 5 +ViewAimpoint 0 0 0 +ViewRotation -17.2 18 0 +ViewZoomFactor 4 +ViewXRay 0 +ViewMBDofPreview 0 +ViewHeadlight 0 + +GridNumber 80 +GridSize 1 +CameraViewBG 0 +ShowMotionPath 1 +ShowFogRadius 0 +ShowFogEffect 0 +ShowFieldChart 0 +OverlayColor_fv 0 0 0 +MeshBackgroundGroup 1 + +CurrentObject 0 +CurrentLight 0 +CurrentCamera 0 +GraphEditorData +{ GraphEd_Favorites +} +{ GE_Expression_Lib + 1 +} +ImageEditorData +NumberOfClips 0 diff --git a/test/models/LWS/move_x_post_reset.lws b/test/models/LWS/move_x_post_reset.lws new file mode 100644 index 000000000..980e08e35 --- /dev/null +++ b/test/models/LWS/move_x_post_reset.lws @@ -0,0 +1,472 @@ +LWSC +5 + +RenderRangeType 0 +FirstFrame 1 +LastFrame 120 +FrameStep 1 +RenderRangeObject 0 +RenderRangeArbitrary 1-60 +PreviewFirstFrame 0 +PreviewLastFrame 120 +PreviewFrameStep 1 +CurrentFrame 1 +FramesPerSecond 30 +ChangeScene 0 + +LoadObjectLayer 1 10000000 simple_cube.lwo +ChangeObject 0 +ShowObject 7 -1 0.376471 0.878431 0.941176 +Group 0 +ObjectMotion +NumChannels 9 +Channel 0 +{ Envelope + 3 + Key 0 0 0 0 0 0 0 2.1372954575696919 0 + Key 2.1381859973436792 0.66666666666666663 0 0 0 0 -0.8400939672421186 -0.79808926888001264 0 + Key -1.6381832361221313 1.3 0 0 0 0 -3.7747136573003282 0 0 + Behaviors 1 0 +} +Channel 1 +{ Envelope + 1 + Key 0 0 0 0 0 0 0 0 0 + Behaviors 1 1 +} +Channel 2 +{ Envelope + 1 + Key 0 0 0 0 0 0 0 0 0 + Behaviors 1 1 +} +Channel 3 +{ Envelope + 1 + Key 0 0 0 0 0 0 0 0 0 + Behaviors 1 1 +} +Channel 4 +{ Envelope + 1 + Key 0 0 0 0 0 0 0 0 0 + Behaviors 1 1 +} +Channel 5 +{ Envelope + 1 + Key 0 0 0 0 0 0 0 0 0 + Behaviors 1 1 +} +Channel 6 +{ Envelope + 1 + Key 1 0 0 0 0 0 0 0 0 + Behaviors 1 1 +} +Channel 7 +{ Envelope + 1 + Key 1 0 0 0 0 0 0 0 0 + Behaviors 1 1 +} +Channel 8 +{ Envelope + 1 + Key 1 0 0 0 0 0 0 0 0 + Behaviors 1 1 +} +IKInitCustomFrame 0 +GoalStrength 1 +IKFKBlending 0 +IKSoftMin 0.25 +IKSoftMax 0.75 +CtrlPosItemBlend 1 +CtrlRotItemBlend 1 +CtrlScaleItemBlend 1 + +PathAlignLookAhead 0.033 +PathAlignMaxLookSteps 10 +PathAlignReliableDist 0.001 +IKInitialState 0 +SubPatchLevel 3 3 +APSDisplay +{ APS + Version 1 + Method 0 + { VParm + { ObjectLevel + 0 + { VariantParameter + 3 + 0 + { ParameterValue + 3 + 0 + } + } + } + { PolygonLevel + 0 + { VariantParameter + 3 + 0 + { ParameterValue + 3 + 0 + } + } + } + { PolygonPixelSize + 0 + { VariantParameter + 3 + 0 + { ParameterValue + 256 + 0 + } + } + } + } +} +APSRender +{ APS + Version 1 + Method 0 + { VParm + { ObjectLevel + 0 + { VariantParameter + 3 + 0 + { ParameterValue + 3 + 0 + } + } + } + { PolygonLevel + 0 + { VariantParameter + 3 + 0 + { ParameterValue + 3 + 0 + } + } + } + { PolygonPixelSize + 0 + { VariantParameter + 3 + 0 + { ParameterValue + 256 + 0 + } + } + } + } +} +NodeDisplacement 0 +{ Nodal_Block + { Root + Location 0 0 + Zoom 1 + Disabled 1 + } + Version 1 + { Nodes + Server "Displacement" + { Tag + RealName "Displacement" + Name "Displacement" + Coordinates -10 -10 + Mode 1 + { Data + } + Preview "" + Comment "" + } + } + { Connections + } +} +NodeDisplacementOrder 0 +UseObjGI 0 +ObjGIRadiosityRays 64 +ObjGISecondaryBounceRays 16 +ObjGIRadiosityTolerance 0.292893 +ObjGIMinPixelSpacing 4.000000 +ObjGIMaxPixelSpacing 100.000000 +ShadowOptions 7 + +AmbientColor 1 1 1 +AmbientIntensity 0.05 +DoubleSidedAreaLights 1 +RadiosityType 2 +RadiosityInterpolated 1 +RadiosityTransparency 0 +RadiosityIntensity 1 +RadiosityTolerance 0.2928932 +RadiosityRays 64 +SecondaryBounceRays 16 +RadiosityMinPixelSpacing 4 +RadiosityMaxPixelSpacing 100 +RadiosityMultiplier 1 +RadiosityDirectionalRays 0 +RadiosityUseGradients 0 +RadiosityUseBehindTest 1 +BlurRadiosity 1 +RadiosityFlags 0 +RadiosityCacheModulus 1 +RadiosityCacheFilePath radiosity.cache +PixelFilterForceMT 0 + +AddLight 20000000 +LightName Light +ShowLight 1 -1 0.941176 0.376471 0.941176 +LightMotion +NumChannels 9 +Channel 0 +{ Envelope + 1 + Key -2 0 0 0 0 0 0 0 0 + Behaviors 1 1 +} +Channel 1 +{ Envelope + 1 + Key 2 0 0 0 0 0 0 0 0 + Behaviors 1 1 +} +Channel 2 +{ Envelope + 1 + Key -2 0 0 0 0 0 0 0 0 + Behaviors 1 1 +} +Channel 3 +{ Envelope + 1 + Key 0.78539813999999997 0 0 0 0 0 0 0 0 + Behaviors 1 1 +} +Channel 4 +{ Envelope + 1 + Key 0.61086521999999999 0 0 0 0 0 0 0 0 + Behaviors 1 1 +} +Channel 5 +{ Envelope + 1 + Key 0 0 0 0 0 0 0 0 0 + Behaviors 1 1 +} +Channel 6 +{ Envelope + 1 + Key 1 0 0 0 0 0 0 0 0 + Behaviors 1 1 +} +Channel 7 +{ Envelope + 1 + Key 1 0 0 0 0 0 0 0 0 + Behaviors 1 1 +} +Channel 8 +{ Envelope + 1 + Key 1 0 0 0 0 0 0 0 0 + Behaviors 1 1 +} +IKInitCustomFrame 0 +GoalStrength 1 +IKFKBlending 0 +IKSoftMin 0.25 +IKSoftMax 0.75 +CtrlPosItemBlend 1 +CtrlRotItemBlend 1 +CtrlScaleItemBlend 1 + +PathAlignLookAhead 0.033 +PathAlignMaxLookSteps 10 +PathAlignReliableDist 0.001 +IKInitialState 0 +LightColor 1 1 1 +LightIntensity 1 +AffectCaustics 1 +LightType 0 +LensFlare 0 +FlareIntensity 0.5 +FlareDissolve 0 +LensFlareFade 4 +LensFlareOptions 11 +FlareRingColor 0.3137 0.0784 0.0392 +FlareRingSize 0.22 +FlareRandStreakInt 0.03 +FlareRandStreakDens 50 +FlareRandStreakSharp 6 +ShadowType 1 +ShadowColor 0 0 0 +Plugin LightHandler 1 DistantLight +EndPlugin + +AddCamera 30000000 +CameraName Camera +ShowCamera 1 -1 0.125490 0.878431 0.125490 +CameraMotion +NumChannels 6 +Channel 0 +{ Envelope + 1 + Key -0.10000002384185791 0 0 0 0 0 0 0 0 + Behaviors 1 1 +} +Channel 1 +{ Envelope + 1 + Key 0.94999998807907104 0 0 0 0 0 0 0 0 + Behaviors 1 1 +} +Channel 2 +{ Envelope + 1 + Key -6.384000301361084 0 0 0 0 0 0 0 0 + Behaviors 1 1 +} +Channel 3 +{ Envelope + 1 + Key 0 0 0 0 0 0 0 0 0 + Behaviors 1 1 +} +Channel 4 +{ Envelope + 1 + Key 0 0 0 0 0 0 0 0 0 + Behaviors 1 1 +} +Channel 5 +{ Envelope + 1 + Key 0 0 0 0 0 0 0 0 0 + Behaviors 1 1 +} +IKInitCustomFrame 0 +GoalStrength 1 +IKFKBlending 0 +IKSoftMin 0.25 +IKSoftMax 0.75 +CtrlPosItemBlend 1 +CtrlRotItemBlend 1 +CtrlScaleItemBlend 1 + +PathAlignLookAhead 0.033 +PathAlignMaxLookSteps 10 +PathAlignReliableDist 0.001 +IKInitialState 0 +ZoomFactor 3.2 +ZoomType 1 +ResolutionMultiplier 1.0 +FrameSize 640 480 +PixelAspect 1 +MaskPosition 0 0 640 480 +MotionBlur 0 +MotionBlurPasses 1 +ShutterEfficiency 1 +Oversampling 0 +FieldRendering 0 +ApertureHeight 0.015 +DepthOfField 0 +FocalDistance 1 +LensFStop 4 +DiaphragmSides 0 +DiaphragmRotation 0 +AASamples 1 +Sampler 1 +UseGlobalResolution 0 +UseGlobalMask 0 +UseGlobalBlur 0 +Plugin CameraHandler 1 Perspective +EndPlugin + +GlobalFrameSize 640 480 +GlobalMultiplier 1.0 +GlobalFieldRendering 0 +GlobalMotionBlur 0 +GlobalMaskPosition 0 0 640 480 +GlobalFilmHeight 0.015 +GlobalPixelAspect 1 + +Antialiasing 0 +AntiAliasingLevel -1 +ReconstructionFilter 0 +AdaptiveSampling 0 + +SolidBackdrop 1 +BackdropColor 0 0 0 +ZenithColor 0 0.1569 0.3137 +SkyColor 0.4706 0.7059 0.9412 +GroundColor 0.1961 0.1569 0.1176 +NadirColor 0.3922 0.3137 0.2353 +FogType 0 +FogMinDistance 0 +FogMaxDistance 1 +FogMinAmount 0 +FogMaxAmount 1 +FogColor 0.5098 0.5098 0.549 +BackdropFog 0 +VolumeClipDiscance 0.1 +DynamicRangeMin 0 +DynamicRangeLimit 1 +DitherIntensity 1 +AnimatedDither 0 + +RenderMode 2 +RayTraceEffects 0 +DepthBufferAA 0 +RenderLines 1 +RayRecursionLimit 16 +RayPrecision 6 +RayCutoff 0.01 +DataOverlayLabel +SaveRGB 0 +SaveAlpha 0 + +ViewConfiguration 0 +DefineView 0 +ViewType 7 +ViewLevel 5 +ViewAimpoint 0 0 0 +ViewRotation -17.2 18 0 +ViewZoomFactor 4 +ViewXRay 0 +ViewMBDofPreview 0 +ViewHeadlight 0 + +GridNumber 80 +GridSize 1 +CameraViewBG 0 +ShowMotionPath 1 +ShowFogRadius 0 +ShowFogEffect 0 +ShowFieldChart 0 +OverlayColor_fv 0 0 0 +MeshBackgroundGroup 1 + +CurrentObject 0 +CurrentLight 0 +CurrentCamera 0 +GraphEditorData +{ GraphEd_Favorites +} +{ GE_Expression_Lib + 1 +} +ImageEditorData +NumberOfClips 0 diff --git a/test/models/LWS/move_xz_bezier.lws b/test/models/LWS/move_xz_bezier.lws new file mode 100644 index 000000000..1627f37c4 --- /dev/null +++ b/test/models/LWS/move_xz_bezier.lws @@ -0,0 +1,474 @@ +LWSC +5 + +RenderRangeType 0 +FirstFrame 1 +LastFrame 120 +FrameStep 1 +RenderRangeObject 0 +RenderRangeArbitrary 1-60 +PreviewFirstFrame 0 +PreviewLastFrame 120 +PreviewFrameStep 1 +CurrentFrame 96 +FramesPerSecond 30 +ChangeScene 0 + +LoadObjectLayer 1 10000000 simple_cube.lwo +ChangeObject 0 +ShowObject 7 -1 0.376471 0.878431 0.941176 +Group 0 +ObjectMotion +NumChannels 9 +Channel 0 +{ Envelope + 3 + Key 0 0 5 0 0 0.22222 0.64163307824462457 2.0144942798797212 0 + Key 1.924918483918713 0.66666666666666663 5 -0.22222 0.012913536517090266 0.44444 -0.10330829213672213 -0.3486689726511637 0 + Key -0.52300345897674561 2 5 -0.44444 0.81596582122534322 0 0 0 0 + Behaviors 0 1 +} +Channel 1 +{ Envelope + 1 + Key 0 0 0 0 0 0 0 0 0 + Behaviors 1 1 +} +Channel 2 +{ Envelope + 3 + Key 0 0 5 0 0 0.44444 -0.88536338761568067 -2.6555634816222775 0 + Key -2.6561167240142822 1.3333333333333333 5 -0.46576443257676908 0.0086004390920015397 0.56576343257676909 -0.018818992720682302 -0.062782856771785217 0 + Key -0.095800442759067794 2.9666666666666668 5 -0.54443900000000001 -0.85343022603080076 0 0 0 0 + Behaviors 1 1 +} +Channel 3 +{ Envelope + 1 + Key 0 0 0 0 0 0 0 0 0 + Behaviors 1 1 +} +Channel 4 +{ Envelope + 1 + Key 0 0 0 0 0 0 0 0 0 + Behaviors 1 1 +} +Channel 5 +{ Envelope + 1 + Key 0 0 0 0 0 0 0 0 0 + Behaviors 1 1 +} +Channel 6 +{ Envelope + 1 + Key 1 0 0 0 0 0 0 0 0 + Behaviors 1 1 +} +Channel 7 +{ Envelope + 1 + Key 1 0 0 0 0 0 0 0 0 + Behaviors 1 1 +} +Channel 8 +{ Envelope + 1 + Key 1 0 0 0 0 0 0 0 0 + Behaviors 1 1 +} +IKInitCustomFrame 0 +GoalStrength 1 +IKFKBlending 0 +IKSoftMin 0.25 +IKSoftMax 0.75 +CtrlPosItemBlend 1 +CtrlRotItemBlend 1 +CtrlScaleItemBlend 1 + +PathAlignLookAhead 0.033 +PathAlignMaxLookSteps 10 +PathAlignReliableDist 0.001 +IKInitialState 0 +SubPatchLevel 3 3 +APSDisplay +{ APS + Version 1 + Method 0 + { VParm + { ObjectLevel + 0 + { VariantParameter + 3 + 0 + { ParameterValue + 3 + 0 + } + } + } + { PolygonLevel + 0 + { VariantParameter + 3 + 0 + { ParameterValue + 3 + 0 + } + } + } + { PolygonPixelSize + 0 + { VariantParameter + 3 + 0 + { ParameterValue + 256 + 0 + } + } + } + } +} +APSRender +{ APS + Version 1 + Method 0 + { VParm + { ObjectLevel + 0 + { VariantParameter + 3 + 0 + { ParameterValue + 3 + 0 + } + } + } + { PolygonLevel + 0 + { VariantParameter + 3 + 0 + { ParameterValue + 3 + 0 + } + } + } + { PolygonPixelSize + 0 + { VariantParameter + 3 + 0 + { ParameterValue + 256 + 0 + } + } + } + } +} +NodeDisplacement 0 +{ Nodal_Block + { Root + Location 0 0 + Zoom 1 + Disabled 1 + } + Version 1 + { Nodes + Server "Displacement" + { Tag + RealName "Displacement" + Name "Displacement" + Coordinates -10 -10 + Mode 1 + { Data + } + Preview "" + Comment "" + } + } + { Connections + } +} +NodeDisplacementOrder 0 +UseObjGI 0 +ObjGIRadiosityRays 64 +ObjGISecondaryBounceRays 16 +ObjGIRadiosityTolerance 0.292893 +ObjGIMinPixelSpacing 4.000000 +ObjGIMaxPixelSpacing 100.000000 +ShadowOptions 7 + +AmbientColor 1 1 1 +AmbientIntensity 0.05 +DoubleSidedAreaLights 1 +RadiosityType 2 +RadiosityInterpolated 1 +RadiosityTransparency 0 +RadiosityIntensity 1 +RadiosityTolerance 0.2928932 +RadiosityRays 64 +SecondaryBounceRays 16 +RadiosityMinPixelSpacing 4 +RadiosityMaxPixelSpacing 100 +RadiosityMultiplier 1 +RadiosityDirectionalRays 0 +RadiosityUseGradients 0 +RadiosityUseBehindTest 1 +BlurRadiosity 1 +RadiosityFlags 0 +RadiosityCacheModulus 1 +RadiosityCacheFilePath radiosity.cache +PixelFilterForceMT 0 + +AddLight 20000000 +LightName Light +ShowLight 1 -1 0.941176 0.376471 0.941176 +LightMotion +NumChannels 9 +Channel 0 +{ Envelope + 1 + Key -2 0 0 0 0 0 0 0 0 + Behaviors 1 1 +} +Channel 1 +{ Envelope + 1 + Key 2 0 0 0 0 0 0 0 0 + Behaviors 1 1 +} +Channel 2 +{ Envelope + 1 + Key -2 0 0 0 0 0 0 0 0 + Behaviors 1 1 +} +Channel 3 +{ Envelope + 1 + Key 0.78539813999999997 0 0 0 0 0 0 0 0 + Behaviors 1 1 +} +Channel 4 +{ Envelope + 1 + Key 0.61086521999999999 0 0 0 0 0 0 0 0 + Behaviors 1 1 +} +Channel 5 +{ Envelope + 1 + Key 0 0 0 0 0 0 0 0 0 + Behaviors 1 1 +} +Channel 6 +{ Envelope + 1 + Key 1 0 0 0 0 0 0 0 0 + Behaviors 1 1 +} +Channel 7 +{ Envelope + 1 + Key 1 0 0 0 0 0 0 0 0 + Behaviors 1 1 +} +Channel 8 +{ Envelope + 1 + Key 1 0 0 0 0 0 0 0 0 + Behaviors 1 1 +} +IKInitCustomFrame 0 +GoalStrength 1 +IKFKBlending 0 +IKSoftMin 0.25 +IKSoftMax 0.75 +CtrlPosItemBlend 1 +CtrlRotItemBlend 1 +CtrlScaleItemBlend 1 + +PathAlignLookAhead 0.033 +PathAlignMaxLookSteps 10 +PathAlignReliableDist 0.001 +IKInitialState 0 +LightColor 1 1 1 +LightIntensity 1 +AffectCaustics 1 +LightType 0 +LensFlare 0 +FlareIntensity 0.5 +FlareDissolve 0 +LensFlareFade 4 +LensFlareOptions 11 +FlareRingColor 0.3137 0.0784 0.0392 +FlareRingSize 0.22 +FlareRandStreakInt 0.03 +FlareRandStreakDens 50 +FlareRandStreakSharp 6 +ShadowType 1 +ShadowColor 0 0 0 +Plugin LightHandler 1 DistantLight +EndPlugin + +AddCamera 30000000 +CameraName Camera +ShowCamera 1 -1 0.125490 0.878431 0.125490 +CameraMotion +NumChannels 6 +Channel 0 +{ Envelope + 1 + Key -0.10000002384185791 0 0 0 0 0 0 0 0 + Behaviors 1 1 +} +Channel 1 +{ Envelope + 1 + Key 0.94999998807907104 0 0 0 0 0 0 0 0 + Behaviors 1 1 +} +Channel 2 +{ Envelope + 1 + Key -6.384000301361084 0 0 0 0 0 0 0 0 + Behaviors 1 1 +} +Channel 3 +{ Envelope + 1 + Key 0 0 0 0 0 0 0 0 0 + Behaviors 1 1 +} +Channel 4 +{ Envelope + 1 + Key 0 0 0 0 0 0 0 0 0 + Behaviors 1 1 +} +Channel 5 +{ Envelope + 1 + Key 0 0 0 0 0 0 0 0 0 + Behaviors 1 1 +} +IKInitCustomFrame 0 +GoalStrength 1 +IKFKBlending 0 +IKSoftMin 0.25 +IKSoftMax 0.75 +CtrlPosItemBlend 1 +CtrlRotItemBlend 1 +CtrlScaleItemBlend 1 + +PathAlignLookAhead 0.033 +PathAlignMaxLookSteps 10 +PathAlignReliableDist 0.001 +IKInitialState 0 +ZoomFactor 3.2 +ZoomType 1 +ResolutionMultiplier 1.0 +FrameSize 640 480 +PixelAspect 1 +MaskPosition 0 0 640 480 +MotionBlur 0 +MotionBlurPasses 1 +ShutterEfficiency 1 +Oversampling 0 +FieldRendering 0 +ApertureHeight 0.015 +DepthOfField 0 +FocalDistance 1 +LensFStop 4 +DiaphragmSides 0 +DiaphragmRotation 0 +AASamples 1 +Sampler 1 +UseGlobalResolution 0 +UseGlobalMask 0 +UseGlobalBlur 0 +Plugin CameraHandler 1 Perspective +EndPlugin + +GlobalFrameSize 640 480 +GlobalMultiplier 1.0 +GlobalFieldRendering 0 +GlobalMotionBlur 0 +GlobalMaskPosition 0 0 640 480 +GlobalFilmHeight 0.015 +GlobalPixelAspect 1 + +Antialiasing 0 +AntiAliasingLevel -1 +ReconstructionFilter 0 +AdaptiveSampling 0 + +SolidBackdrop 1 +BackdropColor 0 0 0 +ZenithColor 0 0.1569 0.3137 +SkyColor 0.4706 0.7059 0.9412 +GroundColor 0.1961 0.1569 0.1176 +NadirColor 0.3922 0.3137 0.2353 +FogType 0 +FogMinDistance 0 +FogMaxDistance 1 +FogMinAmount 0 +FogMaxAmount 1 +FogColor 0.5098 0.5098 0.549 +BackdropFog 0 +VolumeClipDiscance 0.1 +DynamicRangeMin 0 +DynamicRangeLimit 1 +DitherIntensity 1 +AnimatedDither 0 + +RenderMode 2 +RayTraceEffects 0 +DepthBufferAA 0 +RenderLines 1 +RayRecursionLimit 16 +RayPrecision 6 +RayCutoff 0.01 +DataOverlayLabel +SaveRGB 0 +SaveAlpha 0 + +ViewConfiguration 0 +DefineView 0 +ViewType 7 +ViewLevel 5 +ViewAimpoint 0 0 0 +ViewRotation -17.2 18 0 +ViewZoomFactor 4 +ViewXRay 0 +ViewMBDofPreview 0 +ViewHeadlight 0 + +GridNumber 80 +GridSize 1 +CameraViewBG 0 +ShowMotionPath 1 +ShowFogRadius 0 +ShowFogEffect 0 +ShowFieldChart 0 +OverlayColor_fv 0 0 0 +MeshBackgroundGroup 1 + +CurrentObject 0 +CurrentLight 0 +CurrentCamera 0 +GraphEditorData +{ GraphEd_Favorites +} +{ GE_Expression_Lib + 1 +} +ImageEditorData +NumberOfClips 0 diff --git a/test/models/LWS/move_xz_hermite.lws b/test/models/LWS/move_xz_hermite.lws new file mode 100644 index 000000000..6a026dc90 --- /dev/null +++ b/test/models/LWS/move_xz_hermite.lws @@ -0,0 +1,474 @@ +LWSC +5 + +RenderRangeType 0 +FirstFrame 1 +LastFrame 120 +FrameStep 1 +RenderRangeObject 0 +RenderRangeArbitrary 1-60 +PreviewFirstFrame 0 +PreviewLastFrame 120 +PreviewFrameStep 1 +CurrentFrame 0 +FramesPerSecond 30 +ChangeScene 0 + +LoadObjectLayer 1 10000000 simple_cube.lwo +ChangeObject 0 +ShowObject 7 -1 0.376471 0.878431 0.941176 +Group 0 +ObjectMotion +NumChannels 9 +Channel 0 +{ Envelope + 3 + Key 0 0 1 0 0 0 0 2.0144942798797212 0 + Key 1.924918483918713 0.66666666666666663 1 0 0 0 -0.17433448632558185 -0.3486689726511637 0 + Key -0.52300345897674561 2 1 0 0 0 -2.4474120653818376 0 0 + Behaviors 1 1 +} +Channel 1 +{ Envelope + 1 + Key 0 0 0 0 0 0 0 0 0 + Behaviors 1 1 +} +Channel 2 +{ Envelope + 3 + Key 0 0 1 0 0 0 0 -2.6555634816222775 0 + Key -2.6561167240142822 1.3333333333333333 1 0 0 0 -0.043056378768120331 -0.062782856771785217 0 + Key -0.095800442759067794 2.9666666666666668 1 0 0 0 2.5416503021393155 0 0 + Behaviors 1 1 +} +Channel 3 +{ Envelope + 1 + Key 0 0 0 0 0 0 0 0 0 + Behaviors 1 1 +} +Channel 4 +{ Envelope + 1 + Key 0 0 0 0 0 0 0 0 0 + Behaviors 1 1 +} +Channel 5 +{ Envelope + 1 + Key 0 0 0 0 0 0 0 0 0 + Behaviors 1 1 +} +Channel 6 +{ Envelope + 1 + Key 1 0 0 0 0 0 0 0 0 + Behaviors 1 1 +} +Channel 7 +{ Envelope + 1 + Key 1 0 0 0 0 0 0 0 0 + Behaviors 1 1 +} +Channel 8 +{ Envelope + 1 + Key 1 0 0 0 0 0 0 0 0 + Behaviors 1 1 +} +IKInitCustomFrame 0 +GoalStrength 1 +IKFKBlending 0 +IKSoftMin 0.25 +IKSoftMax 0.75 +CtrlPosItemBlend 1 +CtrlRotItemBlend 1 +CtrlScaleItemBlend 1 + +PathAlignLookAhead 0.033 +PathAlignMaxLookSteps 10 +PathAlignReliableDist 0.001 +IKInitialState 0 +SubPatchLevel 3 3 +APSDisplay +{ APS + Version 1 + Method 0 + { VParm + { ObjectLevel + 0 + { VariantParameter + 3 + 0 + { ParameterValue + 3 + 0 + } + } + } + { PolygonLevel + 0 + { VariantParameter + 3 + 0 + { ParameterValue + 3 + 0 + } + } + } + { PolygonPixelSize + 0 + { VariantParameter + 3 + 0 + { ParameterValue + 256 + 0 + } + } + } + } +} +APSRender +{ APS + Version 1 + Method 0 + { VParm + { ObjectLevel + 0 + { VariantParameter + 3 + 0 + { ParameterValue + 3 + 0 + } + } + } + { PolygonLevel + 0 + { VariantParameter + 3 + 0 + { ParameterValue + 3 + 0 + } + } + } + { PolygonPixelSize + 0 + { VariantParameter + 3 + 0 + { ParameterValue + 256 + 0 + } + } + } + } +} +NodeDisplacement 0 +{ Nodal_Block + { Root + Location 0 0 + Zoom 1 + Disabled 1 + } + Version 1 + { Nodes + Server "Displacement" + { Tag + RealName "Displacement" + Name "Displacement" + Coordinates -10 -10 + Mode 1 + { Data + } + Preview "" + Comment "" + } + } + { Connections + } +} +NodeDisplacementOrder 0 +UseObjGI 0 +ObjGIRadiosityRays 64 +ObjGISecondaryBounceRays 16 +ObjGIRadiosityTolerance 0.292893 +ObjGIMinPixelSpacing 4.000000 +ObjGIMaxPixelSpacing 100.000000 +ShadowOptions 7 + +AmbientColor 1 1 1 +AmbientIntensity 0.05 +DoubleSidedAreaLights 1 +RadiosityType 2 +RadiosityInterpolated 1 +RadiosityTransparency 0 +RadiosityIntensity 1 +RadiosityTolerance 0.2928932 +RadiosityRays 64 +SecondaryBounceRays 16 +RadiosityMinPixelSpacing 4 +RadiosityMaxPixelSpacing 100 +RadiosityMultiplier 1 +RadiosityDirectionalRays 0 +RadiosityUseGradients 0 +RadiosityUseBehindTest 1 +BlurRadiosity 1 +RadiosityFlags 0 +RadiosityCacheModulus 1 +RadiosityCacheFilePath radiosity.cache +PixelFilterForceMT 0 + +AddLight 20000000 +LightName Light +ShowLight 1 -1 0.941176 0.376471 0.941176 +LightMotion +NumChannels 9 +Channel 0 +{ Envelope + 1 + Key -2 0 0 0 0 0 0 0 0 + Behaviors 1 1 +} +Channel 1 +{ Envelope + 1 + Key 2 0 0 0 0 0 0 0 0 + Behaviors 1 1 +} +Channel 2 +{ Envelope + 1 + Key -2 0 0 0 0 0 0 0 0 + Behaviors 1 1 +} +Channel 3 +{ Envelope + 1 + Key 0.78539813999999997 0 0 0 0 0 0 0 0 + Behaviors 1 1 +} +Channel 4 +{ Envelope + 1 + Key 0.61086521999999999 0 0 0 0 0 0 0 0 + Behaviors 1 1 +} +Channel 5 +{ Envelope + 1 + Key 0 0 0 0 0 0 0 0 0 + Behaviors 1 1 +} +Channel 6 +{ Envelope + 1 + Key 1 0 0 0 0 0 0 0 0 + Behaviors 1 1 +} +Channel 7 +{ Envelope + 1 + Key 1 0 0 0 0 0 0 0 0 + Behaviors 1 1 +} +Channel 8 +{ Envelope + 1 + Key 1 0 0 0 0 0 0 0 0 + Behaviors 1 1 +} +IKInitCustomFrame 0 +GoalStrength 1 +IKFKBlending 0 +IKSoftMin 0.25 +IKSoftMax 0.75 +CtrlPosItemBlend 1 +CtrlRotItemBlend 1 +CtrlScaleItemBlend 1 + +PathAlignLookAhead 0.033 +PathAlignMaxLookSteps 10 +PathAlignReliableDist 0.001 +IKInitialState 0 +LightColor 1 1 1 +LightIntensity 1 +AffectCaustics 1 +LightType 0 +LensFlare 0 +FlareIntensity 0.5 +FlareDissolve 0 +LensFlareFade 4 +LensFlareOptions 11 +FlareRingColor 0.3137 0.0784 0.0392 +FlareRingSize 0.22 +FlareRandStreakInt 0.03 +FlareRandStreakDens 50 +FlareRandStreakSharp 6 +ShadowType 1 +ShadowColor 0 0 0 +Plugin LightHandler 1 DistantLight +EndPlugin + +AddCamera 30000000 +CameraName Camera +ShowCamera 1 -1 0.125490 0.878431 0.125490 +CameraMotion +NumChannels 6 +Channel 0 +{ Envelope + 1 + Key -0.10000002384185791 0 0 0 0 0 0 0 0 + Behaviors 1 1 +} +Channel 1 +{ Envelope + 1 + Key 0.94999998807907104 0 0 0 0 0 0 0 0 + Behaviors 1 1 +} +Channel 2 +{ Envelope + 1 + Key -6.384000301361084 0 0 0 0 0 0 0 0 + Behaviors 1 1 +} +Channel 3 +{ Envelope + 1 + Key 0 0 0 0 0 0 0 0 0 + Behaviors 1 1 +} +Channel 4 +{ Envelope + 1 + Key 0 0 0 0 0 0 0 0 0 + Behaviors 1 1 +} +Channel 5 +{ Envelope + 1 + Key 0 0 0 0 0 0 0 0 0 + Behaviors 1 1 +} +IKInitCustomFrame 0 +GoalStrength 1 +IKFKBlending 0 +IKSoftMin 0.25 +IKSoftMax 0.75 +CtrlPosItemBlend 1 +CtrlRotItemBlend 1 +CtrlScaleItemBlend 1 + +PathAlignLookAhead 0.033 +PathAlignMaxLookSteps 10 +PathAlignReliableDist 0.001 +IKInitialState 0 +ZoomFactor 3.2 +ZoomType 1 +ResolutionMultiplier 1.0 +FrameSize 640 480 +PixelAspect 1 +MaskPosition 0 0 640 480 +MotionBlur 0 +MotionBlurPasses 1 +ShutterEfficiency 1 +Oversampling 0 +FieldRendering 0 +ApertureHeight 0.015 +DepthOfField 0 +FocalDistance 1 +LensFStop 4 +DiaphragmSides 0 +DiaphragmRotation 0 +AASamples 1 +Sampler 1 +UseGlobalResolution 0 +UseGlobalMask 0 +UseGlobalBlur 0 +Plugin CameraHandler 1 Perspective +EndPlugin + +GlobalFrameSize 640 480 +GlobalMultiplier 1.0 +GlobalFieldRendering 0 +GlobalMotionBlur 0 +GlobalMaskPosition 0 0 640 480 +GlobalFilmHeight 0.015 +GlobalPixelAspect 1 + +Antialiasing 0 +AntiAliasingLevel -1 +ReconstructionFilter 0 +AdaptiveSampling 0 + +SolidBackdrop 1 +BackdropColor 0 0 0 +ZenithColor 0 0.1569 0.3137 +SkyColor 0.4706 0.7059 0.9412 +GroundColor 0.1961 0.1569 0.1176 +NadirColor 0.3922 0.3137 0.2353 +FogType 0 +FogMinDistance 0 +FogMaxDistance 1 +FogMinAmount 0 +FogMaxAmount 1 +FogColor 0.5098 0.5098 0.549 +BackdropFog 0 +VolumeClipDiscance 0.1 +DynamicRangeMin 0 +DynamicRangeLimit 1 +DitherIntensity 1 +AnimatedDither 0 + +RenderMode 2 +RayTraceEffects 0 +DepthBufferAA 0 +RenderLines 1 +RayRecursionLimit 16 +RayPrecision 6 +RayCutoff 0.01 +DataOverlayLabel +SaveRGB 0 +SaveAlpha 0 + +ViewConfiguration 0 +DefineView 0 +ViewType 7 +ViewLevel 5 +ViewAimpoint 0 0 0 +ViewRotation -17.2 18 0 +ViewZoomFactor 4 +ViewXRay 0 +ViewMBDofPreview 0 +ViewHeadlight 0 + +GridNumber 80 +GridSize 1 +CameraViewBG 0 +ShowMotionPath 1 +ShowFogRadius 0 +ShowFogEffect 0 +ShowFieldChart 0 +OverlayColor_fv 0 0 0 +MeshBackgroundGroup 1 + +CurrentObject 0 +CurrentLight 0 +CurrentCamera 0 +GraphEditorData +{ GraphEd_Favorites +} +{ GE_Expression_Lib + 1 +} +ImageEditorData +NumberOfClips 0 diff --git a/test/models/LWS/move_xz_linear.lws b/test/models/LWS/move_xz_linear.lws new file mode 100644 index 000000000..fed06e935 --- /dev/null +++ b/test/models/LWS/move_xz_linear.lws @@ -0,0 +1,474 @@ +LWSC +5 + +RenderRangeType 0 +FirstFrame 1 +LastFrame 120 +FrameStep 1 +RenderRangeObject 0 +RenderRangeArbitrary 1-60 +PreviewFirstFrame 0 +PreviewLastFrame 120 +PreviewFrameStep 1 +CurrentFrame 9 +FramesPerSecond 30 +ChangeScene 0 + +LoadObjectLayer 1 10000000 simple_cube.lwo +ChangeObject 0 +ShowObject 7 -1 0.376471 0.878431 0.941176 +Group 0 +ObjectMotion +NumChannels 9 +Channel 0 +{ Envelope + 3 + Key 0 0 0 0 0 0 0 2.0144942798797212 0 + Key 1.924918483918713 0.66666666666666663 3 0 0 0 -0.17433448632558185 -0.3486689726511637 0 + Key -0.52300345897674561 2 3 0 0 0 -2.4474120653818376 0 0 + Behaviors 1 1 +} +Channel 1 +{ Envelope + 1 + Key 0 0 0 0 0 0 0 0 0 + Behaviors 1 1 +} +Channel 2 +{ Envelope + 3 + Key 0 0 0 0 0 0 0 -2.6555634816222775 0 + Key -2.6561167240142822 1.3333333333333333 3 0 0 0 -0.043056378768120331 -0.062782856771785217 0 + Key -0.095800442759067794 2.9666666666666668 3 0 0 0 2.5416503021393155 0 0 + Behaviors 1 1 +} +Channel 3 +{ Envelope + 1 + Key 0 0 0 0 0 0 0 0 0 + Behaviors 1 1 +} +Channel 4 +{ Envelope + 1 + Key 0 0 0 0 0 0 0 0 0 + Behaviors 1 1 +} +Channel 5 +{ Envelope + 1 + Key 0 0 0 0 0 0 0 0 0 + Behaviors 1 1 +} +Channel 6 +{ Envelope + 1 + Key 1 0 0 0 0 0 0 0 0 + Behaviors 1 1 +} +Channel 7 +{ Envelope + 1 + Key 1 0 0 0 0 0 0 0 0 + Behaviors 1 1 +} +Channel 8 +{ Envelope + 1 + Key 1 0 0 0 0 0 0 0 0 + Behaviors 1 1 +} +IKInitCustomFrame 0 +GoalStrength 1 +IKFKBlending 0 +IKSoftMin 0.25 +IKSoftMax 0.75 +CtrlPosItemBlend 1 +CtrlRotItemBlend 1 +CtrlScaleItemBlend 1 + +PathAlignLookAhead 0.033 +PathAlignMaxLookSteps 10 +PathAlignReliableDist 0.001 +IKInitialState 0 +SubPatchLevel 3 3 +APSDisplay +{ APS + Version 1 + Method 0 + { VParm + { ObjectLevel + 0 + { VariantParameter + 3 + 0 + { ParameterValue + 3 + 0 + } + } + } + { PolygonLevel + 0 + { VariantParameter + 3 + 0 + { ParameterValue + 3 + 0 + } + } + } + { PolygonPixelSize + 0 + { VariantParameter + 3 + 0 + { ParameterValue + 256 + 0 + } + } + } + } +} +APSRender +{ APS + Version 1 + Method 0 + { VParm + { ObjectLevel + 0 + { VariantParameter + 3 + 0 + { ParameterValue + 3 + 0 + } + } + } + { PolygonLevel + 0 + { VariantParameter + 3 + 0 + { ParameterValue + 3 + 0 + } + } + } + { PolygonPixelSize + 0 + { VariantParameter + 3 + 0 + { ParameterValue + 256 + 0 + } + } + } + } +} +NodeDisplacement 0 +{ Nodal_Block + { Root + Location 0 0 + Zoom 1 + Disabled 1 + } + Version 1 + { Nodes + Server "Displacement" + { Tag + RealName "Displacement" + Name "Displacement" + Coordinates -10 -10 + Mode 1 + { Data + } + Preview "" + Comment "" + } + } + { Connections + } +} +NodeDisplacementOrder 0 +UseObjGI 0 +ObjGIRadiosityRays 64 +ObjGISecondaryBounceRays 16 +ObjGIRadiosityTolerance 0.292893 +ObjGIMinPixelSpacing 4.000000 +ObjGIMaxPixelSpacing 100.000000 +ShadowOptions 7 + +AmbientColor 1 1 1 +AmbientIntensity 0.05 +DoubleSidedAreaLights 1 +RadiosityType 2 +RadiosityInterpolated 1 +RadiosityTransparency 0 +RadiosityIntensity 1 +RadiosityTolerance 0.2928932 +RadiosityRays 64 +SecondaryBounceRays 16 +RadiosityMinPixelSpacing 4 +RadiosityMaxPixelSpacing 100 +RadiosityMultiplier 1 +RadiosityDirectionalRays 0 +RadiosityUseGradients 0 +RadiosityUseBehindTest 1 +BlurRadiosity 1 +RadiosityFlags 0 +RadiosityCacheModulus 1 +RadiosityCacheFilePath radiosity.cache +PixelFilterForceMT 0 + +AddLight 20000000 +LightName Light +ShowLight 1 -1 0.941176 0.376471 0.941176 +LightMotion +NumChannels 9 +Channel 0 +{ Envelope + 1 + Key -2 0 0 0 0 0 0 0 0 + Behaviors 1 1 +} +Channel 1 +{ Envelope + 1 + Key 2 0 0 0 0 0 0 0 0 + Behaviors 1 1 +} +Channel 2 +{ Envelope + 1 + Key -2 0 0 0 0 0 0 0 0 + Behaviors 1 1 +} +Channel 3 +{ Envelope + 1 + Key 0.78539813999999997 0 0 0 0 0 0 0 0 + Behaviors 1 1 +} +Channel 4 +{ Envelope + 1 + Key 0.61086521999999999 0 0 0 0 0 0 0 0 + Behaviors 1 1 +} +Channel 5 +{ Envelope + 1 + Key 0 0 0 0 0 0 0 0 0 + Behaviors 1 1 +} +Channel 6 +{ Envelope + 1 + Key 1 0 0 0 0 0 0 0 0 + Behaviors 1 1 +} +Channel 7 +{ Envelope + 1 + Key 1 0 0 0 0 0 0 0 0 + Behaviors 1 1 +} +Channel 8 +{ Envelope + 1 + Key 1 0 0 0 0 0 0 0 0 + Behaviors 1 1 +} +IKInitCustomFrame 0 +GoalStrength 1 +IKFKBlending 0 +IKSoftMin 0.25 +IKSoftMax 0.75 +CtrlPosItemBlend 1 +CtrlRotItemBlend 1 +CtrlScaleItemBlend 1 + +PathAlignLookAhead 0.033 +PathAlignMaxLookSteps 10 +PathAlignReliableDist 0.001 +IKInitialState 0 +LightColor 1 1 1 +LightIntensity 1 +AffectCaustics 1 +LightType 0 +LensFlare 0 +FlareIntensity 0.5 +FlareDissolve 0 +LensFlareFade 4 +LensFlareOptions 11 +FlareRingColor 0.3137 0.0784 0.0392 +FlareRingSize 0.22 +FlareRandStreakInt 0.03 +FlareRandStreakDens 50 +FlareRandStreakSharp 6 +ShadowType 1 +ShadowColor 0 0 0 +Plugin LightHandler 1 DistantLight +EndPlugin + +AddCamera 30000000 +CameraName Camera +ShowCamera 1 -1 0.125490 0.878431 0.125490 +CameraMotion +NumChannels 6 +Channel 0 +{ Envelope + 1 + Key -0.10000002384185791 0 0 0 0 0 0 0 0 + Behaviors 1 1 +} +Channel 1 +{ Envelope + 1 + Key 0.94999998807907104 0 0 0 0 0 0 0 0 + Behaviors 1 1 +} +Channel 2 +{ Envelope + 1 + Key -6.384000301361084 0 0 0 0 0 0 0 0 + Behaviors 1 1 +} +Channel 3 +{ Envelope + 1 + Key 0 0 0 0 0 0 0 0 0 + Behaviors 1 1 +} +Channel 4 +{ Envelope + 1 + Key 0 0 0 0 0 0 0 0 0 + Behaviors 1 1 +} +Channel 5 +{ Envelope + 1 + Key 0 0 0 0 0 0 0 0 0 + Behaviors 1 1 +} +IKInitCustomFrame 0 +GoalStrength 1 +IKFKBlending 0 +IKSoftMin 0.25 +IKSoftMax 0.75 +CtrlPosItemBlend 1 +CtrlRotItemBlend 1 +CtrlScaleItemBlend 1 + +PathAlignLookAhead 0.033 +PathAlignMaxLookSteps 10 +PathAlignReliableDist 0.001 +IKInitialState 0 +ZoomFactor 3.2 +ZoomType 1 +ResolutionMultiplier 1.0 +FrameSize 640 480 +PixelAspect 1 +MaskPosition 0 0 640 480 +MotionBlur 0 +MotionBlurPasses 1 +ShutterEfficiency 1 +Oversampling 0 +FieldRendering 0 +ApertureHeight 0.015 +DepthOfField 0 +FocalDistance 1 +LensFStop 4 +DiaphragmSides 0 +DiaphragmRotation 0 +AASamples 1 +Sampler 1 +UseGlobalResolution 0 +UseGlobalMask 0 +UseGlobalBlur 0 +Plugin CameraHandler 1 Perspective +EndPlugin + +GlobalFrameSize 640 480 +GlobalMultiplier 1.0 +GlobalFieldRendering 0 +GlobalMotionBlur 0 +GlobalMaskPosition 0 0 640 480 +GlobalFilmHeight 0.015 +GlobalPixelAspect 1 + +Antialiasing 0 +AntiAliasingLevel -1 +ReconstructionFilter 0 +AdaptiveSampling 0 + +SolidBackdrop 1 +BackdropColor 0 0 0 +ZenithColor 0 0.1569 0.3137 +SkyColor 0.4706 0.7059 0.9412 +GroundColor 0.1961 0.1569 0.1176 +NadirColor 0.3922 0.3137 0.2353 +FogType 0 +FogMinDistance 0 +FogMaxDistance 1 +FogMinAmount 0 +FogMaxAmount 1 +FogColor 0.5098 0.5098 0.549 +BackdropFog 0 +VolumeClipDiscance 0.1 +DynamicRangeMin 0 +DynamicRangeLimit 1 +DitherIntensity 1 +AnimatedDither 0 + +RenderMode 2 +RayTraceEffects 0 +DepthBufferAA 0 +RenderLines 1 +RayRecursionLimit 16 +RayPrecision 6 +RayCutoff 0.01 +DataOverlayLabel +SaveRGB 0 +SaveAlpha 0 + +ViewConfiguration 0 +DefineView 0 +ViewType 7 +ViewLevel 5 +ViewAimpoint 0 0 0 +ViewRotation -17.2 18 0 +ViewZoomFactor 4 +ViewXRay 0 +ViewMBDofPreview 0 +ViewHeadlight 0 + +GridNumber 80 +GridSize 1 +CameraViewBG 0 +ShowMotionPath 1 +ShowFogRadius 0 +ShowFogEffect 0 +ShowFieldChart 0 +OverlayColor_fv 0 0 0 +MeshBackgroundGroup 1 + +CurrentObject 0 +CurrentLight 0 +CurrentCamera 0 +GraphEditorData +{ GraphEd_Favorites +} +{ GE_Expression_Lib + 1 +} +ImageEditorData +NumberOfClips 0 diff --git a/test/models/LWS/move_xz_spline.lws b/test/models/LWS/move_xz_spline.lws new file mode 100644 index 000000000..de16a958d --- /dev/null +++ b/test/models/LWS/move_xz_spline.lws @@ -0,0 +1,474 @@ +LWSC +5 + +RenderRangeType 0 +FirstFrame 1 +LastFrame 120 +FrameStep 1 +RenderRangeObject 0 +RenderRangeArbitrary 1-60 +PreviewFirstFrame 0 +PreviewLastFrame 120 +PreviewFrameStep 1 +CurrentFrame 0 +FramesPerSecond 30 +ChangeScene 0 + +LoadObjectLayer 1 10000000 simple_cube.lwo +ChangeObject 0 +ShowObject 7 -1 0.376471 0.878431 0.941176 +Group 0 +ObjectMotion +NumChannels 9 +Channel 0 +{ Envelope + 3 + Key 0 0 0 0 0 0 0 2.0144942798797212 0 + Key 2.0153336524963379 0.66666666666666663 0 0 0 0 -0.17433448632558185 -0.3486689726511637 0 + Key -0.52300345897674561 2 0 0 0 0 -2.5378084013894608 0 0 + Behaviors 1 1 +} +Channel 1 +{ Envelope + 1 + Key 0 0 0 0 0 0 0 0 0 + Behaviors 1 1 +} +Channel 2 +{ Envelope + 3 + Key 0 0 0 0 0 0 0 -2.6555634816222775 0 + Key -2.6561167240142822 1.3333333333333333 0 0 0 0 -0.051251311650436913 -0.062782856771785217 0 + Key -0.11403416842222214 2.9666666666666668 0 0 0 0 2.5416503021393155 0 0 + Behaviors 1 1 +} +Channel 3 +{ Envelope + 1 + Key 0 0 0 0 0 0 0 0 0 + Behaviors 1 1 +} +Channel 4 +{ Envelope + 1 + Key 0 0 0 0 0 0 0 0 0 + Behaviors 1 1 +} +Channel 5 +{ Envelope + 1 + Key 0 0 0 0 0 0 0 0 0 + Behaviors 1 1 +} +Channel 6 +{ Envelope + 1 + Key 1 0 0 0 0 0 0 0 0 + Behaviors 1 1 +} +Channel 7 +{ Envelope + 1 + Key 1 0 0 0 0 0 0 0 0 + Behaviors 1 1 +} +Channel 8 +{ Envelope + 1 + Key 1 0 0 0 0 0 0 0 0 + Behaviors 1 1 +} +IKInitCustomFrame 0 +GoalStrength 1 +IKFKBlending 0 +IKSoftMin 0.25 +IKSoftMax 0.75 +CtrlPosItemBlend 1 +CtrlRotItemBlend 1 +CtrlScaleItemBlend 1 + +PathAlignLookAhead 0.033 +PathAlignMaxLookSteps 10 +PathAlignReliableDist 0.001 +IKInitialState 0 +SubPatchLevel 3 3 +APSDisplay +{ APS + Version 1 + Method 0 + { VParm + { ObjectLevel + 0 + { VariantParameter + 3 + 0 + { ParameterValue + 3 + 0 + } + } + } + { PolygonLevel + 0 + { VariantParameter + 3 + 0 + { ParameterValue + 3 + 0 + } + } + } + { PolygonPixelSize + 0 + { VariantParameter + 3 + 0 + { ParameterValue + 256 + 0 + } + } + } + } +} +APSRender +{ APS + Version 1 + Method 0 + { VParm + { ObjectLevel + 0 + { VariantParameter + 3 + 0 + { ParameterValue + 3 + 0 + } + } + } + { PolygonLevel + 0 + { VariantParameter + 3 + 0 + { ParameterValue + 3 + 0 + } + } + } + { PolygonPixelSize + 0 + { VariantParameter + 3 + 0 + { ParameterValue + 256 + 0 + } + } + } + } +} +NodeDisplacement 0 +{ Nodal_Block + { Root + Location 0 0 + Zoom 1 + Disabled 1 + } + Version 1 + { Nodes + Server "Displacement" + { Tag + RealName "Displacement" + Name "Displacement" + Coordinates -10 -10 + Mode 1 + { Data + } + Preview "" + Comment "" + } + } + { Connections + } +} +NodeDisplacementOrder 0 +UseObjGI 0 +ObjGIRadiosityRays 64 +ObjGISecondaryBounceRays 16 +ObjGIRadiosityTolerance 0.292893 +ObjGIMinPixelSpacing 4.000000 +ObjGIMaxPixelSpacing 100.000000 +ShadowOptions 7 + +AmbientColor 1 1 1 +AmbientIntensity 0.05 +DoubleSidedAreaLights 1 +RadiosityType 2 +RadiosityInterpolated 1 +RadiosityTransparency 0 +RadiosityIntensity 1 +RadiosityTolerance 0.2928932 +RadiosityRays 64 +SecondaryBounceRays 16 +RadiosityMinPixelSpacing 4 +RadiosityMaxPixelSpacing 100 +RadiosityMultiplier 1 +RadiosityDirectionalRays 0 +RadiosityUseGradients 0 +RadiosityUseBehindTest 1 +BlurRadiosity 1 +RadiosityFlags 0 +RadiosityCacheModulus 1 +RadiosityCacheFilePath radiosity.cache +PixelFilterForceMT 0 + +AddLight 20000000 +LightName Light +ShowLight 1 -1 0.941176 0.376471 0.941176 +LightMotion +NumChannels 9 +Channel 0 +{ Envelope + 1 + Key -2 0 0 0 0 0 0 0 0 + Behaviors 1 1 +} +Channel 1 +{ Envelope + 1 + Key 2 0 0 0 0 0 0 0 0 + Behaviors 1 1 +} +Channel 2 +{ Envelope + 1 + Key -2 0 0 0 0 0 0 0 0 + Behaviors 1 1 +} +Channel 3 +{ Envelope + 1 + Key 0.78539813999999997 0 0 0 0 0 0 0 0 + Behaviors 1 1 +} +Channel 4 +{ Envelope + 1 + Key 0.61086521999999999 0 0 0 0 0 0 0 0 + Behaviors 1 1 +} +Channel 5 +{ Envelope + 1 + Key 0 0 0 0 0 0 0 0 0 + Behaviors 1 1 +} +Channel 6 +{ Envelope + 1 + Key 1 0 0 0 0 0 0 0 0 + Behaviors 1 1 +} +Channel 7 +{ Envelope + 1 + Key 1 0 0 0 0 0 0 0 0 + Behaviors 1 1 +} +Channel 8 +{ Envelope + 1 + Key 1 0 0 0 0 0 0 0 0 + Behaviors 1 1 +} +IKInitCustomFrame 0 +GoalStrength 1 +IKFKBlending 0 +IKSoftMin 0.25 +IKSoftMax 0.75 +CtrlPosItemBlend 1 +CtrlRotItemBlend 1 +CtrlScaleItemBlend 1 + +PathAlignLookAhead 0.033 +PathAlignMaxLookSteps 10 +PathAlignReliableDist 0.001 +IKInitialState 0 +LightColor 1 1 1 +LightIntensity 1 +AffectCaustics 1 +LightType 0 +LensFlare 0 +FlareIntensity 0.5 +FlareDissolve 0 +LensFlareFade 4 +LensFlareOptions 11 +FlareRingColor 0.3137 0.0784 0.0392 +FlareRingSize 0.22 +FlareRandStreakInt 0.03 +FlareRandStreakDens 50 +FlareRandStreakSharp 6 +ShadowType 1 +ShadowColor 0 0 0 +Plugin LightHandler 1 DistantLight +EndPlugin + +AddCamera 30000000 +CameraName Camera +ShowCamera 1 -1 0.125490 0.878431 0.125490 +CameraMotion +NumChannels 6 +Channel 0 +{ Envelope + 1 + Key -0.10000002384185791 0 0 0 0 0 0 0 0 + Behaviors 1 1 +} +Channel 1 +{ Envelope + 1 + Key 0.94999998807907104 0 0 0 0 0 0 0 0 + Behaviors 1 1 +} +Channel 2 +{ Envelope + 1 + Key -6.384000301361084 0 0 0 0 0 0 0 0 + Behaviors 1 1 +} +Channel 3 +{ Envelope + 1 + Key 0 0 0 0 0 0 0 0 0 + Behaviors 1 1 +} +Channel 4 +{ Envelope + 1 + Key 0 0 0 0 0 0 0 0 0 + Behaviors 1 1 +} +Channel 5 +{ Envelope + 1 + Key 0 0 0 0 0 0 0 0 0 + Behaviors 1 1 +} +IKInitCustomFrame 0 +GoalStrength 1 +IKFKBlending 0 +IKSoftMin 0.25 +IKSoftMax 0.75 +CtrlPosItemBlend 1 +CtrlRotItemBlend 1 +CtrlScaleItemBlend 1 + +PathAlignLookAhead 0.033 +PathAlignMaxLookSteps 10 +PathAlignReliableDist 0.001 +IKInitialState 0 +ZoomFactor 3.2 +ZoomType 1 +ResolutionMultiplier 1.0 +FrameSize 640 480 +PixelAspect 1 +MaskPosition 0 0 640 480 +MotionBlur 0 +MotionBlurPasses 1 +ShutterEfficiency 1 +Oversampling 0 +FieldRendering 0 +ApertureHeight 0.015 +DepthOfField 0 +FocalDistance 1 +LensFStop 4 +DiaphragmSides 0 +DiaphragmRotation 0 +AASamples 1 +Sampler 1 +UseGlobalResolution 0 +UseGlobalMask 0 +UseGlobalBlur 0 +Plugin CameraHandler 1 Perspective +EndPlugin + +GlobalFrameSize 640 480 +GlobalMultiplier 1.0 +GlobalFieldRendering 0 +GlobalMotionBlur 0 +GlobalMaskPosition 0 0 640 480 +GlobalFilmHeight 0.015 +GlobalPixelAspect 1 + +Antialiasing 0 +AntiAliasingLevel -1 +ReconstructionFilter 0 +AdaptiveSampling 0 + +SolidBackdrop 1 +BackdropColor 0 0 0 +ZenithColor 0 0.1569 0.3137 +SkyColor 0.4706 0.7059 0.9412 +GroundColor 0.1961 0.1569 0.1176 +NadirColor 0.3922 0.3137 0.2353 +FogType 0 +FogMinDistance 0 +FogMaxDistance 1 +FogMinAmount 0 +FogMaxAmount 1 +FogColor 0.5098 0.5098 0.549 +BackdropFog 0 +VolumeClipDiscance 0.1 +DynamicRangeMin 0 +DynamicRangeLimit 1 +DitherIntensity 1 +AnimatedDither 0 + +RenderMode 2 +RayTraceEffects 0 +DepthBufferAA 0 +RenderLines 1 +RayRecursionLimit 16 +RayPrecision 6 +RayCutoff 0.01 +DataOverlayLabel +SaveRGB 0 +SaveAlpha 0 + +ViewConfiguration 0 +DefineView 0 +ViewType 7 +ViewLevel 5 +ViewAimpoint 0 0 0 +ViewRotation -17.2 18 0 +ViewZoomFactor 4 +ViewXRay 0 +ViewMBDofPreview 0 +ViewHeadlight 0 + +GridNumber 80 +GridSize 1 +CameraViewBG 0 +ShowMotionPath 1 +ShowFogRadius 0 +ShowFogEffect 0 +ShowFieldChart 0 +OverlayColor_fv 0 0 0 +MeshBackgroundGroup 1 + +CurrentObject 0 +CurrentLight 0 +CurrentCamera 0 +GraphEditorData +{ GraphEd_Favorites +} +{ GE_Expression_Lib + 1 +} +ImageEditorData +NumberOfClips 0 diff --git a/test/models/LWS/move_xz_stepped.lws b/test/models/LWS/move_xz_stepped.lws new file mode 100644 index 000000000..5f4e7f9ef --- /dev/null +++ b/test/models/LWS/move_xz_stepped.lws @@ -0,0 +1,474 @@ +LWSC +5 + +RenderRangeType 0 +FirstFrame 1 +LastFrame 120 +FrameStep 1 +RenderRangeObject 0 +RenderRangeArbitrary 1-60 +PreviewFirstFrame 0 +PreviewLastFrame 120 +PreviewFrameStep 1 +CurrentFrame 10 +FramesPerSecond 30 +ChangeScene 0 + +LoadObjectLayer 1 10000000 simple_cube.lwo +ChangeObject 0 +ShowObject 7 -1 0.376471 0.878431 0.941176 +Group 0 +ObjectMotion +NumChannels 9 +Channel 0 +{ Envelope + 3 + Key 0 0 0 0 0 0 0 2.0144942798797212 0 + Key 1.924918483918713 0.66666666666666663 4 0 0 0 -0.17433448632558185 -0.3486689726511637 0 + Key -0.52300345897674561 2 4 0 0 0 -2.4474120653818376 0 0 + Behaviors 1 1 +} +Channel 1 +{ Envelope + 1 + Key 0 0 0 0 0 0 0 0 0 + Behaviors 1 1 +} +Channel 2 +{ Envelope + 3 + Key 0 0 0 0 0 0 0 -2.6555634816222775 0 + Key -2.6561167240142822 1.3333333333333333 4 0 0 0 -0.043056378768120331 -0.062782856771785217 0 + Key -0.095800442759067794 2.9666666666666668 4 0 0 0 2.5416503021393155 0 0 + Behaviors 1 1 +} +Channel 3 +{ Envelope + 1 + Key 0 0 0 0 0 0 0 0 0 + Behaviors 1 1 +} +Channel 4 +{ Envelope + 1 + Key 0 0 0 0 0 0 0 0 0 + Behaviors 1 1 +} +Channel 5 +{ Envelope + 1 + Key 0 0 0 0 0 0 0 0 0 + Behaviors 1 1 +} +Channel 6 +{ Envelope + 1 + Key 1 0 0 0 0 0 0 0 0 + Behaviors 1 1 +} +Channel 7 +{ Envelope + 1 + Key 1 0 0 0 0 0 0 0 0 + Behaviors 1 1 +} +Channel 8 +{ Envelope + 1 + Key 1 0 0 0 0 0 0 0 0 + Behaviors 1 1 +} +IKInitCustomFrame 0 +GoalStrength 1 +IKFKBlending 0 +IKSoftMin 0.25 +IKSoftMax 0.75 +CtrlPosItemBlend 1 +CtrlRotItemBlend 1 +CtrlScaleItemBlend 1 + +PathAlignLookAhead 0.033 +PathAlignMaxLookSteps 10 +PathAlignReliableDist 0.001 +IKInitialState 0 +SubPatchLevel 3 3 +APSDisplay +{ APS + Version 1 + Method 0 + { VParm + { ObjectLevel + 0 + { VariantParameter + 3 + 0 + { ParameterValue + 3 + 0 + } + } + } + { PolygonLevel + 0 + { VariantParameter + 3 + 0 + { ParameterValue + 3 + 0 + } + } + } + { PolygonPixelSize + 0 + { VariantParameter + 3 + 0 + { ParameterValue + 256 + 0 + } + } + } + } +} +APSRender +{ APS + Version 1 + Method 0 + { VParm + { ObjectLevel + 0 + { VariantParameter + 3 + 0 + { ParameterValue + 3 + 0 + } + } + } + { PolygonLevel + 0 + { VariantParameter + 3 + 0 + { ParameterValue + 3 + 0 + } + } + } + { PolygonPixelSize + 0 + { VariantParameter + 3 + 0 + { ParameterValue + 256 + 0 + } + } + } + } +} +NodeDisplacement 0 +{ Nodal_Block + { Root + Location 0 0 + Zoom 1 + Disabled 1 + } + Version 1 + { Nodes + Server "Displacement" + { Tag + RealName "Displacement" + Name "Displacement" + Coordinates -10 -10 + Mode 1 + { Data + } + Preview "" + Comment "" + } + } + { Connections + } +} +NodeDisplacementOrder 0 +UseObjGI 0 +ObjGIRadiosityRays 64 +ObjGISecondaryBounceRays 16 +ObjGIRadiosityTolerance 0.292893 +ObjGIMinPixelSpacing 4.000000 +ObjGIMaxPixelSpacing 100.000000 +ShadowOptions 7 + +AmbientColor 1 1 1 +AmbientIntensity 0.05 +DoubleSidedAreaLights 1 +RadiosityType 2 +RadiosityInterpolated 1 +RadiosityTransparency 0 +RadiosityIntensity 1 +RadiosityTolerance 0.2928932 +RadiosityRays 64 +SecondaryBounceRays 16 +RadiosityMinPixelSpacing 4 +RadiosityMaxPixelSpacing 100 +RadiosityMultiplier 1 +RadiosityDirectionalRays 0 +RadiosityUseGradients 0 +RadiosityUseBehindTest 1 +BlurRadiosity 1 +RadiosityFlags 0 +RadiosityCacheModulus 1 +RadiosityCacheFilePath radiosity.cache +PixelFilterForceMT 0 + +AddLight 20000000 +LightName Light +ShowLight 1 -1 0.941176 0.376471 0.941176 +LightMotion +NumChannels 9 +Channel 0 +{ Envelope + 1 + Key -2 0 0 0 0 0 0 0 0 + Behaviors 1 1 +} +Channel 1 +{ Envelope + 1 + Key 2 0 0 0 0 0 0 0 0 + Behaviors 1 1 +} +Channel 2 +{ Envelope + 1 + Key -2 0 0 0 0 0 0 0 0 + Behaviors 1 1 +} +Channel 3 +{ Envelope + 1 + Key 0.78539813999999997 0 0 0 0 0 0 0 0 + Behaviors 1 1 +} +Channel 4 +{ Envelope + 1 + Key 0.61086521999999999 0 0 0 0 0 0 0 0 + Behaviors 1 1 +} +Channel 5 +{ Envelope + 1 + Key 0 0 0 0 0 0 0 0 0 + Behaviors 1 1 +} +Channel 6 +{ Envelope + 1 + Key 1 0 0 0 0 0 0 0 0 + Behaviors 1 1 +} +Channel 7 +{ Envelope + 1 + Key 1 0 0 0 0 0 0 0 0 + Behaviors 1 1 +} +Channel 8 +{ Envelope + 1 + Key 1 0 0 0 0 0 0 0 0 + Behaviors 1 1 +} +IKInitCustomFrame 0 +GoalStrength 1 +IKFKBlending 0 +IKSoftMin 0.25 +IKSoftMax 0.75 +CtrlPosItemBlend 1 +CtrlRotItemBlend 1 +CtrlScaleItemBlend 1 + +PathAlignLookAhead 0.033 +PathAlignMaxLookSteps 10 +PathAlignReliableDist 0.001 +IKInitialState 0 +LightColor 1 1 1 +LightIntensity 1 +AffectCaustics 1 +LightType 0 +LensFlare 0 +FlareIntensity 0.5 +FlareDissolve 0 +LensFlareFade 4 +LensFlareOptions 11 +FlareRingColor 0.3137 0.0784 0.0392 +FlareRingSize 0.22 +FlareRandStreakInt 0.03 +FlareRandStreakDens 50 +FlareRandStreakSharp 6 +ShadowType 1 +ShadowColor 0 0 0 +Plugin LightHandler 1 DistantLight +EndPlugin + +AddCamera 30000000 +CameraName Camera +ShowCamera 1 -1 0.125490 0.878431 0.125490 +CameraMotion +NumChannels 6 +Channel 0 +{ Envelope + 1 + Key -0.10000002384185791 0 0 0 0 0 0 0 0 + Behaviors 1 1 +} +Channel 1 +{ Envelope + 1 + Key 0.94999998807907104 0 0 0 0 0 0 0 0 + Behaviors 1 1 +} +Channel 2 +{ Envelope + 1 + Key -6.384000301361084 0 0 0 0 0 0 0 0 + Behaviors 1 1 +} +Channel 3 +{ Envelope + 1 + Key 0 0 0 0 0 0 0 0 0 + Behaviors 1 1 +} +Channel 4 +{ Envelope + 1 + Key 0 0 0 0 0 0 0 0 0 + Behaviors 1 1 +} +Channel 5 +{ Envelope + 1 + Key 0 0 0 0 0 0 0 0 0 + Behaviors 1 1 +} +IKInitCustomFrame 0 +GoalStrength 1 +IKFKBlending 0 +IKSoftMin 0.25 +IKSoftMax 0.75 +CtrlPosItemBlend 1 +CtrlRotItemBlend 1 +CtrlScaleItemBlend 1 + +PathAlignLookAhead 0.033 +PathAlignMaxLookSteps 10 +PathAlignReliableDist 0.001 +IKInitialState 0 +ZoomFactor 3.2 +ZoomType 1 +ResolutionMultiplier 1.0 +FrameSize 640 480 +PixelAspect 1 +MaskPosition 0 0 640 480 +MotionBlur 0 +MotionBlurPasses 1 +ShutterEfficiency 1 +Oversampling 0 +FieldRendering 0 +ApertureHeight 0.015 +DepthOfField 0 +FocalDistance 1 +LensFStop 4 +DiaphragmSides 0 +DiaphragmRotation 0 +AASamples 1 +Sampler 1 +UseGlobalResolution 0 +UseGlobalMask 0 +UseGlobalBlur 0 +Plugin CameraHandler 1 Perspective +EndPlugin + +GlobalFrameSize 640 480 +GlobalMultiplier 1.0 +GlobalFieldRendering 0 +GlobalMotionBlur 0 +GlobalMaskPosition 0 0 640 480 +GlobalFilmHeight 0.015 +GlobalPixelAspect 1 + +Antialiasing 0 +AntiAliasingLevel -1 +ReconstructionFilter 0 +AdaptiveSampling 0 + +SolidBackdrop 1 +BackdropColor 0 0 0 +ZenithColor 0 0.1569 0.3137 +SkyColor 0.4706 0.7059 0.9412 +GroundColor 0.1961 0.1569 0.1176 +NadirColor 0.3922 0.3137 0.2353 +FogType 0 +FogMinDistance 0 +FogMaxDistance 1 +FogMinAmount 0 +FogMaxAmount 1 +FogColor 0.5098 0.5098 0.549 +BackdropFog 0 +VolumeClipDiscance 0.1 +DynamicRangeMin 0 +DynamicRangeLimit 1 +DitherIntensity 1 +AnimatedDither 0 + +RenderMode 2 +RayTraceEffects 0 +DepthBufferAA 0 +RenderLines 1 +RayRecursionLimit 16 +RayPrecision 6 +RayCutoff 0.01 +DataOverlayLabel +SaveRGB 0 +SaveAlpha 0 + +ViewConfiguration 0 +DefineView 0 +ViewType 7 +ViewLevel 5 +ViewAimpoint 0 0 0 +ViewRotation -17.2 18 0 +ViewZoomFactor 4 +ViewXRay 0 +ViewMBDofPreview 0 +ViewHeadlight 0 + +GridNumber 80 +GridSize 1 +CameraViewBG 0 +ShowMotionPath 1 +ShowFogRadius 0 +ShowFogEffect 0 +ShowFieldChart 0 +OverlayColor_fv 0 0 0 +MeshBackgroundGroup 1 + +CurrentObject 0 +CurrentLight 0 +CurrentCamera 0 +GraphEditorData +{ GraphEd_Favorites +} +{ GE_Expression_Lib + 1 +} +ImageEditorData +NumberOfClips 0 diff --git a/test/models/LWS/move_y_pre_ofrep_post_osc.lws b/test/models/LWS/move_y_pre_ofrep_post_osc.lws new file mode 100644 index 000000000..a0f928375 --- /dev/null +++ b/test/models/LWS/move_y_pre_ofrep_post_osc.lws @@ -0,0 +1,480 @@ +LWSC +5 + +RenderRangeType 0 +FirstFrame -240 +LastFrame 240 +FrameStep 1 +RenderRangeObject 0 +RenderRangeArbitrary 1-60 +PreviewFirstFrame -240 +PreviewLastFrame 240 +PreviewFrameStep 1 +CurrentFrame -179 +FramesPerSecond 30 +ChangeScene 0 + +LoadObjectLayer 1 10000000 simple_cube.lwo +ChangeObject 0 +ShowObject 7 -1 0.376471 0.878431 0.941176 +Group 0 +ObjectMotion +NumChannels 9 +Channel 0 +{ Envelope + 2 + Key 0 0 0 0 0 0 0 0 0 + Key 0 1 0 0 0 0 0 0 0 + Behaviors 0 3 +} +Channel 1 +{ Envelope + 3 + Key 0 0 0 0 0 0 0 0 0 + Key 0 1 0 0 0 0 0.58182278100182028 0.40727594670127421 0 + Key 0.98909872770309448 1.7 0 0 0 0 0.98870638389995957 0 0 + Behaviors 4 3 +} +Channel 2 +{ Envelope + 2 + Key 0 0 0 0 0 0 0 0 0 + Key 0 1 0 0 0 0 0 0 0 + Behaviors 1 1 +} +Channel 3 +{ Envelope + 2 + Key 0 0 0 0 0 0 0 0 0 + Key 0 1 0 0 0 0 0 0 0 + Behaviors 1 1 +} +Channel 4 +{ Envelope + 2 + Key 0 0 0 0 0 0 0 0 0 + Key 0 1 0 0 0 0 0 0 0 + Behaviors 1 1 +} +Channel 5 +{ Envelope + 2 + Key 0 0 0 0 0 0 0 0 0 + Key 0 1 0 0 0 0 0 0 0 + Behaviors 1 1 +} +Channel 6 +{ Envelope + 2 + Key 1 0 0 0 0 0 0 0 0 + Key 1 1 0 0 0 0 0 0 0 + Behaviors 1 1 +} +Channel 7 +{ Envelope + 2 + Key 1 0 0 0 0 0 0 0 0 + Key 1 1 0 0 0 0 0 0 0 + Behaviors 1 1 +} +Channel 8 +{ Envelope + 2 + Key 1 0 0 0 0 0 0 0 0 + Key 1 1 0 0 0 0 0 0 0 + Behaviors 1 1 +} +IKInitCustomFrame 0 +GoalStrength 1 +IKFKBlending 0 +IKSoftMin 0.25 +IKSoftMax 0.75 +CtrlPosItemBlend 1 +CtrlRotItemBlend 1 +CtrlScaleItemBlend 1 + +PathAlignLookAhead 0.033 +PathAlignMaxLookSteps 10 +PathAlignReliableDist 0.001 +IKInitialState 0 +SubPatchLevel 3 3 +APSDisplay +{ APS + Version 1 + Method 0 + { VParm + { ObjectLevel + 0 + { VariantParameter + 3 + 0 + { ParameterValue + 3 + 0 + } + } + } + { PolygonLevel + 0 + { VariantParameter + 3 + 0 + { ParameterValue + 3 + 0 + } + } + } + { PolygonPixelSize + 0 + { VariantParameter + 3 + 0 + { ParameterValue + 256 + 0 + } + } + } + } +} +APSRender +{ APS + Version 1 + Method 0 + { VParm + { ObjectLevel + 0 + { VariantParameter + 3 + 0 + { ParameterValue + 3 + 0 + } + } + } + { PolygonLevel + 0 + { VariantParameter + 3 + 0 + { ParameterValue + 3 + 0 + } + } + } + { PolygonPixelSize + 0 + { VariantParameter + 3 + 0 + { ParameterValue + 256 + 0 + } + } + } + } +} +NodeDisplacement 0 +{ Nodal_Block + { Root + Location 0 0 + Zoom 1 + Disabled 1 + } + Version 1 + { Nodes + Server "Displacement" + { Tag + RealName "Displacement" + Name "Displacement" + Coordinates -10 -10 + Mode 1 + { Data + } + Preview "" + Comment "" + } + } + { Connections + } +} +NodeDisplacementOrder 0 +UseObjGI 0 +ObjGIRadiosityRays 64 +ObjGISecondaryBounceRays 16 +ObjGIRadiosityTolerance 0.292893 +ObjGIMinPixelSpacing 4.000000 +ObjGIMaxPixelSpacing 100.000000 +ShadowOptions 7 + +AmbientColor 1 1 1 +AmbientIntensity 0.05 +DoubleSidedAreaLights 1 +RadiosityType 2 +RadiosityInterpolated 1 +RadiosityTransparency 0 +RadiosityIntensity 1 +RadiosityTolerance 0.2928932 +RadiosityRays 64 +SecondaryBounceRays 16 +RadiosityMinPixelSpacing 4 +RadiosityMaxPixelSpacing 100 +RadiosityMultiplier 1 +RadiosityDirectionalRays 0 +RadiosityUseGradients 0 +RadiosityUseBehindTest 1 +BlurRadiosity 1 +RadiosityFlags 0 +RadiosityCacheModulus 1 +RadiosityCacheFilePath radiosity.cache +PixelFilterForceMT 0 + +AddLight 20000000 +LightName Light +ShowLight 1 -1 0.941176 0.376471 0.941176 +LightMotion +NumChannels 9 +Channel 0 +{ Envelope + 1 + Key -2 0 0 0 0 0 0 0 0 + Behaviors 1 1 +} +Channel 1 +{ Envelope + 1 + Key 2 0 0 0 0 0 0 0 0 + Behaviors 1 1 +} +Channel 2 +{ Envelope + 1 + Key -2 0 0 0 0 0 0 0 0 + Behaviors 1 1 +} +Channel 3 +{ Envelope + 1 + Key 0.78539813999999997 0 0 0 0 0 0 0 0 + Behaviors 1 1 +} +Channel 4 +{ Envelope + 1 + Key 0.61086521999999999 0 0 0 0 0 0 0 0 + Behaviors 1 1 +} +Channel 5 +{ Envelope + 1 + Key 0 0 0 0 0 0 0 0 0 + Behaviors 1 1 +} +Channel 6 +{ Envelope + 1 + Key 1 0 0 0 0 0 0 0 0 + Behaviors 1 1 +} +Channel 7 +{ Envelope + 1 + Key 1 0 0 0 0 0 0 0 0 + Behaviors 1 1 +} +Channel 8 +{ Envelope + 1 + Key 1 0 0 0 0 0 0 0 0 + Behaviors 1 1 +} +IKInitCustomFrame 0 +GoalStrength 1 +IKFKBlending 0 +IKSoftMin 0.25 +IKSoftMax 0.75 +CtrlPosItemBlend 1 +CtrlRotItemBlend 1 +CtrlScaleItemBlend 1 + +PathAlignLookAhead 0.033 +PathAlignMaxLookSteps 10 +PathAlignReliableDist 0.001 +IKInitialState 0 +LightColor 1 1 1 +LightIntensity 1 +AffectCaustics 1 +LightType 0 +LensFlare 0 +FlareIntensity 0.5 +FlareDissolve 0 +LensFlareFade 4 +LensFlareOptions 11 +FlareRingColor 0.3137 0.0784 0.0392 +FlareRingSize 0.22 +FlareRandStreakInt 0.03 +FlareRandStreakDens 50 +FlareRandStreakSharp 6 +ShadowType 1 +ShadowColor 0 0 0 +Plugin LightHandler 1 DistantLight +EndPlugin + +AddCamera 30000000 +CameraName Camera +ShowCamera 1 -1 0.125490 0.878431 0.125490 +CameraMotion +NumChannels 6 +Channel 0 +{ Envelope + 1 + Key -0.10000002384185791 0 0 0 0 0 0 0 0 + Behaviors 1 1 +} +Channel 1 +{ Envelope + 1 + Key 0.94999998807907104 0 0 0 0 0 0 0 0 + Behaviors 1 1 +} +Channel 2 +{ Envelope + 1 + Key -6.384000301361084 0 0 0 0 0 0 0 0 + Behaviors 1 1 +} +Channel 3 +{ Envelope + 1 + Key 0 0 0 0 0 0 0 0 0 + Behaviors 1 1 +} +Channel 4 +{ Envelope + 1 + Key 0 0 0 0 0 0 0 0 0 + Behaviors 1 1 +} +Channel 5 +{ Envelope + 1 + Key 0 0 0 0 0 0 0 0 0 + Behaviors 1 1 +} +IKInitCustomFrame 0 +GoalStrength 1 +IKFKBlending 0 +IKSoftMin 0.25 +IKSoftMax 0.75 +CtrlPosItemBlend 1 +CtrlRotItemBlend 1 +CtrlScaleItemBlend 1 + +PathAlignLookAhead 0.033 +PathAlignMaxLookSteps 10 +PathAlignReliableDist 0.001 +IKInitialState 0 +ZoomFactor 3.2 +ZoomType 1 +ResolutionMultiplier 1.0 +FrameSize 640 480 +PixelAspect 1 +MaskPosition 0 0 640 480 +MotionBlur 0 +MotionBlurPasses 1 +ShutterEfficiency 1 +Oversampling 0 +FieldRendering 0 +ApertureHeight 0.015 +DepthOfField 0 +FocalDistance 1 +LensFStop 4 +DiaphragmSides 0 +DiaphragmRotation 0 +AASamples 1 +Sampler 1 +UseGlobalResolution 0 +UseGlobalMask 0 +UseGlobalBlur 0 +Plugin CameraHandler 1 Perspective +EndPlugin + +GlobalFrameSize 640 480 +GlobalMultiplier 1.0 +GlobalFieldRendering 0 +GlobalMotionBlur 0 +GlobalMaskPosition 0 0 640 480 +GlobalFilmHeight 0.015 +GlobalPixelAspect 1 + +Antialiasing 0 +AntiAliasingLevel -1 +ReconstructionFilter 0 +AdaptiveSampling 0 + +SolidBackdrop 1 +BackdropColor 0 0 0 +ZenithColor 0 0.1569 0.3137 +SkyColor 0.4706 0.7059 0.9412 +GroundColor 0.1961 0.1569 0.1176 +NadirColor 0.3922 0.3137 0.2353 +FogType 0 +FogMinDistance 0 +FogMaxDistance 1 +FogMinAmount 0 +FogMaxAmount 1 +FogColor 0.5098 0.5098 0.549 +BackdropFog 0 +VolumeClipDiscance 0.1 +DynamicRangeMin 0 +DynamicRangeLimit 1 +DitherIntensity 1 +AnimatedDither 0 + +RenderMode 2 +RayTraceEffects 0 +DepthBufferAA 0 +RenderLines 1 +RayRecursionLimit 16 +RayPrecision 6 +RayCutoff 0.01 +DataOverlayLabel +SaveRGB 0 +SaveAlpha 0 + +ViewConfiguration 0 +DefineView 0 +ViewType 7 +ViewLevel 5 +ViewAimpoint 0 0 0 +ViewRotation -17.2 18 0 +ViewZoomFactor 4 +ViewXRay 0 +ViewMBDofPreview 0 +ViewHeadlight 0 + +GridNumber 80 +GridSize 1 +CameraViewBG 0 +ShowMotionPath 1 +ShowFogRadius 0 +ShowFogEffect 0 +ShowFieldChart 0 +OverlayColor_fv 0 0 0 +MeshBackgroundGroup 1 + +CurrentObject 0 +CurrentLight 0 +CurrentCamera 0 +GraphEditorData +{ GraphEd_Favorites +} +{ GE_Expression_Lib + 1 +} +ImageEditorData +NumberOfClips 0 diff --git a/test/models/LWS/simple_cube.lwo b/test/models/LWS/simple_cube.lwo new file mode 100644 index 0000000000000000000000000000000000000000..aac49498bd89c08658df249f2dbc371b8c6600f4 GIT binary patch literal 560 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

AtCH89qH4*>YchLE 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 z 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 O4*CDpW&huH$o~ZWecs&w literal 0 HcmV?d00001 diff --git a/test/models/OFF/formatDetection b/test/models/OFF/formatDetection new file mode 100644 index 000000000..597158fd1 --- /dev/null +++ b/test/models/OFF/formatDetection @@ -0,0 +1,16 @@ +OFF +8 6 0 +-0.500000 -0.500000 0.500000 +0.500000 -0.500000 0.500000 +-0.500000 0.500000 0.500000 +0.500000 0.500000 0.500000 +-0.500000 0.500000 -0.500000 +0.500000 0.500000 -0.500000 +-0.500000 -0.500000 -0.500000 +0.500000 -0.500000 -0.500000 +4 0 1 3 2 +4 2 3 5 4 +4 4 5 7 6 +4 6 7 1 0 +4 1 7 5 3 +4 6 0 2 4 diff --git a/test/models/STL/Spider_ascii.stl b/test/models/STL/Spider_ascii.stl new file mode 100644 index 000000000..c91d27bf0 --- /dev/null +++ b/test/models/STL/Spider_ascii.stl @@ -0,0 +1,9578 @@ +solid NoName_1 + facet normal 0.468282 -0.863498 -0.187306 + outer loop + vertex 0.907128 0.646165 0.795193 + vertex 1.655401 1.111567 0.520398 + vertex 0.766146 0.680483 0.284519 + endloop + endfacet + facet normal 0.373241 -0.860316 -0.347200 + outer loop + vertex 1.856645 0.887426 1.218116 + vertex 0.907128 0.646165 0.795193 + vertex 1.313948 0.554956 1.458532 + endloop + endfacet + facet normal -0.148455 -0.953197 -0.263395 + outer loop + vertex 1.655401 1.111567 0.520398 + vertex 1.856645 0.887426 1.218116 + vertex 2.339231 0.936288 0.769292 + endloop + endfacet + facet normal 0.383431 -0.841372 -0.380884 + outer loop + vertex 1.856645 0.887426 1.218116 + vertex 1.655401 1.111567 0.520398 + vertex 0.907128 0.646165 0.795193 + endloop + endfacet + facet normal 0.562677 -0.799798 -0.209085 + outer loop + vertex 0.451615 0.391451 0.543683 + vertex 0.907128 0.646165 0.795193 + vertex 0.766146 0.680483 0.284519 + endloop + endfacet + facet normal 0.807133 -0.364619 -0.464316 + outer loop + vertex 0.681458 0.234029 1.066846 + vertex 0.451615 0.391451 0.543683 + vertex 0.382212 -0.020684 0.746682 + endloop + endfacet + facet normal 0.612119 -0.640684 -0.463502 + outer loop + vertex 0.907128 0.646165 0.795193 + vertex 0.681458 0.234029 1.066846 + vertex 1.313948 0.554956 1.458532 + endloop + endfacet + facet normal 0.613334 -0.640478 -0.462180 + outer loop + vertex 0.681458 0.234029 1.066846 + vertex 0.907128 0.646165 0.795193 + vertex 0.451615 0.391451 0.543683 + endloop + endfacet + facet normal 0.730571 0.000000 -0.682837 + outer loop + vertex 0.681458 -0.275398 1.066846 + vertex 0.681458 0.234029 1.066846 + vertex 0.382212 -0.020684 0.746682 + endloop + endfacet + facet normal 0.622256 0.257774 -0.739155 + outer loop + vertex 1.253999 -0.062053 1.623241 + vertex 0.681458 -0.275398 1.066846 + vertex 1.313948 -0.679062 1.458532 + endloop + endfacet + facet normal 0.600342 -0.260203 -0.756230 + outer loop + vertex 0.681458 0.234029 1.066846 + vertex 1.253999 -0.062053 1.623241 + vertex 1.313948 0.554956 1.458532 + endloop + endfacet + facet normal 0.696922 0.000000 -0.717147 + outer loop + vertex 1.253999 -0.062053 1.623241 + vertex 0.681458 0.234029 1.066846 + vertex 0.681458 -0.275398 1.066846 + endloop + endfacet + facet normal 0.168448 -0.269475 -0.948160 + outer loop + vertex 1.253999 -0.062053 1.623241 + vertex 1.981021 0.300615 1.649329 + vertex 1.313948 0.554956 1.458532 + endloop + endfacet + facet normal 0.168448 0.269475 -0.948160 + outer loop + vertex 1.981021 -0.424722 1.649329 + vertex 1.253999 -0.062053 1.623241 + vertex 1.313948 -0.679062 1.458532 + endloop + endfacet + facet normal -0.248867 0.000000 -0.968538 + outer loop + vertex 1.981021 0.300615 1.649329 + vertex 1.981021 -0.424722 1.649329 + vertex 2.550832 -0.062053 1.502915 + endloop + endfacet + facet normal 0.035860 0.000000 -0.999357 + outer loop + vertex 1.981021 -0.424722 1.649329 + vertex 1.981021 0.300615 1.649329 + vertex 1.253999 -0.062053 1.623241 + endloop + endfacet + facet normal 0.005124 -0.591441 -0.806332 + outer loop + vertex 1.981021 0.300615 1.649329 + vertex 1.856645 0.887426 1.218116 + vertex 1.313948 0.554956 1.458532 + endloop + endfacet + facet normal -0.432703 -0.343308 -0.833611 + outer loop + vertex 2.583668 0.524757 1.244204 + vertex 1.981021 0.300615 1.649329 + vertex 2.550832 -0.062053 1.502915 + endloop + endfacet + facet normal -0.375216 -0.787361 -0.489158 + outer loop + vertex 1.856645 0.887426 1.218116 + vertex 2.583668 0.524757 1.244204 + vertex 2.339231 0.936288 0.769292 + endloop + endfacet + facet normal -0.275769 -0.606463 -0.745757 + outer loop + vertex 2.583668 0.524757 1.244204 + vertex 1.856645 0.887426 1.218116 + vertex 1.981021 0.300615 1.649329 + endloop + endfacet + facet normal -0.241511 -0.380123 -0.892849 + outer loop + vertex 3.114895 -0.062053 1.350339 + vertex 2.583668 0.524757 1.244204 + vertex 2.550832 -0.062053 1.502915 + endloop + endfacet + facet normal -0.950931 -0.278835 0.134094 + outer loop + vertex 2.831748 0.524757 0.562609 + vertex 3.114895 -0.062053 1.350339 + vertex 2.972891 -0.062053 0.343318 + endloop + endfacet + facet normal -0.680310 -0.689831 -0.247613 + outer loop + vertex 2.583668 0.524757 1.244204 + vertex 2.831748 0.524757 0.562609 + vertex 2.339231 0.936288 0.769292 + endloop + endfacet + facet normal -0.694122 -0.674069 -0.252640 + outer loop + vertex 2.831748 0.524757 0.562609 + vertex 2.583668 0.524757 1.244204 + vertex 3.114895 -0.062053 1.350339 + endloop + endfacet + facet normal -0.241511 0.380123 -0.892849 + outer loop + vertex 2.583668 -0.648863 1.244204 + vertex 3.114895 -0.062053 1.350339 + vertex 2.550832 -0.062053 1.502915 + endloop + endfacet + facet normal -0.680310 0.689830 -0.247613 + outer loop + vertex 2.831748 -0.648863 0.562609 + vertex 2.583668 -0.648863 1.244204 + vertex 2.339231 -1.060395 0.769292 + endloop + endfacet + facet normal -0.950931 0.278835 0.134094 + outer loop + vertex 3.114895 -0.062053 1.350339 + vertex 2.831748 -0.648863 0.562609 + vertex 2.972891 -0.062053 0.343318 + endloop + endfacet + facet normal -0.694122 0.674069 -0.252640 + outer loop + vertex 2.831748 -0.648863 0.562609 + vertex 3.114895 -0.062053 1.350339 + vertex 2.583668 -0.648863 1.244204 + endloop + endfacet + facet normal 0.005124 0.591441 -0.806332 + outer loop + vertex 1.856645 -1.011532 1.218116 + vertex 1.981021 -0.424722 1.649329 + vertex 1.313948 -0.679062 1.458532 + endloop + endfacet + facet normal -0.375216 0.787361 -0.489159 + outer loop + vertex 2.583668 -0.648863 1.244204 + vertex 1.856645 -1.011532 1.218116 + vertex 2.339231 -1.060395 0.769292 + endloop + endfacet + facet normal -0.432703 0.343308 -0.833611 + outer loop + vertex 1.981021 -0.424722 1.649329 + vertex 2.583668 -0.648863 1.244204 + vertex 2.550832 -0.062053 1.502915 + endloop + endfacet + facet normal -0.275769 0.606463 -0.745757 + outer loop + vertex 2.583668 -0.648863 1.244204 + vertex 1.981021 -0.424722 1.649329 + vertex 1.856645 -1.011532 1.218116 + endloop + endfacet + facet normal 0.415251 0.870015 -0.265782 + outer loop + vertex 0.907128 -0.687534 0.795193 + vertex 1.856645 -1.011532 1.218116 + vertex 1.313948 -0.679062 1.458532 + endloop + endfacet + facet normal 0.529567 0.823971 -0.201569 + outer loop + vertex 1.655401 -1.235674 0.520398 + vertex 0.907128 -0.687534 0.795193 + vertex 0.766146 -0.721851 0.284519 + endloop + endfacet + facet normal -0.148455 0.953197 -0.263395 + outer loop + vertex 1.856645 -1.011532 1.218116 + vertex 1.655401 -1.235674 0.520398 + vertex 2.339231 -1.060395 0.769292 + endloop + endfacet + facet normal 0.447699 0.805646 -0.387944 + outer loop + vertex 1.655401 -1.235674 0.520398 + vertex 1.856645 -1.011532 1.218116 + vertex 0.907128 -0.687534 0.795193 + endloop + endfacet + facet normal 0.410494 0.855419 0.315836 + outer loop + vertex 1.042427 -0.687534 -0.167513 + vertex 1.655401 -1.235674 0.520398 + vertex 0.766146 -0.721851 0.284519 + endloop + endfacet + facet normal 0.118899 0.867570 0.482892 + outer loop + vertex 2.258047 -1.011532 0.115273 + vertex 1.042427 -0.687534 -0.167513 + vertex 1.996854 -0.679062 -0.417736 + endloop + endfacet + facet normal -0.283030 0.953197 0.106347 + outer loop + vertex 1.655401 -1.235674 0.520398 + vertex 2.258047 -1.011532 0.115273 + vertex 2.339231 -1.060395 0.769292 + endloop + endfacet + facet normal 0.083372 0.814240 0.574511 + outer loop + vertex 2.258047 -1.011532 0.115273 + vertex 1.655401 -1.235674 0.520398 + vertex 1.042427 -0.687534 -0.167513 + endloop + endfacet + facet normal -0.514375 0.591441 0.620980 + outer loop + vertex 2.630503 -0.424722 -0.135108 + vertex 2.258047 -1.011532 0.115273 + vertex 1.996854 -0.679062 -0.417736 + endloop + endfacet + facet normal -0.867304 0.343309 0.360447 + outer loop + vertex 2.831748 -0.648863 0.562609 + vertex 2.630503 -0.424722 -0.135108 + vertex 2.972891 -0.062053 0.343318 + endloop + endfacet + facet normal -0.601857 0.787361 0.133534 + outer loop + vertex 2.258047 -1.011532 0.115273 + vertex 2.831748 -0.648863 0.562609 + vertex 2.339231 -1.060395 0.769292 + endloop + endfacet + facet normal -0.690615 0.606463 0.394022 + outer loop + vertex 2.831748 -0.648863 0.562609 + vertex 2.258047 -1.011532 0.115273 + vertex 2.630503 -0.424722 -0.135108 + endloop + endfacet + facet normal -0.480427 0.269475 0.834610 + outer loop + vertex 2.056803 -0.062053 -0.582445 + vertex 2.630503 -0.424722 -0.135108 + vertex 1.996854 -0.679062 -0.417736 + endloop + endfacet + facet normal -0.480427 -0.269475 0.834610 + outer loop + vertex 2.630503 0.300615 -0.135108 + vertex 2.056803 -0.062053 -0.582445 + vertex 1.996854 0.554956 -0.417736 + endloop + endfacet + facet normal -0.813207 0.000000 0.581975 + outer loop + vertex 2.630503 -0.424722 -0.135108 + vertex 2.630503 0.300615 -0.135108 + vertex 2.972891 -0.062053 0.343318 + endloop + endfacet + facet normal -0.614904 0.000000 0.788602 + outer loop + vertex 2.630503 0.300615 -0.135108 + vertex 2.630503 -0.424722 -0.135108 + vertex 2.056803 -0.062053 -0.582445 + endloop + endfacet + facet normal 0.029484 0.255128 0.966458 + outer loop + vertex 0.900377 -0.275398 -0.490845 + vertex 2.056803 -0.062053 -0.582445 + vertex 1.996854 -0.679062 -0.417736 + endloop + endfacet + facet normal 0.514055 0.000000 0.857758 + outer loop + vertex 0.900377 0.234029 -0.490845 + vertex 0.900377 -0.275398 -0.490845 + vertex 0.524475 -0.020684 -0.265567 + endloop + endfacet + facet normal 0.010764 -0.256924 0.966372 + outer loop + vertex 2.056803 -0.062053 -0.582445 + vertex 0.900377 0.234029 -0.490845 + vertex 1.996854 0.554956 -0.417736 + endloop + endfacet + facet normal 0.078962 0.000000 0.996878 + outer loop + vertex 0.900377 0.234029 -0.490845 + vertex 2.056803 -0.062053 -0.582445 + vertex 0.900377 -0.275398 -0.490845 + endloop + endfacet + facet normal 0.647884 -0.364619 0.668805 + outer loop + vertex 0.535235 0.391451 -0.051302 + vertex 0.900377 0.234029 -0.490845 + vertex 0.524475 -0.020684 -0.265567 + endloop + endfacet + facet normal 0.483248 -0.799798 0.356081 + outer loop + vertex 1.042427 0.646165 -0.167513 + vertex 0.535235 0.391451 -0.051302 + vertex 0.766146 0.680483 0.284519 + endloop + endfacet + facet normal 0.136987 -0.640223 0.755877 + outer loop + vertex 0.900377 0.234029 -0.490845 + vertex 1.042427 0.646165 -0.167513 + vertex 1.996854 0.554956 -0.417736 + endloop + endfacet + facet normal 0.462180 -0.640478 0.613333 + outer loop + vertex 1.042427 0.646165 -0.167513 + vertex 0.900377 0.234029 -0.490845 + vertex 0.535235 0.391451 -0.051302 + endloop + endfacet + facet normal 0.355839 -0.890012 0.285057 + outer loop + vertex 1.655401 1.111567 0.520398 + vertex 1.042427 0.646165 -0.167513 + vertex 0.766146 0.680483 0.284519 + endloop + endfacet + facet normal -0.283030 -0.953197 0.106347 + outer loop + vertex 2.258047 0.887426 0.115273 + vertex 1.655401 1.111567 0.520398 + vertex 2.339231 0.936288 0.769292 + endloop + endfacet + facet normal 0.051708 -0.858517 0.510171 + outer loop + vertex 1.042427 0.646165 -0.167513 + vertex 2.258047 0.887426 0.115273 + vertex 1.996854 0.554956 -0.417736 + endloop + endfacet + facet normal 0.043802 -0.845141 0.532745 + outer loop + vertex 2.258047 0.887426 0.115273 + vertex 1.042427 0.646165 -0.167513 + vertex 1.655401 1.111567 0.520398 + endloop + endfacet + facet normal -0.514375 -0.591441 0.620980 + outer loop + vertex 2.258047 0.887426 0.115273 + vertex 2.630503 0.300615 -0.135108 + vertex 1.996854 0.554956 -0.417736 + endloop + endfacet + facet normal -0.601857 -0.787361 0.133533 + outer loop + vertex 2.831748 0.524757 0.562609 + vertex 2.258047 0.887426 0.115273 + vertex 2.339231 0.936288 0.769292 + endloop + endfacet + facet normal -0.867304 -0.343309 0.360447 + outer loop + vertex 2.630503 0.300615 -0.135108 + vertex 2.831748 0.524757 0.562609 + vertex 2.972891 -0.062053 0.343318 + endloop + endfacet + facet normal -0.690615 -0.606464 0.394022 + outer loop + vertex 2.831748 0.524757 0.562609 + vertex 2.630503 0.300615 -0.135108 + vertex 2.258047 0.887426 0.115273 + endloop + endfacet + facet normal 0.964518 -0.227996 -0.133130 + outer loop + vertex 0.451615 0.391451 0.543683 + vertex 0.309564 -0.020684 0.220351 + vertex 0.382212 -0.020684 0.746682 + endloop + endfacet + facet normal 0.716926 -0.689830 0.100757 + outer loop + vertex 0.535235 0.391451 -0.051302 + vertex 0.451615 0.391451 0.543683 + vertex 0.766146 0.680483 0.284519 + endloop + endfacet + facet normal 0.890458 -0.227996 0.393830 + outer loop + vertex 0.309564 -0.020684 0.220351 + vertex 0.535235 0.391451 -0.051302 + vertex 0.524475 -0.020684 -0.265567 + endloop + endfacet + facet normal 0.902877 -0.410744 0.126891 + outer loop + vertex 0.535235 0.391451 -0.051302 + vertex 0.309564 -0.020684 0.220351 + vertex 0.451615 0.391451 0.543683 + endloop + endfacet + facet normal 0.964518 0.227996 -0.133130 + outer loop + vertex 0.309564 -0.020684 0.220351 + vertex 0.451615 -0.432820 0.543683 + vertex 0.382212 -0.020684 0.746682 + endloop + endfacet + facet normal 0.890458 0.227996 0.393830 + outer loop + vertex 0.535235 -0.432820 -0.051302 + vertex 0.309564 -0.020684 0.220351 + vertex 0.524475 -0.020684 -0.265567 + endloop + endfacet + facet normal 0.716926 0.689830 0.100757 + outer loop + vertex 0.451615 -0.432820 0.543683 + vertex 0.535235 -0.432820 -0.051302 + vertex 0.766146 -0.721851 0.284519 + endloop + endfacet + facet normal 0.902877 0.410744 0.126891 + outer loop + vertex 0.535235 -0.432820 -0.051302 + vertex 0.451615 -0.432820 0.543683 + vertex 0.309564 -0.020684 0.220351 + endloop + endfacet + facet normal 0.807133 0.364619 -0.464316 + outer loop + vertex 0.451615 -0.432820 0.543683 + vertex 0.681458 -0.275398 1.066846 + vertex 0.382212 -0.020684 0.746682 + endloop + endfacet + facet normal 0.562677 0.799798 -0.209086 + outer loop + vertex 0.907128 -0.687534 0.795193 + vertex 0.451615 -0.432820 0.543683 + vertex 0.766146 -0.721851 0.284519 + endloop + endfacet + facet normal 0.657568 0.631190 -0.411343 + outer loop + vertex 0.681458 -0.275398 1.066846 + vertex 0.907128 -0.687534 0.795193 + vertex 1.313948 -0.679062 1.458532 + endloop + endfacet + facet normal 0.613334 0.640478 -0.462180 + outer loop + vertex 0.907128 -0.687534 0.795193 + vertex 0.681458 -0.275398 1.066846 + vertex 0.451615 -0.432820 0.543683 + endloop + endfacet + facet normal 0.188311 0.645559 0.740130 + outer loop + vertex 1.042427 -0.687534 -0.167513 + vertex 0.900377 -0.275398 -0.490845 + vertex 1.996854 -0.679062 -0.417736 + endloop + endfacet + facet normal 0.483248 0.799798 0.356081 + outer loop + vertex 0.535235 -0.432820 -0.051302 + vertex 1.042427 -0.687534 -0.167513 + vertex 0.766146 -0.721851 0.284519 + endloop + endfacet + facet normal 0.647883 0.364619 0.668805 + outer loop + vertex 0.900377 -0.275398 -0.490845 + vertex 0.535235 -0.432820 -0.051302 + vertex 0.524475 -0.020684 -0.265567 + endloop + endfacet + facet normal 0.462180 0.640478 0.613333 + outer loop + vertex 0.535235 -0.432820 -0.051302 + vertex 0.900377 -0.275398 -0.490845 + vertex 1.042427 -0.687534 -0.167513 + endloop + endfacet + facet normal -0.432697 -0.859040 0.273538 + outer loop + vertex -0.631551 0.764486 0.547108 + vertex -0.438125 0.541163 0.151739 + vertex -1.013416 0.803828 0.066608 + endloop + endfacet + facet normal -0.541727 -0.466255 -0.699385 + outer loop + vertex -0.060684 0.437810 0.322711 + vertex -0.631551 0.764486 0.547108 + vertex -0.291320 0.284506 0.603558 + endloop + endfacet + facet normal -0.175983 -0.964927 -0.194797 + outer loop + vertex -0.438125 0.541163 0.151739 + vertex -0.060684 0.437810 0.322711 + vertex 0.253932 0.460341 -0.073124 + endloop + endfacet + facet normal -0.378487 -0.872899 0.307887 + outer loop + vertex -0.060684 0.437810 0.322711 + vertex -0.438125 0.541163 0.151739 + vertex -0.631551 0.764486 0.547108 + endloop + endfacet + facet normal 0.429853 -0.805670 -0.407581 + outer loop + vertex -1.138573 0.472478 0.589594 + vertex -0.631551 0.764486 0.547108 + vertex -1.013416 0.803828 0.066608 + endloop + endfacet + facet normal 0.334310 -0.263623 -0.904842 + outer loop + vertex -0.753356 0.292008 0.784499 + vertex -1.138573 0.472478 0.589594 + vertex -1.137030 0.000000 0.727819 + endloop + endfacet + facet normal -0.346726 -0.348206 -0.870938 + outer loop + vertex -0.631551 0.764486 0.547108 + vertex -0.753356 0.292008 0.784499 + vertex -0.291320 0.284506 0.603558 + endloop + endfacet + facet normal 0.205720 -0.481182 -0.852140 + outer loop + vertex -0.753356 0.292008 0.784499 + vertex -0.631551 0.764486 0.547108 + vertex -1.138573 0.472478 0.589594 + endloop + endfacet + facet normal 0.146142 0.000000 -0.989264 + outer loop + vertex -0.753356 -0.292008 0.784499 + vertex -0.753356 0.292008 0.784499 + vertex -1.137030 0.000000 0.727819 + endloop + endfacet + facet normal -0.353928 0.280805 -0.892123 + outer loop + vertex -0.265545 0.000000 0.682884 + vertex -0.753356 -0.292008 0.784499 + vertex -0.291320 -0.284506 0.603558 + endloop + endfacet + facet normal -0.353928 -0.280805 -0.892123 + outer loop + vertex -0.753356 0.292008 0.784499 + vertex -0.265545 0.000000 0.682884 + vertex -0.291320 0.284506 0.603558 + endloop + endfacet + facet normal -0.203930 0.000000 -0.978985 + outer loop + vertex -0.265545 0.000000 0.682884 + vertex -0.753356 0.292008 0.784499 + vertex -0.753356 -0.292008 0.784499 + endloop + endfacet + facet normal -0.370298 -0.280459 -0.885563 + outer loop + vertex -0.265545 0.000000 0.682884 + vertex 0.369308 0.167229 0.364459 + vertex -0.291320 0.284506 0.603558 + endloop + endfacet + facet normal -0.370298 0.280459 -0.885563 + outer loop + vertex 0.369308 -0.167229 0.364459 + vertex -0.265545 0.000000 0.682884 + vertex -0.291320 -0.284506 0.603558 + endloop + endfacet + facet normal -0.601119 0.000000 -0.799159 + outer loop + vertex 0.369308 0.167229 0.364459 + vertex 0.369308 -0.167229 0.364459 + vertex 0.662828 0.000000 0.143676 + endloop + endfacet + facet normal -0.448338 0.000000 -0.893864 + outer loop + vertex 0.369308 -0.167229 0.364459 + vertex 0.369308 0.167229 0.364459 + vertex -0.265545 0.000000 0.682884 + endloop + endfacet + facet normal -0.355542 -0.666160 -0.655607 + outer loop + vertex 0.369308 0.167229 0.364459 + vertex -0.060684 0.437810 0.322711 + vertex -0.291320 0.284506 0.603558 + endloop + endfacet + facet normal -0.681212 -0.339002 -0.648867 + outer loop + vertex 0.581242 0.389086 0.026050 + vertex 0.369308 0.167229 0.364459 + vertex 0.662828 0.000000 0.143676 + endloop + endfacet + facet normal -0.156875 -0.971084 -0.179961 + outer loop + vertex -0.060684 0.437810 0.322711 + vertex 0.581242 0.389086 0.026050 + vertex 0.253932 0.460341 -0.073124 + endloop + endfacet + facet normal -0.354409 -0.664684 -0.657715 + outer loop + vertex 0.581242 0.389086 0.026050 + vertex -0.060684 0.437810 0.322711 + vertex 0.369308 0.167229 0.364459 + endloop + endfacet + facet normal -0.967072 -0.233436 -0.101392 + outer loop + vertex 0.700781 0.000000 -0.218314 + vertex 0.581242 0.389086 0.026050 + vertex 0.662828 0.000000 0.143676 + endloop + endfacet + facet normal -0.722781 -0.233436 0.650459 + outer loop + vertex 0.460438 0.389086 -0.345746 + vertex 0.700781 0.000000 -0.218314 + vertex 0.457304 0.000000 -0.488862 + endloop + endfacet + facet normal -0.234045 -0.969247 0.076046 + outer loop + vertex 0.581242 0.389086 0.026050 + vertex 0.460438 0.389086 -0.345746 + vertex 0.253932 0.460341 -0.073124 + endloop + endfacet + facet normal -0.855296 -0.437310 0.277902 + outer loop + vertex 0.460438 0.389086 -0.345746 + vertex 0.581242 0.389086 0.026050 + vertex 0.700781 0.000000 -0.218314 + endloop + endfacet + facet normal -0.967072 0.233436 -0.101392 + outer loop + vertex 0.581242 -0.389086 0.026050 + vertex 0.700781 0.000000 -0.218314 + vertex 0.662828 0.000000 0.143676 + endloop + endfacet + facet normal -0.234045 0.969247 0.076046 + outer loop + vertex 0.460438 -0.389086 -0.345746 + vertex 0.581242 -0.389086 0.026050 + vertex 0.253932 -0.460341 -0.073124 + endloop + endfacet + facet normal -0.722780 0.233436 0.650458 + outer loop + vertex 0.700781 0.000000 -0.218314 + vertex 0.460438 -0.389086 -0.345746 + vertex 0.457304 0.000000 -0.488862 + endloop + endfacet + facet normal -0.855296 0.437310 0.277902 + outer loop + vertex 0.460438 -0.389086 -0.345746 + vertex 0.700781 0.000000 -0.218314 + vertex 0.581242 -0.389086 0.026050 + endloop + endfacet + facet normal -0.355542 0.666160 -0.655608 + outer loop + vertex -0.060684 -0.437810 0.322711 + vertex 0.369308 -0.167229 0.364459 + vertex -0.291320 -0.284506 0.603558 + endloop + endfacet + facet normal -0.156875 0.971084 -0.179960 + outer loop + vertex 0.581242 -0.389086 0.026050 + vertex -0.060684 -0.437810 0.322711 + vertex 0.253932 -0.460341 -0.073124 + endloop + endfacet + facet normal -0.681212 0.339002 -0.648867 + outer loop + vertex 0.369308 -0.167229 0.364459 + vertex 0.581242 -0.389086 0.026050 + vertex 0.662828 0.000000 0.143676 + endloop + endfacet + facet normal -0.354409 0.664684 -0.657715 + outer loop + vertex 0.581242 -0.389086 0.026050 + vertex 0.369308 -0.167229 0.364459 + vertex -0.060684 -0.437810 0.322711 + endloop + endfacet + facet normal -0.541727 0.466255 -0.699385 + outer loop + vertex -0.631551 -0.764486 0.547108 + vertex -0.060684 -0.437810 0.322711 + vertex -0.291320 -0.284506 0.603558 + endloop + endfacet + facet normal -0.432697 0.859040 0.273538 + outer loop + vertex -0.438125 -0.541163 0.151739 + vertex -0.631551 -0.764486 0.547108 + vertex -1.013416 -0.803828 0.066608 + endloop + endfacet + facet normal -0.175983 0.964927 -0.194797 + outer loop + vertex -0.060684 -0.437810 0.322711 + vertex -0.438125 -0.541163 0.151739 + vertex 0.253932 -0.460341 -0.073124 + endloop + endfacet + facet normal -0.378487 0.872899 0.307887 + outer loop + vertex -0.438125 -0.541163 0.151739 + vertex -0.060684 -0.437810 0.322711 + vertex -0.631551 -0.764486 0.547108 + endloop + endfacet + facet normal -0.411905 0.910833 -0.026765 + outer loop + vertex -0.903297 -0.764486 -0.289242 + vertex -0.438125 -0.541163 0.151739 + vertex -1.013416 -0.803828 0.066608 + endloop + endfacet + facet normal -0.188857 0.147192 0.970911 + outer loop + vertex -0.233263 -0.437810 -0.208435 + vertex -0.903297 -0.764486 -0.289242 + vertex -0.584930 -0.284506 -0.300080 + endloop + endfacet + facet normal -0.027874 0.964927 0.261034 + outer loop + vertex -0.438125 -0.541163 0.151739 + vertex -0.233263 -0.437810 -0.208435 + vertex 0.253932 -0.460341 -0.073124 + endloop + endfacet + facet normal -0.439015 0.898443 0.008106 + outer loop + vertex -0.233263 -0.437810 -0.208435 + vertex -0.438125 -0.541163 0.151739 + vertex -0.903297 -0.764486 -0.289242 + endloop + endfacet + facet normal -0.021137 0.971084 0.237800 + outer loop + vertex -0.233263 -0.437810 -0.208435 + vertex 0.460438 -0.389086 -0.345746 + vertex 0.253932 -0.460341 -0.073124 + endloop + endfacet + facet normal 0.645767 -0.710955 0.278437 + outer loop + vertex -0.903297 0.764486 -0.289242 + vertex -1.338460 0.472478 -0.025593 + vertex -1.013416 0.803828 0.066608 + endloop + endfacet + facet normal -0.411905 -0.910833 -0.026765 + outer loop + vertex -0.438125 0.541163 0.151739 + vertex -0.903297 0.764486 -0.289242 + vertex -1.013416 0.803828 0.066608 + endloop + endfacet + facet normal -0.027874 -0.964927 0.261035 + outer loop + vertex -0.233263 0.437810 -0.208435 + vertex -0.438125 0.541163 0.151739 + vertex 0.253932 0.460341 -0.073124 + endloop + endfacet + facet normal -0.188857 -0.147192 0.970911 + outer loop + vertex -0.903297 0.764486 -0.289242 + vertex -0.233263 0.437810 -0.208435 + vertex -0.584930 0.284506 -0.300080 + endloop + endfacet + facet normal -0.439015 -0.898443 0.008106 + outer loop + vertex -0.233263 0.437810 -0.208435 + vertex -0.903297 0.764486 -0.289242 + vertex -0.438125 0.541163 0.151739 + endloop + endfacet + facet normal -0.021137 -0.971084 0.237800 + outer loop + vertex 0.460438 0.389086 -0.345746 + vertex -0.233263 0.437810 -0.208435 + vertex 0.253932 0.460341 -0.073124 + endloop + endfacet + facet normal 0.719866 -0.192729 -0.666820 + outer loop + vertex -1.138573 0.472478 0.589594 + vertex -1.376651 0.000000 0.469136 + vertex -1.137030 0.000000 0.727819 + endloop + endfacet + facet normal 0.725731 -0.646305 -0.235805 + outer loop + vertex -1.338460 0.472478 -0.025593 + vertex -1.138573 0.472478 0.589594 + vertex -1.013416 0.803828 0.066608 + endloop + endfacet + facet normal 0.986233 -0.150788 -0.067873 + outer loop + vertex -1.376651 0.000000 0.469136 + vertex -1.338460 0.472478 -0.025593 + vertex -1.418457 0.000000 -0.138327 + endloop + endfacet + facet normal 0.882898 -0.371747 -0.286871 + outer loop + vertex -1.338460 0.472478 -0.025593 + vertex -1.376651 0.000000 0.469136 + vertex -1.138573 0.472478 0.589594 + endloop + endfacet + facet normal 0.719866 0.192729 -0.666820 + outer loop + vertex -1.376651 0.000000 0.469136 + vertex -1.138573 -0.472478 0.589594 + vertex -1.137030 0.000000 0.727819 + endloop + endfacet + facet normal 0.986233 0.150789 -0.067873 + outer loop + vertex -1.338460 -0.472478 -0.025593 + vertex -1.376651 0.000000 0.469136 + vertex -1.418457 0.000000 -0.138327 + endloop + endfacet + facet normal 0.725731 0.646305 -0.235805 + outer loop + vertex -1.138573 -0.472478 0.589594 + vertex -1.338460 -0.472478 -0.025593 + vertex -1.013416 -0.803828 0.066608 + endloop + endfacet + facet normal 0.882898 0.371748 -0.286871 + outer loop + vertex -1.338460 -0.472478 -0.025593 + vertex -1.138573 -0.472478 0.589594 + vertex -1.376651 0.000000 0.469136 + endloop + endfacet + facet normal 0.334310 0.263623 -0.904842 + outer loop + vertex -1.138573 -0.472478 0.589594 + vertex -0.753356 -0.292008 0.784499 + vertex -1.137030 0.000000 0.727819 + endloop + endfacet + facet normal 0.429853 0.805670 -0.407581 + outer loop + vertex -0.631551 -0.764486 0.547108 + vertex -1.138573 -0.472478 0.589594 + vertex -1.013416 -0.803828 0.066608 + endloop + endfacet + facet normal -0.346726 0.348206 -0.870938 + outer loop + vertex -0.753356 -0.292008 0.784499 + vertex -0.631551 -0.764486 0.547108 + vertex -0.291320 -0.284506 0.603558 + endloop + endfacet + facet normal 0.205720 0.481182 -0.852140 + outer loop + vertex -0.631551 -0.764486 0.547108 + vertex -0.753356 -0.292008 0.784499 + vertex -1.138573 -0.472478 0.589594 + endloop + endfacet + facet normal 0.645768 0.710955 0.278437 + outer loop + vertex -1.338460 -0.472478 -0.025593 + vertex -0.903297 -0.764486 -0.289242 + vertex -1.013416 -0.803828 0.066608 + endloop + endfacet + facet normal -0.021383 -0.399432 0.916514 + outer loop + vertex -1.128773 -0.458771 -0.044633 + vertex -1.017831 -0.351024 0.004914 + vertex -0.964388 -0.470329 -0.045835 + endloop + endfacet + facet normal 0.781845 0.449936 0.431597 + outer loop + vertex -2.920253 -3.899432 -1.534378 + vertex -2.916979 -3.882807 -1.557641 + vertex -2.906007 -3.903219 -1.556237 + endloop + endfacet + facet normal -0.945810 0.167999 -0.277883 + outer loop + vertex -1.232261 -1.145156 0.457925 + vertex -1.230263 -1.223898 0.403520 + vertex -0.964388 -0.470329 -0.045835 + endloop + endfacet + facet normal -0.805882 -0.113844 -0.581028 + outer loop + vertex -1.017831 -0.351024 0.004914 + vertex -1.232261 -1.145156 0.457925 + vertex -0.964388 -0.470329 -0.045835 + endloop + endfacet + facet normal -0.942645 0.173226 -0.285331 + outer loop + vertex -1.232261 -1.145156 0.457925 + vertex -1.575499 -1.696975 1.256863 + vertex -1.230263 -1.223898 0.403520 + endloop + endfacet + facet normal -0.941975 0.154292 -0.298121 + outer loop + vertex -1.232261 -1.145156 0.457925 + vertex -1.590448 -1.669669 1.318229 + vertex -1.575499 -1.696975 1.256863 + endloop + endfacet + facet normal -0.747971 0.285770 -0.599062 + outer loop + vertex -1.678477 -1.863228 1.306131 + vertex -1.615599 -1.845137 1.236253 + vertex -1.575499 -1.696975 1.256863 + endloop + endfacet + facet normal -0.832129 0.402305 -0.381723 + outer loop + vertex -1.590448 -1.669669 1.318229 + vertex -1.678477 -1.863228 1.306131 + vertex -1.575499 -1.696975 1.256863 + endloop + endfacet + facet normal -0.673662 0.581969 -0.455512 + outer loop + vertex -1.678477 -1.863228 1.306131 + vertex -2.094317 -2.855290 0.653648 + vertex -1.615599 -1.845137 1.236253 + endloop + endfacet + facet normal -0.556548 0.606641 -0.567663 + outer loop + vertex -1.678477 -1.863228 1.306131 + vertex -2.173273 -2.901780 0.681377 + vertex -2.094317 -2.855290 0.653648 + endloop + endfacet + facet normal -0.405424 0.861934 -0.304469 + outer loop + vertex -2.706306 -3.775590 -1.136756 + vertex -2.660793 -3.776623 -1.200285 + vertex -2.094317 -2.855290 0.653648 + endloop + endfacet + facet normal -0.551748 0.803282 -0.224305 + outer loop + vertex -2.173273 -2.901780 0.681377 + vertex -2.706306 -3.775590 -1.136756 + vertex -2.094317 -2.855290 0.653648 + endloop + endfacet + facet normal -0.230881 0.956007 -0.180954 + outer loop + vertex -2.706306 -3.775590 -1.136756 + vertex -2.906007 -3.903219 -1.556237 + vertex -2.660793 -3.776623 -1.200285 + endloop + endfacet + facet normal -0.112019 0.964274 -0.240056 + outer loop + vertex -2.706306 -3.775590 -1.136756 + vertex -2.920253 -3.899432 -1.534378 + vertex -2.906007 -3.903219 -1.556237 + endloop + endfacet + facet normal -0.021386 -0.399429 0.916515 + outer loop + vertex -1.128773 -0.458771 -0.044633 + vertex -1.154815 -0.312854 0.018352 + vertex -1.017831 -0.351024 0.004914 + endloop + endfacet + facet normal 0.781793 0.449994 0.431631 + outer loop + vertex -2.932034 -3.883127 -1.530038 + vertex -2.916979 -3.882807 -1.557641 + vertex -2.920253 -3.899432 -1.534378 + endloop + endfacet + facet normal -0.208629 -0.441484 -0.872677 + outer loop + vertex -1.154815 -0.312854 0.018352 + vertex -1.232261 -1.145156 0.457925 + vertex -1.017831 -0.351024 0.004914 + endloop + endfacet + facet normal -0.460988 -0.380509 -0.801688 + outer loop + vertex -1.154815 -0.312854 0.018352 + vertex -1.303237 -1.081824 0.468678 + vertex -1.232261 -1.145156 0.457925 + endloop + endfacet + facet normal -0.578610 -0.566799 -0.586472 + outer loop + vertex -1.636777 -1.636377 1.331761 + vertex -1.590448 -1.669669 1.318229 + vertex -1.232261 -1.145156 0.457925 + endloop + endfacet + facet normal -0.587184 -0.558590 -0.585826 + outer loop + vertex -1.303237 -1.081824 0.468678 + vertex -1.636777 -1.636377 1.331761 + vertex -1.232261 -1.145156 0.457925 + endloop + endfacet + facet normal -0.181255 0.143246 -0.972948 + outer loop + vertex -1.636777 -1.636377 1.331761 + vertex -1.678477 -1.863228 1.306131 + vertex -1.590448 -1.669669 1.318229 + endloop + endfacet + facet normal -0.106968 0.131019 -0.985592 + outer loop + vertex -1.636777 -1.636377 1.331761 + vertex -1.764490 -1.823814 1.320705 + vertex -1.678477 -1.863228 1.306131 + endloop + endfacet + facet normal 0.127293 0.466053 -0.875552 + outer loop + vertex -2.263256 -2.869378 0.685542 + vertex -2.173273 -2.901780 0.681377 + vertex -1.678477 -1.863228 1.306131 + endloop + endfacet + facet normal 0.077594 0.490328 -0.868077 + outer loop + vertex -1.764490 -1.823814 1.320705 + vertex -2.263256 -2.869378 0.685542 + vertex -1.678477 -1.863228 1.306131 + endloop + endfacet + facet normal 0.277229 0.831728 -0.481012 + outer loop + vertex -2.263256 -2.869378 0.685542 + vertex -2.706306 -3.775590 -1.136756 + vertex -2.173273 -2.901780 0.681377 + endloop + endfacet + facet normal 0.557430 0.681362 -0.474361 + outer loop + vertex -2.263256 -2.869378 0.685542 + vertex -2.735109 -3.742669 -1.123315 + vertex -2.706306 -3.775590 -1.136756 + endloop + endfacet + facet normal 0.622136 0.587330 -0.517678 + outer loop + vertex -2.932034 -3.883127 -1.530038 + vertex -2.920253 -3.899432 -1.534378 + vertex -2.706306 -3.775590 -1.136756 + endloop + endfacet + facet normal 0.542568 0.677462 -0.496654 + outer loop + vertex -2.735109 -3.742669 -1.123315 + vertex -2.932034 -3.883127 -1.530038 + vertex -2.706306 -3.775590 -1.136756 + endloop + endfacet + facet normal -0.021384 -0.399428 0.916515 + outer loop + vertex -1.128773 -0.458771 -0.044633 + vertex -1.272189 -0.384565 -0.015639 + vertex -1.154815 -0.312854 0.018352 + endloop + endfacet + facet normal 0.781801 0.449976 0.431635 + outer loop + vertex -2.932478 -3.866581 -1.546482 + vertex -2.916979 -3.882807 -1.557641 + vertex -2.932034 -3.883127 -1.530038 + endloop + endfacet + facet normal 0.364127 -0.521987 -0.771324 + outer loop + vertex -1.389744 -1.081592 0.427683 + vertex -1.303237 -1.081824 0.468678 + vertex -1.154815 -0.312854 0.018352 + endloop + endfacet + facet normal 0.515085 -0.520164 -0.681261 + outer loop + vertex -1.272189 -0.384565 -0.015639 + vertex -1.389744 -1.081592 0.427683 + vertex -1.154815 -0.312854 0.018352 + endloop + endfacet + facet normal 0.218663 -0.857194 -0.466266 + outer loop + vertex -1.389744 -1.081592 0.427683 + vertex -1.636777 -1.636377 1.331761 + vertex -1.303237 -1.081824 0.468678 + endloop + endfacet + facet normal 0.204399 -0.858234 -0.470802 + outer loop + vertex -1.389744 -1.081592 0.427683 + vertex -1.679600 -1.622170 1.287271 + vertex -1.636777 -1.636377 1.331761 + endloop + endfacet + facet normal 0.502007 -0.294077 -0.813332 + outer loop + vertex -1.808867 -1.756572 1.269002 + vertex -1.764490 -1.823814 1.320705 + vertex -1.636777 -1.636377 1.331761 + endloop + endfacet + facet normal 0.566597 -0.451232 -0.689462 + outer loop + vertex -1.679600 -1.622170 1.287271 + vertex -1.808867 -1.756572 1.269002 + vertex -1.636777 -1.636377 1.331761 + endloop + endfacet + facet normal 0.770831 0.019108 -0.636753 + outer loop + vertex -1.808867 -1.756572 1.269002 + vertex -2.263256 -2.869378 0.685542 + vertex -1.764490 -1.823814 1.320705 + endloop + endfacet + facet normal 0.701270 0.084781 -0.707837 + outer loop + vertex -1.808867 -1.756572 1.269002 + vertex -2.296507 -2.782482 0.663007 + vertex -2.263256 -2.869378 0.685542 + endloop + endfacet + facet normal 0.940782 -0.327590 -0.087253 + outer loop + vertex -2.725511 -3.702651 -1.170079 + vertex -2.735109 -3.742669 -1.123315 + vertex -2.263256 -2.869378 0.685542 + endloop + endfacet + facet normal 0.904131 0.257567 -0.340890 + outer loop + vertex -2.296507 -2.782482 0.663007 + vertex -2.725511 -3.702651 -1.170079 + vertex -2.263256 -2.869378 0.685542 + endloop + endfacet + facet normal 0.841783 -0.483177 -0.240711 + outer loop + vertex -2.725511 -3.702651 -1.170079 + vertex -2.932034 -3.883127 -1.530038 + vertex -2.735109 -3.742669 -1.123315 + endloop + endfacet + facet normal 0.882122 -0.319912 -0.345712 + outer loop + vertex -2.725511 -3.702651 -1.170079 + vertex -2.932478 -3.866581 -1.546482 + vertex -2.932034 -3.883127 -1.530038 + endloop + endfacet + facet normal -0.021389 -0.399436 0.916512 + outer loop + vertex -1.128773 -0.458771 -0.044633 + vertex -1.281568 -0.512152 -0.071463 + vertex -1.272189 -0.384565 -0.015639 + endloop + endfacet + facet normal 0.781812 0.450064 0.431524 + outer loop + vertex -2.921253 -3.862256 -1.571330 + vertex -2.916979 -3.882807 -1.557641 + vertex -2.932478 -3.866581 -1.546482 + endloop + endfacet + facet normal 0.989923 -0.111154 0.087731 + outer loop + vertex -1.281568 -0.512152 -0.071463 + vertex -1.389744 -1.081592 0.427683 + vertex -1.272189 -0.384565 -0.015639 + endloop + endfacet + facet normal 0.917861 -0.345540 -0.195280 + outer loop + vertex -1.281568 -0.512152 -0.071463 + vertex -1.426641 -1.144634 0.365809 + vertex -1.389744 -1.081592 0.427683 + endloop + endfacet + facet normal 0.889154 -0.457447 0.012146 + outer loop + vertex -1.686670 -1.637745 1.218260 + vertex -1.679600 -1.622170 1.287271 + vertex -1.389744 -1.081592 0.427683 + endloop + endfacet + facet normal 0.870758 -0.491359 -0.018619 + outer loop + vertex -1.426641 -1.144634 0.365809 + vertex -1.686670 -1.637745 1.218260 + vertex -1.389744 -1.081592 0.427683 + endloop + endfacet + facet normal 0.712434 -0.696665 0.084239 + outer loop + vertex -1.686670 -1.637745 1.218260 + vertex -1.808867 -1.756572 1.269002 + vertex -1.679600 -1.622170 1.287271 + endloop + endfacet + facet normal 0.652189 -0.740312 -0.163056 + outer loop + vertex -1.686670 -1.637745 1.218260 + vertex -1.778190 -1.712136 1.189953 + vertex -1.808867 -1.756572 1.269002 + endloop + endfacet + facet normal 0.860250 -0.490703 0.138491 + outer loop + vertex -2.247988 -2.706529 0.630741 + vertex -2.296507 -2.782482 0.663007 + vertex -1.808867 -1.756572 1.269002 + endloop + endfacet + facet normal 0.882484 -0.463115 0.082134 + outer loop + vertex -1.778190 -1.712136 1.189953 + vertex -2.247988 -2.706529 0.630741 + vertex -1.808867 -1.756572 1.269002 + endloop + endfacet + facet normal 0.852697 -0.518845 0.060889 + outer loop + vertex -2.247988 -2.706529 0.630741 + vertex -2.725511 -3.702651 -1.170079 + vertex -2.296507 -2.782482 0.663007 + endloop + endfacet + facet normal 0.671965 -0.708992 0.213993 + outer loop + vertex -2.247988 -2.706529 0.630741 + vertex -2.684741 -3.685669 -1.241837 + vertex -2.725511 -3.702651 -1.170079 + endloop + endfacet + facet normal 0.517962 -0.851084 0.085857 + outer loop + vertex -2.921253 -3.862256 -1.571330 + vertex -2.932478 -3.866581 -1.546482 + vertex -2.725511 -3.702651 -1.170079 + endloop + endfacet + facet normal 0.512933 -0.853763 0.089375 + outer loop + vertex -2.684741 -3.685669 -1.241837 + vertex -2.921253 -3.862256 -1.571330 + vertex -2.725511 -3.702651 -1.170079 + endloop + endfacet + facet normal -0.021388 -0.399439 0.916510 + outer loop + vertex -1.128773 -0.458771 -0.044633 + vertex -1.175889 -0.599544 -0.107085 + vertex -1.281568 -0.512152 -0.071463 + endloop + endfacet + facet normal 0.781846 0.450043 0.431483 + outer loop + vertex -2.906811 -3.873407 -1.585869 + vertex -2.916979 -3.882807 -1.557641 + vertex -2.921253 -3.862256 -1.571330 + endloop + endfacet + facet normal 0.826284 0.179566 0.533864 + outer loop + vertex -1.386143 -1.223479 0.329648 + vertex -1.426641 -1.144634 0.365809 + vertex -1.281568 -0.512152 -0.071463 + endloop + endfacet + facet normal 0.545637 0.349325 0.761743 + outer loop + vertex -1.175889 -0.599544 -0.107085 + vertex -1.386143 -1.223479 0.329648 + vertex -1.281568 -0.512152 -0.071463 + endloop + endfacet + facet normal 0.872463 0.257706 0.415206 + outer loop + vertex -1.386143 -1.223479 0.329648 + vertex -1.686670 -1.637745 1.218260 + vertex -1.426641 -1.144634 0.365809 + endloop + endfacet + facet normal 0.843503 0.317460 0.433269 + outer loop + vertex -1.386143 -1.223479 0.329648 + vertex -1.652663 -1.671374 1.176695 + vertex -1.686670 -1.637745 1.218260 + endloop + endfacet + facet normal 0.305911 -0.643380 0.701770 + outer loop + vertex -1.695561 -1.723969 1.143086 + vertex -1.778190 -1.712136 1.189953 + vertex -1.686670 -1.637745 1.218260 + endloop + endfacet + facet normal 0.235419 -0.652366 0.720414 + outer loop + vertex -1.652663 -1.671374 1.176695 + vertex -1.695561 -1.723969 1.143086 + vertex -1.686670 -1.637745 1.218260 + endloop + endfacet + facet normal 0.338569 -0.577656 0.742755 + outer loop + vertex -1.695561 -1.723969 1.143086 + vertex -2.247988 -2.706529 0.630741 + vertex -1.778190 -1.712136 1.189953 + endloop + endfacet + facet normal 0.199457 -0.538896 0.818418 + outer loop + vertex -1.695561 -1.723969 1.143086 + vertex -2.154233 -2.698711 0.613040 + vertex -2.247988 -2.706529 0.630741 + endloop + endfacet + facet normal 0.060717 -0.890279 0.451350 + outer loop + vertex -2.643498 -3.704512 -1.284553 + vertex -2.684741 -3.685669 -1.241837 + vertex -2.247988 -2.706529 0.630741 + endloop + endfacet + facet normal 0.155501 -0.888839 0.431027 + outer loop + vertex -2.154233 -2.698711 0.613040 + vertex -2.643498 -3.704512 -1.284553 + vertex -2.247988 -2.706529 0.630741 + endloop + endfacet + facet normal 0.050401 -0.894893 0.443426 + outer loop + vertex -2.643498 -3.704512 -1.284553 + vertex -2.921253 -3.862256 -1.571330 + vertex -2.684741 -3.685669 -1.241837 + endloop + endfacet + facet normal -0.092013 -0.832158 0.546852 + outer loop + vertex -2.643498 -3.704512 -1.284553 + vertex -2.906811 -3.873407 -1.585869 + vertex -2.921253 -3.862256 -1.571330 + endloop + endfacet + facet normal -0.021384 -0.399440 0.916510 + outer loop + vertex -1.128773 -0.458771 -0.044633 + vertex -1.034731 -0.580930 -0.095679 + vertex -1.175889 -0.599544 -0.107085 + endloop + endfacet + facet normal 0.781865 0.450013 0.431480 + outer loop + vertex -2.900025 -3.891637 -1.579153 + vertex -2.916979 -3.882807 -1.557641 + vertex -2.906811 -3.873407 -1.585869 + endloop + endfacet + facet normal -0.142683 0.599397 0.787633 + outer loop + vertex -1.034731 -0.580930 -0.095679 + vertex -1.386143 -1.223479 0.329648 + vertex -1.175889 -0.599544 -0.107085 + endloop + endfacet + facet normal 0.052053 0.531268 0.845603 + outer loop + vertex -1.034731 -0.580930 -0.095679 + vertex -1.298746 -1.258755 0.346431 + vertex -1.386143 -1.223479 0.329648 + endloop + endfacet + facet normal 0.257589 0.818346 0.513768 + outer loop + vertex -1.603187 -1.697733 1.193876 + vertex -1.652663 -1.671374 1.176695 + vertex -1.386143 -1.223479 0.329648 + endloop + endfacet + facet normal 0.235025 0.826016 0.512310 + outer loop + vertex -1.298746 -1.258755 0.346431 + vertex -1.603187 -1.697733 1.193876 + vertex -1.386143 -1.223479 0.329648 + endloop + endfacet + facet normal -0.421862 -0.218250 0.880000 + outer loop + vertex -1.603187 -1.697733 1.193876 + vertex -1.695561 -1.723969 1.143086 + vertex -1.652663 -1.671374 1.176695 + endloop + endfacet + facet normal -0.423999 -0.211792 0.880550 + outer loop + vertex -1.603187 -1.697733 1.193876 + vertex -1.623202 -1.783161 1.163691 + vertex -1.695561 -1.723969 1.143086 + endloop + endfacet + facet normal -0.403748 -0.283087 0.869971 + outer loop + vertex -2.085844 -2.764916 0.623236 + vertex -2.154233 -2.698711 0.613040 + vertex -1.695561 -1.723969 1.143086 + endloop + endfacet + facet normal -0.452994 -0.256549 0.853803 + outer loop + vertex -1.623202 -1.783161 1.163691 + vertex -2.085844 -2.764916 0.623236 + vertex -1.695561 -1.723969 1.143086 + endloop + endfacet + facet normal -0.645807 -0.593054 0.480854 + outer loop + vertex -2.085844 -2.764916 0.623236 + vertex -2.643498 -3.704512 -1.284553 + vertex -2.154233 -2.698711 0.613040 + endloop + endfacet + facet normal -0.940770 -0.099653 0.324070 + outer loop + vertex -2.085844 -2.764916 0.623236 + vertex -2.632840 -3.744989 -1.266060 + vertex -2.643498 -3.704512 -1.284553 + endloop + endfacet + facet normal -0.743959 -0.031004 0.667505 + outer loop + vertex -2.900025 -3.891637 -1.579153 + vertex -2.906811 -3.873407 -1.585869 + vertex -2.643498 -3.704512 -1.284553 + endloop + endfacet + facet normal -0.776583 0.080968 0.624790 + outer loop + vertex -2.632840 -3.744989 -1.266060 + vertex -2.900025 -3.891637 -1.579153 + vertex -2.643498 -3.704512 -1.284553 + endloop + endfacet + facet normal -0.021383 -0.399439 0.916510 + outer loop + vertex -1.128773 -0.458771 -0.044633 + vertex -0.964388 -0.470329 -0.045835 + vertex -1.034731 -0.580930 -0.095679 + endloop + endfacet + facet normal 0.781881 0.449950 0.431518 + outer loop + vertex -2.906007 -3.903219 -1.556237 + vertex -2.916979 -3.882807 -1.557641 + vertex -2.900025 -3.891637 -1.579153 + endloop + endfacet + facet normal -0.677965 0.568237 0.466337 + outer loop + vertex -1.230263 -1.223898 0.403520 + vertex -1.298746 -1.258755 0.346431 + vertex -1.034731 -0.580930 -0.095679 + endloop + endfacet + facet normal -0.864687 0.444542 0.233879 + outer loop + vertex -0.964388 -0.470329 -0.045835 + vertex -1.230263 -1.223898 0.403520 + vertex -1.034731 -0.580930 -0.095679 + endloop + endfacet + facet normal -0.574036 0.792884 0.204496 + outer loop + vertex -1.230263 -1.223898 0.403520 + vertex -1.603187 -1.697733 1.193876 + vertex -1.298746 -1.258755 0.346431 + endloop + endfacet + facet normal -0.542411 0.808382 0.228709 + outer loop + vertex -1.230263 -1.223898 0.403520 + vertex -1.575499 -1.696975 1.256863 + vertex -1.603187 -1.697733 1.193876 + endloop + endfacet + facet normal -0.963225 0.145960 0.225595 + outer loop + vertex -1.615599 -1.845137 1.236253 + vertex -1.623202 -1.783161 1.163691 + vertex -1.603187 -1.697733 1.193876 + endloop + endfacet + facet normal -0.899821 0.188828 0.393275 + outer loop + vertex -1.575499 -1.696975 1.256863 + vertex -1.615599 -1.845137 1.236253 + vertex -1.603187 -1.697733 1.193876 + endloop + endfacet + facet normal -0.913564 0.256981 0.315217 + outer loop + vertex -1.615599 -1.845137 1.236253 + vertex -2.085844 -2.764916 0.623236 + vertex -1.623202 -1.783161 1.163691 + endloop + endfacet + facet normal -0.902424 0.211018 0.375635 + outer loop + vertex -1.615599 -1.845137 1.236253 + vertex -2.094317 -2.855290 0.653648 + vertex -2.085844 -2.764916 0.623236 + endloop + endfacet + facet normal -0.811798 0.580203 -0.065945 + outer loop + vertex -2.660793 -3.776623 -1.200285 + vertex -2.632840 -3.744989 -1.266060 + vertex -2.085844 -2.764916 0.623236 + endloop + endfacet + facet normal -0.963328 0.162240 0.213721 + outer loop + vertex -2.094317 -2.855290 0.653648 + vertex -2.660793 -3.776623 -1.200285 + vertex -2.085844 -2.764916 0.623236 + endloop + endfacet + facet normal -0.591019 0.795851 0.131594 + outer loop + vertex -2.660793 -3.776623 -1.200285 + vertex -2.900025 -3.891637 -1.579153 + vertex -2.632840 -3.744989 -1.266060 + endloop + endfacet + facet normal -0.658655 0.726656 0.195307 + outer loop + vertex -2.660793 -3.776623 -1.200285 + vertex -2.906007 -3.903219 -1.556237 + vertex -2.900025 -3.891637 -1.579153 + endloop + endfacet + facet normal -0.076765 0.424315 0.902255 + outer loop + vertex -1.017698 0.488881 -0.032670 + vertex -1.054016 0.365147 0.022430 + vertex -1.178874 0.454621 -0.030272 + endloop + endfacet + facet normal 0.760863 -0.570059 0.310031 + outer loop + vertex -3.086113 2.794081 -1.545862 + vertex -3.098632 2.775017 -1.550191 + vertex -3.099803 2.787534 -1.524302 + endloop + endfacet + facet normal -0.885644 -0.070812 -0.458933 + outer loop + vertex -1.017698 0.488881 -0.032670 + vertex -1.317050 1.294574 0.420700 + vertex -1.324158 1.203249 0.448508 + endloop + endfacet + facet normal -0.840063 0.005007 -0.542465 + outer loop + vertex -1.017698 0.488881 -0.032670 + vertex -1.324158 1.203249 0.448508 + vertex -1.054016 0.365147 0.022430 + endloop + endfacet + facet normal -0.967987 -0.001088 -0.250997 + outer loop + vertex -1.317050 1.294574 0.420700 + vertex -1.526310 1.673322 1.226081 + vertex -1.324158 1.203249 0.448508 + endloop + endfacet + facet normal -0.909263 0.206636 -0.361307 + outer loop + vertex -1.526310 1.673322 1.226081 + vertex -1.554071 1.628527 1.270326 + vertex -1.324158 1.203249 0.448508 + endloop + endfacet + facet normal -0.512468 -0.124689 -0.849606 + outer loop + vertex -1.526310 1.673322 1.226081 + vertex -1.577267 1.819272 1.235398 + vertex -1.658703 1.813423 1.285377 + endloop + endfacet + facet normal -0.638088 -0.303488 -0.707629 + outer loop + vertex -1.526310 1.673322 1.226081 + vertex -1.658703 1.813423 1.285377 + vertex -1.554071 1.628527 1.270326 + endloop + endfacet + facet normal -0.160780 -0.915375 -0.369104 + outer loop + vertex -1.577267 1.819272 1.235398 + vertex -2.072943 2.213083 0.474666 + vertex -1.658703 1.813423 1.285377 + endloop + endfacet + facet normal -0.373682 -0.893377 -0.249476 + outer loop + vertex -2.072943 2.213083 0.474666 + vertex -2.161622 2.246180 0.488976 + vertex -1.658703 1.813423 1.285377 + endloop + endfacet + facet normal -0.073049 -0.980069 -0.184738 + outer loop + vertex -2.072943 2.213083 0.474666 + vertex -2.838396 2.591279 -1.229057 + vertex -2.881531 2.582325 -1.164499 + endloop + endfacet + facet normal -0.354478 -0.934386 -0.035621 + outer loop + vertex -2.072943 2.213083 0.474666 + vertex -2.881531 2.582325 -1.164499 + vertex -2.161622 2.246180 0.488976 + endloop + endfacet + facet normal -0.308527 -0.892182 -0.329883 + outer loop + vertex -2.838396 2.591279 -1.229057 + vertex -3.086113 2.794081 -1.545862 + vertex -2.881531 2.582325 -1.164499 + endloop + endfacet + facet normal -0.192877 -0.898111 -0.395216 + outer loop + vertex -3.086113 2.794081 -1.545862 + vertex -3.099803 2.787534 -1.524302 + vertex -2.881531 2.582325 -1.164499 + endloop + endfacet + facet normal -0.076769 0.424311 0.902256 + outer loop + vertex -1.054016 0.365147 0.022430 + vertex -1.184355 0.308787 0.037844 + vertex -1.178874 0.454621 -0.030272 + endloop + endfacet + facet normal 0.760849 -0.570075 0.310037 + outer loop + vertex -3.099803 2.787534 -1.524302 + vertex -3.098632 2.775017 -1.550191 + vertex -3.112612 2.771560 -1.522239 + endloop + endfacet + facet normal -0.264522 0.367929 -0.891435 + outer loop + vertex -1.054016 0.365147 0.022430 + vertex -1.324158 1.203249 0.448508 + vertex -1.184355 0.308787 0.037844 + endloop + endfacet + facet normal -0.023282 0.414123 -0.909923 + outer loop + vertex -1.324158 1.203249 0.448508 + vertex -1.386909 1.136856 0.419897 + vertex -1.184355 0.308787 0.037844 + endloop + endfacet + facet normal -0.489268 0.711136 -0.504880 + outer loop + vertex -1.324158 1.203249 0.448508 + vertex -1.554071 1.628527 1.270326 + vertex -1.597825 1.590944 1.259791 + endloop + endfacet + facet normal -0.508115 0.697803 -0.504866 + outer loop + vertex -1.324158 1.203249 0.448508 + vertex -1.597825 1.590944 1.259791 + vertex -1.386909 1.136856 0.419897 + endloop + endfacet + facet normal 0.113028 0.143990 -0.983103 + outer loop + vertex -1.554071 1.628527 1.270326 + vertex -1.658703 1.813423 1.285377 + vertex -1.597825 1.590944 1.259791 + endloop + endfacet + facet normal 0.185815 0.162296 -0.969089 + outer loop + vertex -1.658703 1.813423 1.285377 + vertex -1.739812 1.768143 1.262242 + vertex -1.597825 1.590944 1.259791 + endloop + endfacet + facet normal 0.498545 -0.589780 -0.635306 + outer loop + vertex -1.658703 1.813423 1.285377 + vertex -2.161622 2.246180 0.488976 + vertex -2.244519 2.210517 0.457031 + endloop + endfacet + facet normal 0.506276 -0.581512 -0.636810 + outer loop + vertex -1.658703 1.813423 1.285377 + vertex -2.244519 2.210517 0.457031 + vertex -1.739812 1.768143 1.262242 + endloop + endfacet + facet normal 0.484050 -0.792129 -0.371789 + outer loop + vertex -2.161622 2.246180 0.488976 + vertex -2.881531 2.582325 -1.164499 + vertex -2.244519 2.210517 0.457031 + endloop + endfacet + facet normal 0.612227 -0.683636 -0.397265 + outer loop + vertex -2.881531 2.582325 -1.164499 + vertex -2.912222 2.549601 -1.155484 + vertex -2.244519 2.210517 0.457031 + endloop + endfacet + facet normal 0.557069 -0.529381 -0.639867 + outer loop + vertex -2.881531 2.582325 -1.164499 + vertex -3.099803 2.787534 -1.524302 + vertex -3.112612 2.771560 -1.522239 + endloop + endfacet + facet normal 0.471754 -0.616192 -0.630679 + outer loop + vertex -2.881531 2.582325 -1.164499 + vertex -3.112612 2.771560 -1.522239 + vertex -2.912222 2.549601 -1.155484 + endloop + endfacet + facet normal -0.076767 0.424311 0.902257 + outer loop + vertex -1.184355 0.308787 0.037844 + vertex -1.310567 0.362245 0.001966 + vertex -1.178874 0.454621 -0.030272 + endloop + endfacet + facet normal 0.760856 -0.570063 0.310042 + outer loop + vertex -3.112612 2.771560 -1.522239 + vertex -3.098632 2.775017 -1.550191 + vertex -3.114895 2.758189 -1.541222 + endloop + endfacet + facet normal 0.624605 0.447931 -0.639708 + outer loop + vertex -1.184355 0.308787 0.037844 + vertex -1.386909 1.136856 0.419897 + vertex -1.458049 1.145392 0.356413 + endloop + endfacet + facet normal 0.412785 0.438942 -0.798084 + outer loop + vertex -1.184355 0.308787 0.037844 + vertex -1.458049 1.145392 0.356413 + vertex -1.310567 0.362245 0.001966 + endloop + endfacet + facet normal 0.413569 0.840320 -0.350461 + outer loop + vertex -1.386909 1.136856 0.419897 + vertex -1.597825 1.590944 1.259791 + vertex -1.458049 1.145392 0.356413 + endloop + endfacet + facet normal 0.566477 0.770476 -0.292355 + outer loop + vertex -1.597825 1.590944 1.259791 + vertex -1.624625 1.588875 1.202410 + vertex -1.458049 1.145392 0.356413 + endloop + endfacet + facet normal 0.666043 0.540797 -0.513737 + outer loop + vertex -1.597825 1.590944 1.259791 + vertex -1.739812 1.768143 1.262242 + vertex -1.759516 1.717527 1.183414 + endloop + endfacet + facet normal 0.673964 0.656675 -0.338454 + outer loop + vertex -1.597825 1.590944 1.259791 + vertex -1.759516 1.717527 1.183414 + vertex -1.624625 1.588875 1.202410 + endloop + endfacet + facet normal 0.875283 0.276827 -0.396542 + outer loop + vertex -1.739812 1.768143 1.262242 + vertex -2.244519 2.210517 0.457031 + vertex -1.759516 1.717527 1.183414 + endloop + endfacet + facet normal 0.868040 0.162955 -0.468990 + outer loop + vertex -2.244519 2.210517 0.457031 + vertex -2.259210 2.132949 0.402887 + vertex -1.759516 1.717527 1.183414 + endloop + endfacet + facet normal 0.824457 0.515765 -0.232931 + outer loop + vertex -2.244519 2.210517 0.457031 + vertex -2.912222 2.549601 -1.155484 + vertex -2.907359 2.517750 -1.208798 + endloop + endfacet + facet normal 0.931220 0.072883 -0.357095 + outer loop + vertex -2.244519 2.210517 0.457031 + vertex -2.907359 2.517750 -1.208798 + vertex -2.259210 2.132949 0.402887 + endloop + endfacet + facet normal 0.866476 0.459384 -0.195414 + outer loop + vertex -2.912222 2.549601 -1.155484 + vertex -3.112612 2.771560 -1.522239 + vertex -2.907359 2.517750 -1.208798 + endloop + endfacet + facet normal 0.890596 0.314460 -0.328562 + outer loop + vertex -3.112612 2.771560 -1.522239 + vertex -3.114895 2.758189 -1.541222 + vertex -2.907359 2.517750 -1.208798 + endloop + endfacet + facet normal -0.076772 0.424317 0.902253 + outer loop + vertex -1.310567 0.362245 0.001966 + vertex -1.337611 0.485262 -0.058188 + vertex -1.178874 0.454621 -0.030272 + endloop + endfacet + facet normal 0.760856 -0.570104 0.309966 + outer loop + vertex -3.114895 2.758189 -1.541222 + vertex -3.098632 2.775017 -1.550191 + vertex -3.104932 2.757492 -1.566960 + endloop + endfacet + facet normal 0.979394 0.199278 -0.032785 + outer loop + vertex -1.310567 0.362245 0.001966 + vertex -1.458049 1.145392 0.356413 + vertex -1.337611 0.485262 -0.058188 + endloop + endfacet + facet normal 0.961778 0.248166 -0.115743 + outer loop + vertex -1.458049 1.145392 0.356413 + vertex -1.484010 1.222427 0.305859 + vertex -1.337611 0.485262 -0.058188 + endloop + endfacet + facet normal 0.983234 0.024646 0.180678 + outer loop + vertex -1.458049 1.145392 0.356413 + vertex -1.624625 1.588875 1.202410 + vertex -1.614290 1.623878 1.141392 + endloop + endfacet + facet normal 0.948482 0.316803 -0.004324 + outer loop + vertex -1.458049 1.145392 0.356413 + vertex -1.614290 1.623878 1.141392 + vertex -1.484010 1.222427 0.305859 + endloop + endfacet + facet normal 0.569356 0.667771 0.479496 + outer loop + vertex -1.624625 1.588875 1.202410 + vertex -1.759516 1.717527 1.183414 + vertex -1.614290 1.623878 1.141392 + endloop + endfacet + facet normal 0.574626 0.780224 0.247095 + outer loop + vertex -1.759516 1.717527 1.183414 + vertex -1.702977 1.699690 1.108251 + vertex -1.614290 1.623878 1.141392 + endloop + endfacet + facet normal 0.674839 0.736889 -0.039836 + outer loop + vertex -1.759516 1.717527 1.183414 + vertex -2.259210 2.132949 0.402887 + vertex -2.194634 2.071888 0.367314 + endloop + endfacet + facet normal 0.458697 0.878017 0.136684 + outer loop + vertex -1.759516 1.717527 1.183414 + vertex -2.194634 2.071888 0.367314 + vertex -1.702977 1.699690 1.108251 + endloop + endfacet + facet normal 0.658888 0.747244 -0.086566 + outer loop + vertex -2.259210 2.132949 0.402887 + vertex -2.907359 2.517750 -1.208798 + vertex -2.194634 2.071888 0.367314 + endloop + endfacet + facet normal 0.369676 0.924361 0.094321 + outer loop + vertex -2.907359 2.517750 -1.208798 + vertex -2.870606 2.510755 -1.284297 + vertex -2.194634 2.071888 0.367314 + endloop + endfacet + facet normal 0.583255 0.786133 0.204471 + outer loop + vertex -2.907359 2.517750 -1.208798 + vertex -3.114895 2.758189 -1.541222 + vertex -3.104932 2.757492 -1.566960 + endloop + endfacet + facet normal 0.578597 0.788484 0.208613 + outer loop + vertex -2.907359 2.517750 -1.208798 + vertex -3.104932 2.757492 -1.566960 + vertex -2.870606 2.510755 -1.284297 + endloop + endfacet + facet normal -0.076770 0.424323 0.902251 + outer loop + vertex -1.337611 0.485262 -0.058188 + vertex -1.245123 0.585205 -0.097321 + vertex -1.178874 0.454621 -0.030272 + endloop + endfacet + facet normal 0.760858 -0.570103 0.309963 + outer loop + vertex -3.104932 2.757492 -1.566960 + vertex -3.098632 2.775017 -1.550191 + vertex -3.090227 2.769990 -1.580069 + endloop + endfacet + facet normal 0.584712 -0.262889 0.767465 + outer loop + vertex -1.337611 0.485262 -0.058188 + vertex -1.484010 1.222427 0.305859 + vertex -1.445241 1.309955 0.306304 + endloop + endfacet + facet normal 0.598775 -0.257104 0.758529 + outer loop + vertex -1.337611 0.485262 -0.058188 + vertex -1.445241 1.309955 0.306304 + vertex -1.245123 0.585205 -0.097321 + endloop + endfacet + facet normal 0.865648 -0.385051 0.319982 + outer loop + vertex -1.484010 1.222427 0.305859 + vertex -1.614290 1.623878 1.141392 + vertex -1.445241 1.309955 0.306304 + endloop + endfacet + facet normal 0.773065 -0.526167 0.354288 + outer loop + vertex -1.614290 1.623878 1.141392 + vertex -1.574602 1.669594 1.122686 + vertex -1.445241 1.309955 0.306304 + endloop + endfacet + facet normal 0.018355 0.418432 0.908063 + outer loop + vertex -1.614290 1.623878 1.141392 + vertex -1.702977 1.699690 1.108251 + vertex -1.612771 1.728064 1.093353 + endloop + endfacet + facet normal -0.055122 0.418750 0.906427 + outer loop + vertex -1.614290 1.623878 1.141392 + vertex -1.612771 1.728064 1.093353 + vertex -1.574602 1.669594 1.122686 + endloop + endfacet + facet normal -0.173070 0.829251 0.531404 + outer loop + vertex -1.702977 1.699690 1.108251 + vertex -2.194634 2.071888 0.367314 + vertex -1.612771 1.728064 1.093353 + endloop + endfacet + facet normal -0.061163 0.882239 0.466812 + outer loop + vertex -2.194634 2.071888 0.367314 + vertex -2.099415 2.073312 0.377099 + vertex -1.612771 1.728064 1.093353 + endloop + endfacet + facet normal -0.196835 0.924568 0.326237 + outer loop + vertex -2.194634 2.071888 0.367314 + vertex -2.870606 2.510755 -1.284297 + vertex -2.829635 2.533885 -1.325127 + endloop + endfacet + facet normal -0.042923 0.959606 0.278055 + outer loop + vertex -2.194634 2.071888 0.367314 + vertex -2.829635 2.533885 -1.325127 + vertex -2.099415 2.073312 0.377099 + endloop + endfacet + facet normal 0.133578 0.798819 0.586553 + outer loop + vertex -2.870606 2.510755 -1.284297 + vertex -3.104932 2.757492 -1.566960 + vertex -2.829635 2.533885 -1.325127 + endloop + endfacet + facet normal -0.009276 0.728916 0.684540 + outer loop + vertex -3.104932 2.757492 -1.566960 + vertex -3.090227 2.769990 -1.580069 + vertex -2.829635 2.533885 -1.325127 + endloop + endfacet + facet normal -0.076769 0.424323 0.902251 + outer loop + vertex -1.245123 0.585205 -0.097321 + vertex -1.102749 0.586816 -0.085965 + vertex -1.178874 0.454621 -0.030272 + endloop + endfacet + facet normal 0.760912 -0.570029 0.309966 + outer loop + vertex -3.090227 2.769990 -1.580069 + vertex -3.098632 2.775017 -1.550191 + vertex -3.081852 2.786274 -1.570680 + endloop + endfacet + facet normal -0.063304 -0.498861 0.864367 + outer loop + vertex -1.245123 0.585205 -0.097321 + vertex -1.445241 1.309955 0.306304 + vertex -1.102749 0.586816 -0.085965 + endloop + endfacet + facet normal -0.292044 -0.559202 0.775889 + outer loop + vertex -1.445241 1.309955 0.306304 + vertex -1.370937 1.342063 0.357414 + vertex -1.102749 0.586816 -0.085965 + endloop + endfacet + facet normal 0.108098 -0.903342 0.415076 + outer loop + vertex -1.445241 1.309955 0.306304 + vertex -1.574602 1.669594 1.122686 + vertex -1.535446 1.691598 1.160377 + endloop + endfacet + facet normal 0.105117 -0.903754 0.414945 + outer loop + vertex -1.445241 1.309955 0.306304 + vertex -1.535446 1.691598 1.160377 + vertex -1.370937 1.342063 0.357414 + endloop + endfacet + facet normal -0.671669 -0.068380 0.737689 + outer loop + vertex -1.574602 1.669594 1.122686 + vertex -1.612771 1.728064 1.093353 + vertex -1.535446 1.691598 1.160377 + endloop + endfacet + facet normal -0.673059 -0.074809 0.735796 + outer loop + vertex -1.612771 1.728064 1.093353 + vertex -1.556825 1.781284 1.149940 + vertex -1.535446 1.691598 1.160377 + endloop + endfacet + facet normal -0.765665 0.193449 0.613461 + outer loop + vertex -1.612771 1.728064 1.093353 + vertex -2.099415 2.073312 0.377099 + vertex -2.045259 2.136150 0.424876 + endloop + endfacet + facet normal -0.776329 0.171037 0.606679 + outer loop + vertex -1.612771 1.728064 1.093353 + vertex -2.045259 2.136150 0.424876 + vertex -1.556825 1.781284 1.149940 + endloop + endfacet + facet normal -0.816773 0.362871 0.448561 + outer loop + vertex -2.099415 2.073312 0.377099 + vertex -2.829635 2.533885 -1.325127 + vertex -2.045259 2.136150 0.424876 + endloop + endfacet + facet normal -0.903896 0.072367 0.421587 + outer loop + vertex -2.829635 2.533885 -1.325127 + vertex -2.815300 2.569721 -1.300544 + vertex -2.045259 2.136150 0.424876 + endloop + endfacet + facet normal -0.714902 -0.034977 0.698350 + outer loop + vertex -2.829635 2.533885 -1.325127 + vertex -3.090227 2.769990 -1.580069 + vertex -3.081852 2.786274 -1.570680 + endloop + endfacet + facet normal -0.757349 -0.135291 0.638842 + outer loop + vertex -2.829635 2.533885 -1.325127 + vertex -3.081852 2.786274 -1.570680 + vertex -2.815300 2.569721 -1.300544 + endloop + endfacet + facet normal -0.076766 0.424322 0.902252 + outer loop + vertex -1.102749 0.586816 -0.085965 + vertex -1.017698 0.488881 -0.032670 + vertex -1.178874 0.454621 -0.030272 + endloop + endfacet + facet normal 0.760899 -0.570062 0.309938 + outer loop + vertex -3.081852 2.786274 -1.570680 + vertex -3.098632 2.775017 -1.550191 + vertex -3.086113 2.794081 -1.545862 + endloop + endfacet + facet normal -0.811858 -0.481851 0.329707 + outer loop + vertex -1.102749 0.586816 -0.085965 + vertex -1.370937 1.342063 0.357414 + vertex -1.317050 1.294574 0.420700 + endloop + endfacet + facet normal -0.792782 -0.494815 0.355886 + outer loop + vertex -1.102749 0.586816 -0.085965 + vertex -1.317050 1.294574 0.420700 + vertex -1.017698 0.488881 -0.032670 + endloop + endfacet + facet normal -0.739785 -0.659091 0.135341 + outer loop + vertex -1.370937 1.342063 0.357414 + vertex -1.535446 1.691598 1.160377 + vertex -1.317050 1.294574 0.420700 + endloop + endfacet + facet normal -0.882459 -0.470320 -0.008108 + outer loop + vertex -1.535446 1.691598 1.160377 + vertex -1.526310 1.673322 1.226081 + vertex -1.317050 1.294574 0.420700 + endloop + endfacet + facet normal -0.962198 -0.243543 -0.121908 + outer loop + vertex -1.535446 1.691598 1.160377 + vertex -1.556825 1.781284 1.149940 + vertex -1.577267 1.819272 1.235398 + endloop + endfacet + facet normal -0.942624 -0.331589 0.038845 + outer loop + vertex -1.535446 1.691598 1.160377 + vertex -1.577267 1.819272 1.235398 + vertex -1.526310 1.673322 1.226081 + endloop + endfacet + facet normal -0.708267 -0.692264 0.138306 + outer loop + vertex -1.556825 1.781284 1.149940 + vertex -2.045259 2.136150 0.424876 + vertex -1.577267 1.819272 1.235398 + endloop + endfacet + facet normal -0.826425 -0.483796 0.288031 + outer loop + vertex -2.045259 2.136150 0.424876 + vertex -2.072943 2.213083 0.474666 + vertex -1.577267 1.819272 1.235398 + endloop + endfacet + facet normal -0.582625 -0.810790 0.056282 + outer loop + vertex -2.045259 2.136150 0.424876 + vertex -2.815300 2.569721 -1.300544 + vertex -2.838396 2.591279 -1.229057 + endloop + endfacet + facet normal -0.836838 -0.476067 0.270299 + outer loop + vertex -2.045259 2.136150 0.424876 + vertex -2.838396 2.591279 -1.229057 + vertex -2.072943 2.213083 0.474666 + endloop + endfacet + facet normal -0.644050 -0.764652 0.022523 + outer loop + vertex -2.815300 2.569721 -1.300544 + vertex -3.081852 2.786274 -1.570680 + vertex -2.838396 2.591279 -1.229057 + endloop + endfacet + facet normal -0.703942 -0.703137 0.100317 + outer loop + vertex -3.081852 2.786274 -1.570680 + vertex -3.086113 2.794081 -1.545862 + vertex -2.838396 2.591279 -1.229057 + endloop + endfacet + facet normal 0.072988 -0.424980 0.902256 + outer loop + vertex -0.790998 -0.401975 -0.030272 + vertex -0.704272 -0.275192 0.022430 + vertex -0.627824 -0.379043 -0.032670 + endloop + endfacet + facet normal 0.288141 0.809048 0.512265 + outer loop + vertex -1.089436 -3.534324 -1.601137 + vertex -1.098497 -3.517481 -1.622642 + vertex -1.076676 -3.525398 -1.622411 + endloop + endfacet + facet normal -0.722977 -0.260383 -0.639926 + outer loop + vertex -0.785680 -1.123303 0.448508 + vertex -0.733861 -1.198839 0.420700 + vertex -0.627824 -0.379043 -0.032670 + endloop + endfacet + facet normal -0.757175 -0.233753 -0.609955 + outer loop + vertex -0.704272 -0.275192 0.022430 + vertex -0.785680 -1.123303 0.448508 + vertex -0.627824 -0.379043 -0.032670 + endloop + endfacet + facet normal -0.822169 -0.424316 -0.379466 + outer loop + vertex -0.785680 -1.123303 0.448508 + vertex -0.835425 -1.722300 1.226081 + vertex -0.733861 -1.198839 0.420700 + endloop + endfacet + facet normal -0.716561 -0.529666 -0.453865 + outer loop + vertex -0.785680 -1.123303 0.448508 + vertex -0.881864 -1.697387 1.270326 + vertex -0.835425 -1.722300 1.226081 + endloop + endfacet + facet normal -0.506154 -0.148250 -0.849606 + outer loop + vertex -0.880030 -1.909828 1.285377 + vertex -0.806580 -1.874175 1.235398 + vertex -0.835425 -1.722300 1.226081 + endloop + endfacet + facet normal -0.704344 -0.056216 -0.707629 + outer loop + vertex -0.881864 -1.697387 1.270326 + vertex -0.880030 -1.909828 1.285377 + vertex -0.835425 -1.722300 1.226081 + endloop + endfacet + facet normal -0.632493 0.574024 -0.520048 + outer loop + vertex -0.880030 -1.909828 1.285377 + vertex -0.908545 -2.863121 0.267821 + vertex -0.806580 -1.874175 1.235398 + endloop + endfacet + facet normal -0.727582 0.510696 -0.458055 + outer loop + vertex -0.880030 -1.909828 1.285377 + vertex -0.968795 -2.936123 0.282131 + vertex -0.908545 -2.863121 0.267821 + endloop + endfacet + facet normal -0.823961 0.552372 -0.126389 + outer loop + vertex -1.006375 -3.340990 -1.182885 + vertex -0.972894 -3.304943 -1.243616 + vertex -0.908545 -2.863121 0.267821 + endloop + endfacet + facet normal -0.776781 0.611851 -0.149163 + outer loop + vertex -0.968795 -2.936123 0.282131 + vertex -1.006375 -3.340990 -1.182885 + vertex -0.908545 -2.863121 0.267821 + endloop + endfacet + facet normal -0.813524 0.571128 -0.109502 + outer loop + vertex -1.006375 -3.340990 -1.182885 + vertex -1.076676 -3.525398 -1.622411 + vertex -0.972894 -3.304943 -1.243616 + endloop + endfacet + facet normal -0.731633 0.662436 -0.160910 + outer loop + vertex -1.006375 -3.340990 -1.182885 + vertex -1.089436 -3.534324 -1.601137 + vertex -1.076676 -3.525398 -1.622411 + endloop + endfacet + facet normal 0.072985 -0.424978 0.902257 + outer loop + vertex -0.790998 -0.401975 -0.030272 + vertex -0.846026 -0.266810 0.037844 + vertex -0.704272 -0.275192 0.022430 + endloop + endfacet + facet normal 0.288123 0.809050 0.512273 + outer loop + vertex -1.109021 -3.530566 -1.596056 + vertex -1.098497 -3.517481 -1.622642 + vertex -1.089436 -3.534324 -1.601137 + endloop + endfacet + facet normal -0.122729 -0.436093 -0.891493 + outer loop + vertex -0.846026 -0.266810 0.037844 + vertex -0.785680 -1.123303 0.448508 + vertex -0.704272 -0.275192 0.022430 + endloop + endfacet + facet normal 0.167711 -0.416587 -0.893492 + outer loop + vertex -0.846026 -0.266810 0.037844 + vertex -0.873220 -1.097180 0.419897 + vertex -0.785680 -1.123303 0.448508 + endloop + endfacet + facet normal -0.046677 -0.816322 -0.575708 + outer loop + vertex -0.938548 -1.686716 1.259791 + vertex -0.881864 -1.697387 1.270326 + vertex -0.785680 -1.123303 0.448508 + endloop + endfacet + facet normal -0.054856 -0.815250 -0.576505 + outer loop + vertex -0.873220 -1.097180 0.419897 + vertex -0.938548 -1.686716 1.259791 + vertex -0.785680 -1.123303 0.448508 + endloop + endfacet + facet normal 0.169880 -0.068186 -0.983103 + outer loop + vertex -0.938548 -1.686716 1.259791 + vertex -0.880030 -1.909828 1.285377 + vertex -0.881864 -1.697387 1.270326 + endloop + endfacet + facet normal 0.242069 -0.047645 -0.969089 + outer loop + vertex -0.938548 -1.686716 1.259791 + vertex -0.972913 -1.911169 1.262242 + vertex -0.880030 -1.909828 1.285377 + endloop + endfacet + facet normal 0.173446 0.680724 -0.711710 + outer loop + vertex -1.058417 -2.946686 0.250187 + vertex -0.968795 -2.936123 0.282131 + vertex -0.880030 -1.909828 1.285377 + endloop + endfacet + facet normal 0.167480 0.681978 -0.711938 + outer loop + vertex -0.972913 -1.911169 1.262242 + vertex -1.058417 -2.946686 0.250187 + vertex -0.880030 -1.909828 1.285377 + endloop + endfacet + facet normal -0.018832 0.963823 -0.265876 + outer loop + vertex -1.058417 -2.946686 0.250187 + vertex -1.006375 -3.340990 -1.182885 + vertex -0.968795 -2.936123 0.282131 + endloop + endfacet + facet normal -0.005774 0.964100 -0.265478 + outer loop + vertex -1.058417 -2.946686 0.250187 + vertex -1.049571 -3.337220 -1.168255 + vertex -1.006375 -3.340990 -1.182885 + endloop + endfacet + facet normal 0.061675 0.901267 -0.428852 + outer loop + vertex -1.109021 -3.530566 -1.596056 + vertex -1.089436 -3.534324 -1.601137 + vertex -1.006375 -3.340990 -1.182885 + endloop + endfacet + facet normal -0.057356 0.912722 -0.404536 + outer loop + vertex -1.049571 -3.337220 -1.168255 + vertex -1.109021 -3.530566 -1.596056 + vertex -1.006375 -3.340990 -1.182885 + endloop + endfacet + facet normal 0.072986 -0.424977 0.902257 + outer loop + vertex -0.790998 -0.401975 -0.030272 + vertex -0.946343 -0.360211 0.001966 + vertex -0.846026 -0.266810 0.037844 + endloop + endfacet + facet normal 0.288120 0.809051 0.512273 + outer loop + vertex -1.120681 -3.516955 -1.610994 + vertex -1.098497 -3.517481 -1.622642 + vertex -1.109021 -3.530566 -1.596056 + endloop + endfacet + facet normal 0.798519 -0.272997 -0.536508 + outer loop + vertex -0.930561 -1.140143 0.356413 + vertex -0.873220 -1.097180 0.419897 + vertex -0.846026 -0.266810 0.037844 + endloop + endfacet + facet normal 0.574402 -0.329013 -0.749542 + outer loop + vertex -0.946343 -0.360211 0.001966 + vertex -0.930561 -1.140143 0.356413 + vertex -0.846026 -0.266810 0.037844 + endloop + endfacet + facet normal 0.770562 -0.548316 -0.324937 + outer loop + vertex -0.930561 -1.140143 0.356413 + vertex -0.938548 -1.686716 1.259791 + vertex -0.873220 -1.097180 0.419897 + endloop + endfacet + facet normal 0.849924 -0.454108 -0.267236 + outer loop + vertex -0.930561 -1.140143 0.356413 + vertex -0.962792 -1.698324 1.202410 + vertex -0.938548 -1.686716 1.259791 + endloop + endfacet + facet normal 0.847211 -0.135323 -0.513733 + outer loop + vertex -1.015284 -1.877186 1.183414 + vertex -0.972913 -1.911169 1.262242 + vertex -0.938548 -1.686716 1.259791 + endloop + endfacet + facet normal 0.912007 -0.231712 -0.338458 + outer loop + vertex -0.962792 -1.698324 1.202410 + vertex -1.015284 -1.877186 1.183414 + vertex -0.938548 -1.686716 1.259791 + endloop + endfacet + facet normal 0.891001 0.277562 -0.359273 + outer loop + vertex -1.015284 -1.877186 1.183414 + vertex -1.058417 -2.946686 0.250187 + vertex -0.972913 -1.911169 1.262242 + endloop + endfacet + facet normal 0.839563 0.337563 -0.425659 + outer loop + vertex -1.015284 -1.877186 1.183414 + vertex -1.109924 -2.886856 0.196043 + vertex -1.058417 -2.946686 0.250187 + endloop + endfacet + facet normal 0.926300 0.364708 -0.094637 + outer loop + vertex -1.069953 -3.296477 -1.210740 + vertex -1.049571 -3.337220 -1.168255 + vertex -1.058417 -2.946686 0.250187 + endloop + endfacet + facet normal 0.810221 0.568532 -0.142522 + outer loop + vertex -1.109924 -2.886856 0.196043 + vertex -1.069953 -3.296477 -1.210740 + vertex -1.058417 -2.946686 0.250187 + endloop + endfacet + facet normal 0.944952 0.228233 -0.234468 + outer loop + vertex -1.069953 -3.296477 -1.210740 + vertex -1.109021 -3.530566 -1.596056 + vertex -1.049571 -3.337220 -1.168255 + endloop + endfacet + facet normal 0.864127 0.386453 -0.322396 + outer loop + vertex -1.069953 -3.296477 -1.210740 + vertex -1.120681 -3.516955 -1.610994 + vertex -1.109021 -3.530566 -1.596056 + endloop + endfacet + facet normal 0.072983 -0.424986 0.902253 + outer loop + vertex -0.790998 -0.401975 -0.030272 + vertex -0.929682 -0.485059 -0.058188 + vertex -0.946343 -0.360211 0.001966 + endloop + endfacet + facet normal 0.288079 0.809116 0.512193 + outer loop + vertex -1.115638 -3.503742 -1.634704 + vertex -1.098497 -3.517481 -1.622642 + vertex -1.120681 -3.516955 -1.610994 + endloop + endfacet + facet normal 0.990014 0.074439 0.119715 + outer loop + vertex -0.929682 -0.485059 -0.058188 + vertex -0.930561 -1.140143 0.356413 + vertex -0.946343 -0.360211 0.001966 + endloop + endfacet + facet normal 0.982704 0.098089 0.157068 + outer loop + vertex -0.929682 -0.485059 -0.058188 + vertex -0.914527 -1.219838 0.305859 + vertex -0.930561 -1.140143 0.356413 + endloop + endfacet + facet normal 0.907099 0.334624 0.255340 + outer loop + vertex -0.936340 -1.723470 1.141392 + vertex -0.962792 -1.698324 1.202410 + vertex -0.930561 -1.140143 0.356413 + endloop + endfacet + facet normal 0.985708 0.131662 0.105095 + outer loop + vertex -0.914527 -1.219838 0.305859 + vertex -0.936340 -1.723470 1.141392 + vertex -0.930561 -1.140143 0.356413 + endloop + endfacet + facet normal 0.826961 -0.293625 0.479500 + outer loop + vertex -0.936340 -1.723470 1.141392 + vertex -1.015284 -1.877186 1.183414 + vertex -0.962792 -1.698324 1.202410 + endloop + endfacet + facet normal 0.887754 -0.388382 0.247088 + outer loop + vertex -0.936340 -1.723470 1.141392 + vertex -0.975239 -1.833469 1.108251 + vertex -1.015284 -1.877186 1.183414 + endloop + endfacet + facet normal 0.963315 -0.228283 0.141105 + outer loop + vertex -1.084530 -2.801688 0.160470 + vertex -1.109924 -2.886856 0.196043 + vertex -1.015284 -1.877186 1.183414 + endloop + endfacet + facet normal 0.893704 -0.361284 0.266019 + outer loop + vertex -0.975239 -1.833469 1.108251 + vertex -1.084530 -2.801688 0.160470 + vertex -1.015284 -1.877186 1.183414 + endloop + endfacet + facet normal 0.964169 -0.246102 0.099053 + outer loop + vertex -1.084530 -2.801688 0.160470 + vertex -1.069953 -3.296477 -1.210740 + vertex -1.109924 -2.886856 0.196043 + endloop + endfacet + facet normal 0.968372 -0.231237 0.093734 + outer loop + vertex -1.084530 -2.801688 0.160470 + vertex -1.052176 -3.249437 -1.278350 + vertex -1.069953 -3.296477 -1.210740 + endloop + endfacet + facet normal 0.955380 -0.292644 0.040117 + outer loop + vertex -1.115638 -3.503742 -1.634704 + vertex -1.120681 -3.516955 -1.610994 + vertex -1.069953 -3.296477 -1.210740 + endloop + endfacet + facet normal 0.953479 -0.298361 0.043116 + outer loop + vertex -1.052176 -3.249437 -1.278350 + vertex -1.115638 -3.503742 -1.634704 + vertex -1.069953 -3.296477 -1.210740 + endloop + endfacet + facet normal 0.072986 -0.424990 0.902251 + outer loop + vertex -0.790998 -0.401975 -0.030272 + vertex -0.808589 -0.547342 -0.097321 + vertex -0.929682 -0.485059 -0.058188 + endloop + endfacet + facet normal 0.288051 0.809107 0.512222 + outer loop + vertex -1.097689 -3.500874 -1.649329 + vertex -1.098497 -3.517481 -1.622642 + vertex -1.115638 -3.503742 -1.634704 + endloop + endfacet + facet normal 0.307019 0.427586 0.850241 + outer loop + vertex -0.837188 -1.276254 0.306304 + vertex -0.914527 -1.219838 0.305859 + vertex -0.929682 -0.485059 -0.058188 + endloop + endfacet + facet normal 0.465867 0.414589 0.781719 + outer loop + vertex -0.808589 -0.547342 -0.097321 + vertex -0.837188 -1.276254 0.306304 + vertex -0.929682 -0.485059 -0.058188 + endloop + endfacet + facet normal 0.524762 0.722922 0.449453 + outer loop + vertex -0.837188 -1.276254 0.306304 + vertex -0.936340 -1.723470 1.141392 + vertex -0.914527 -1.219838 0.305859 + endloop + endfacet + facet normal 0.420922 0.777906 0.466570 + outer loop + vertex -0.837188 -1.276254 0.306304 + vertex -0.879110 -1.743217 1.122686 + vertex -0.936340 -1.723470 1.141392 + endloop + endfacet + facet normal 0.225111 -0.353196 0.908063 + outer loop + vertex -0.882931 -1.812938 1.093353 + vertex -0.975239 -1.833469 1.108251 + vertex -0.936340 -1.723470 1.141392 + endloop + endfacet + facet normal 0.161638 -0.390208 0.906427 + outer loop + vertex -0.879110 -1.743217 1.122686 + vertex -0.882931 -1.812938 1.093353 + vertex -0.936340 -1.723470 1.141392 + endloop + endfacet + facet normal 0.262340 -0.689983 0.674611 + outer loop + vertex -0.882931 -1.812938 1.093353 + vertex -1.084530 -2.801688 0.160470 + vertex -0.975239 -1.833469 1.108251 + endloop + endfacet + facet normal 0.304612 -0.685769 0.661009 + outer loop + vertex -0.882931 -1.812938 1.093353 + vertex -1.001356 -2.755311 0.170255 + vertex -1.084530 -2.801688 0.160470 + endloop + endfacet + facet normal 0.576874 -0.776171 0.254510 + outer loop + vertex -1.009624 -3.231524 -1.320172 + vertex -1.052176 -3.249437 -1.278350 + vertex -1.084530 -2.801688 0.160470 + endloop + endfacet + facet normal 0.444392 -0.854044 0.270414 + outer loop + vertex -1.001356 -2.755311 0.170255 + vertex -1.009624 -3.231524 -1.320172 + vertex -1.084530 -2.801688 0.160470 + endloop + endfacet + facet normal 0.642835 -0.673016 0.365804 + outer loop + vertex -1.009624 -3.231524 -1.320172 + vertex -1.115638 -3.503742 -1.634704 + vertex -1.052176 -3.249437 -1.278350 + endloop + endfacet + facet normal 0.496771 -0.732070 0.466146 + outer loop + vertex -1.009624 -3.231524 -1.320172 + vertex -1.097689 -3.500874 -1.649329 + vertex -1.115638 -3.503742 -1.634704 + endloop + endfacet + facet normal 0.072988 -0.424990 0.902251 + outer loop + vertex -0.790998 -0.401975 -0.030272 + vertex -0.674250 -0.500161 -0.085965 + vertex -0.808589 -0.547342 -0.097321 + endloop + endfacet + facet normal 0.288186 0.809071 0.512204 + outer loop + vertex -1.080349 -3.510513 -1.643859 + vertex -1.098497 -3.517481 -1.622642 + vertex -1.097689 -3.500874 -1.649329 + endloop + endfacet + facet normal -0.239185 0.477531 0.845432 + outer loop + vertex -0.674250 -0.500161 -0.085965 + vertex -0.837188 -1.276254 0.306304 + vertex -0.808589 -0.547342 -0.097321 + endloop + endfacet + facet normal -0.511623 0.470720 0.718794 + outer loop + vertex -0.674250 -0.500161 -0.085965 + vertex -0.756784 -1.266909 0.357414 + vertex -0.837188 -1.276254 0.306304 + endloop + endfacet + facet normal -0.382026 0.810513 0.443988 + outer loop + vertex -0.834199 -1.742695 1.160377 + vertex -0.879110 -1.743217 1.122686 + vertex -0.837188 -1.276254 0.306304 + endloop + endfacet + facet normal -0.377227 0.812248 0.444919 + outer loop + vertex -0.756784 -1.266909 0.357414 + vertex -0.834199 -1.742695 1.160377 + vertex -0.837188 -1.276254 0.306304 + endloop + endfacet + facet normal -0.615875 -0.276611 0.737688 + outer loop + vertex -0.834199 -1.742695 1.160377 + vertex -0.882931 -1.812938 1.093353 + vertex -0.879110 -1.743217 1.122686 + endloop + endfacet + facet normal -0.620293 -0.271740 0.735795 + outer loop + vertex -0.834199 -1.742695 1.160377 + vertex -0.807871 -1.831055 1.149940 + vertex -0.882931 -1.812938 1.093353 + endloop + endfacet + facet normal -0.567791 -0.538507 0.622594 + outer loop + vertex -0.923037 -2.782653 0.218032 + vertex -1.001356 -2.755311 0.170255 + vertex -0.882931 -1.812938 1.093353 + endloop + endfacet + facet normal -0.588796 -0.528039 0.611959 + outer loop + vertex -0.807871 -1.831055 1.149940 + vertex -0.923037 -2.782653 0.218032 + vertex -0.882931 -1.812938 1.093353 + endloop + endfacet + facet normal -0.461007 -0.844552 0.272404 + outer loop + vertex -0.923037 -2.782653 0.218032 + vertex -1.009624 -3.231524 -1.320172 + vertex -1.001356 -2.755311 0.170255 + endloop + endfacet + facet normal -0.626500 -0.738025 0.250633 + outer loop + vertex -0.923037 -2.782653 0.218032 + vertex -0.974341 -3.256226 -1.304714 + vertex -1.009624 -3.231524 -1.320172 + endloop + endfacet + facet normal -0.521525 -0.586633 0.619576 + outer loop + vertex -1.080349 -3.510513 -1.643859 + vertex -1.097689 -3.500874 -1.649329 + vertex -1.009624 -3.231524 -1.320172 + endloop + endfacet + facet normal -0.621272 -0.521287 0.585048 + outer loop + vertex -0.974341 -3.256226 -1.304714 + vertex -1.080349 -3.510513 -1.643859 + vertex -1.009624 -3.231524 -1.320172 + endloop + endfacet + facet normal 0.072989 -0.424988 0.902251 + outer loop + vertex -0.790998 -0.401975 -0.030272 + vertex -0.627824 -0.379043 -0.032670 + vertex -0.674250 -0.500161 -0.085965 + endloop + endfacet + facet normal 0.288157 0.809092 0.512187 + outer loop + vertex -1.076676 -3.525398 -1.622411 + vertex -1.098497 -3.517481 -1.622642 + vertex -1.080349 -3.510513 -1.643859 + endloop + endfacet + facet normal -0.970688 0.189770 0.147484 + outer loop + vertex -0.733861 -1.198839 0.420700 + vertex -0.756784 -1.266909 0.357414 + vertex -0.674250 -0.500161 -0.085965 + endloop + endfacet + facet normal -0.937110 0.253749 0.239660 + outer loop + vertex -0.627824 -0.379043 -0.032670 + vertex -0.733861 -1.198839 0.420700 + vertex -0.674250 -0.500161 -0.085965 + endloop + endfacet + facet normal -0.962245 0.264556 0.063988 + outer loop + vertex -0.733861 -1.198839 0.420700 + vertex -0.834199 -1.742695 1.160377 + vertex -0.756784 -1.266909 0.357414 + endloop + endfacet + facet normal -0.992403 0.111044 -0.052974 + outer loop + vertex -0.733861 -1.198839 0.420700 + vertex -0.835425 -1.722300 1.226081 + vertex -0.834199 -1.742695 1.160377 + endloop + endfacet + facet normal -0.955061 -0.270182 -0.121903 + outer loop + vertex -0.806580 -1.874175 1.235398 + vertex -0.807871 -1.831055 1.149940 + vertex -0.834199 -1.742695 1.160377 + endloop + endfacet + facet normal -0.982131 -0.184147 0.038845 + outer loop + vertex -0.835425 -1.722300 1.226081 + vertex -0.806580 -1.874175 1.235398 + vertex -0.834199 -1.742695 1.160377 + endloop + endfacet + facet normal -0.996195 0.070829 0.050785 + outer loop + vertex -0.806580 -1.874175 1.235398 + vertex -0.923037 -2.782653 0.218032 + vertex -0.807871 -1.831055 1.149940 + endloop + endfacet + facet normal -0.982286 -0.069130 0.174172 + outer loop + vertex -0.806580 -1.874175 1.235398 + vertex -0.908545 -2.863121 0.267821 + vertex -0.923037 -2.782653 0.218032 + endloop + endfacet + facet normal -0.999483 0.009033 0.030865 + outer loop + vertex -0.972894 -3.304943 -1.243616 + vertex -0.974341 -3.256226 -1.304714 + vertex -0.923037 -2.782653 0.218032 + endloop + endfacet + facet normal -0.988476 -0.128697 0.079705 + outer loop + vertex -0.908545 -2.863121 0.267821 + vertex -0.972894 -3.304943 -1.243616 + vertex -0.923037 -2.782653 0.218032 + endloop + endfacet + facet normal -0.969164 0.180972 0.167245 + outer loop + vertex -0.972894 -3.304943 -1.243616 + vertex -1.080349 -3.510513 -1.643859 + vertex -0.974341 -3.256226 -1.304714 + endloop + endfacet + facet normal -0.972173 0.078271 0.220801 + outer loop + vertex -0.972894 -3.304943 -1.243616 + vertex -1.076676 -3.525398 -1.622411 + vertex -1.080349 -3.510513 -1.643859 + endloop + endfacet + facet normal -0.041442 0.415022 0.908867 + outer loop + vertex -0.614051 0.300803 -0.009824 + vertex -0.709183 0.205512 0.029352 + vertex -0.771921 0.340665 -0.035225 + endloop + endfacet + facet normal 0.109959 -0.990334 0.084544 + outer loop + vertex -0.453719 3.545088 -1.521005 + vertex -0.475866 3.542093 -1.527286 + vertex -0.468992 3.545227 -1.499515 + endloop + endfacet + facet normal -0.570165 0.334529 -0.750334 + outer loop + vertex -0.614051 0.300803 -0.009824 + vertex -0.712241 1.127192 0.433227 + vertex -0.775598 1.057486 0.450292 + endloop + endfacet + facet normal -0.611606 0.311619 -0.727208 + outer loop + vertex -0.614051 0.300803 -0.009824 + vertex -0.775598 1.057486 0.450292 + vertex -0.709183 0.205512 0.029352 + endloop + endfacet + facet normal -0.695669 0.507933 -0.507986 + outer loop + vertex -0.712241 1.127192 0.433227 + vertex -0.897681 1.658402 1.218335 + vertex -0.775598 1.057486 0.450292 + endloop + endfacet + facet normal -0.568472 0.601666 -0.561104 + outer loop + vertex -0.897681 1.658402 1.218335 + vertex -0.953412 1.638479 1.253435 + vertex -0.775598 1.057486 0.450292 + endloop + endfacet + facet normal -0.332946 0.200344 -0.921417 + outer loop + vertex -0.897681 1.658402 1.218335 + vertex -0.855414 1.806430 1.235248 + vertex -0.932361 1.849565 1.272431 + endloop + endfacet + facet normal -0.561176 0.129532 -0.817498 + outer loop + vertex -0.897681 1.658402 1.218335 + vertex -0.932361 1.849565 1.272431 + vertex -0.953412 1.638479 1.253435 + endloop + endfacet + facet normal -0.571413 -0.403153 -0.714811 + outer loop + vertex -0.855414 1.806430 1.235248 + vertex -0.710753 2.348053 0.814132 + vertex -0.932361 1.849565 1.272431 + endloop + endfacet + facet normal -0.609458 -0.372496 -0.699863 + outer loop + vertex -0.710753 2.348053 0.814132 + vertex -0.764732 2.426953 0.819145 + vertex -0.932361 1.849565 1.272431 + endloop + endfacet + facet normal -0.704305 -0.627008 -0.332891 + outer loop + vertex -0.710753 2.348053 0.814132 + vertex -0.440545 3.160259 -1.287360 + vertex -0.480171 3.169330 -1.220608 + endloop + endfacet + facet normal -0.795601 -0.525117 -0.302111 + outer loop + vertex -0.710753 2.348053 0.814132 + vertex -0.480171 3.169330 -1.220608 + vertex -0.764732 2.426953 0.819145 + endloop + endfacet + facet normal -0.836550 -0.304983 -0.455159 + outer loop + vertex -0.440545 3.160259 -1.287360 + vertex -0.453719 3.545088 -1.521005 + vertex -0.480171 3.169330 -1.220608 + endloop + endfacet + facet normal -0.756833 -0.374799 -0.535471 + outer loop + vertex -0.453719 3.545088 -1.521005 + vertex -0.468992 3.545227 -1.499515 + vertex -0.480171 3.169330 -1.220608 + endloop + endfacet + facet normal -0.041446 0.415020 0.908868 + outer loop + vertex -0.709183 0.205512 0.029352 + vertex -0.851559 0.211993 0.019900 + vertex -0.771921 0.340665 -0.035225 + endloop + endfacet + facet normal 0.109957 -0.990334 0.084545 + outer loop + vertex -0.468992 3.545227 -1.499515 + vertex -0.475866 3.542093 -1.527286 + vertex -0.489443 3.543005 -1.498937 + endloop + endfacet + facet normal 0.079495 0.446532 -0.891229 + outer loop + vertex -0.709183 0.205512 0.029352 + vertex -0.775598 1.057486 0.450292 + vertex -0.851559 0.211993 0.019900 + endloop + endfacet + facet normal 0.362294 0.396775 -0.843394 + outer loop + vertex -0.775598 1.057486 0.450292 + vertex -0.859056 1.040657 0.406524 + vertex -0.851559 0.211993 0.019900 + endloop + endfacet + facet normal 0.138292 0.816729 -0.560204 + outer loop + vertex -0.775598 1.057486 0.450292 + vertex -0.953412 1.638479 1.253435 + vertex -1.008198 1.633792 1.233077 + endloop + endfacet + facet normal 0.130304 0.816518 -0.562422 + outer loop + vertex -0.775598 1.057486 0.450292 + vertex -1.008198 1.633792 1.233077 + vertex -0.859056 1.040657 0.406524 + endloop + endfacet + facet normal 0.344124 0.050054 -0.937589 + outer loop + vertex -0.953412 1.638479 1.253435 + vertex -0.932361 1.849565 1.272431 + vertex -1.008198 1.633792 1.233077 + endloop + endfacet + facet normal 0.410273 0.022082 -0.911696 + outer loop + vertex -0.932361 1.849565 1.272431 + vertex -1.019176 1.860608 1.233630 + vertex -1.008198 1.633792 1.233077 + endloop + endfacet + facet normal 0.258675 -0.641834 -0.721898 + outer loop + vertex -0.932361 1.849565 1.272431 + vertex -0.764732 2.426953 0.819145 + vertex -0.845875 2.446826 0.772400 + endloop + endfacet + facet normal 0.242763 -0.643158 -0.726232 + outer loop + vertex -0.932361 1.849565 1.272431 + vertex -0.845875 2.446826 0.772400 + vertex -1.019176 1.860608 1.233630 + endloop + endfacet + facet normal -0.030602 -0.937878 -0.345614 + outer loop + vertex -0.764732 2.426953 0.819145 + vertex -0.480171 3.169330 -1.220608 + vertex -0.845875 2.446826 0.772400 + endloop + endfacet + facet normal 0.004704 -0.940396 -0.340049 + outer loop + vertex -0.480171 3.169330 -1.220608 + vertex -0.525406 3.166777 -1.214174 + vertex -0.845875 2.446826 0.772400 + endloop + endfacet + facet normal 0.042110 -0.596148 -0.801769 + outer loop + vertex -0.480171 3.169330 -1.220608 + vertex -0.468992 3.545227 -1.499515 + vertex -0.489443 3.543005 -1.498937 + endloop + endfacet + facet normal -0.079894 -0.596715 -0.798466 + outer loop + vertex -0.480171 3.169330 -1.220608 + vertex -0.489443 3.543005 -1.498937 + vertex -0.525406 3.166777 -1.214174 + endloop + endfacet + facet normal -0.041444 0.415020 0.908868 + outer loop + vertex -0.851559 0.211993 0.019900 + vertex -0.933966 0.315369 -0.031063 + vertex -0.771921 0.340665 -0.035225 + endloop + endfacet + facet normal 0.109934 -0.990338 0.084534 + outer loop + vertex -0.489443 3.543005 -1.498937 + vertex -0.475866 3.542093 -1.527286 + vertex -0.499670 3.540097 -1.519705 + endloop + endfacet + facet normal 0.903346 0.188033 -0.385498 + outer loop + vertex -0.851559 0.211993 0.019900 + vertex -0.859056 1.040657 0.406524 + vertex -0.899771 1.089378 0.334881 + endloop + endfacet + facet normal 0.726601 0.267169 -0.632986 + outer loop + vertex -0.851559 0.211993 0.019900 + vertex -0.899771 1.089378 0.334881 + vertex -0.933966 0.315369 -0.031063 + endloop + endfacet + facet normal 0.867568 0.464764 -0.176972 + outer loop + vertex -0.859056 1.040657 0.406524 + vertex -1.008198 1.633792 1.233077 + vertex -0.899771 1.089378 0.334881 + endloop + endfacet + facet normal 0.925578 0.362779 -0.108154 + outer loop + vertex -1.008198 1.633792 1.233077 + vertex -1.020784 1.647871 1.172592 + vertex -0.899771 1.089378 0.334881 + endloop + endfacet + facet normal 0.932907 0.046024 -0.357164 + outer loop + vertex -1.008198 1.633792 1.233077 + vertex -1.019176 1.860608 1.233630 + vertex -1.050486 1.831240 1.148066 + endloop + endfacet + facet normal 0.975856 0.135113 -0.171609 + outer loop + vertex -1.008198 1.633792 1.233077 + vertex -1.050486 1.831240 1.148066 + vertex -1.020784 1.647871 1.172592 + endloop + endfacet + facet normal 0.892838 -0.410217 -0.185908 + outer loop + vertex -1.019176 1.860608 1.233630 + vertex -0.845875 2.446826 0.772400 + vertex -1.050486 1.831240 1.148066 + endloop + endfacet + facet normal 0.857569 -0.443765 -0.260093 + outer loop + vertex -0.845875 2.446826 0.772400 + vertex -0.893078 2.392708 0.709098 + vertex -1.050486 1.831240 1.148066 + endloop + endfacet + facet normal 0.783792 -0.613570 -0.095924 + outer loop + vertex -0.845875 2.446826 0.772400 + vertex -0.525406 3.166777 -1.214174 + vertex -0.542185 3.154524 -1.272899 + endloop + endfacet + facet normal 0.799033 -0.594930 -0.087211 + outer loop + vertex -0.845875 2.446826 0.772400 + vertex -0.542185 3.154524 -1.272899 + vertex -0.893078 2.392708 0.709098 + endloop + endfacet + facet normal 0.942718 -0.253892 -0.216383 + outer loop + vertex -0.525406 3.166777 -1.214174 + vertex -0.489443 3.543005 -1.498937 + vertex -0.542185 3.154524 -1.272899 + endloop + endfacet + facet normal 0.862534 -0.336816 -0.377612 + outer loop + vertex -0.489443 3.543005 -1.498937 + vertex -0.499670 3.540097 -1.519705 + vertex -0.542185 3.154524 -1.272899 + endloop + endfacet + facet normal -0.041446 0.415029 0.908864 + outer loop + vertex -0.933966 0.315369 -0.031063 + vertex -0.894350 0.437791 -0.085160 + vertex -0.771921 0.340665 -0.035225 + endloop + endfacet + facet normal 0.109906 -0.990349 0.084440 + outer loop + vertex -0.499670 3.540097 -1.519705 + vertex -0.475866 3.542093 -1.527286 + vertex -0.491974 3.538694 -1.546181 + endloop + endfacet + facet normal 0.941181 -0.177516 0.287518 + outer loop + vertex -0.933966 0.315369 -0.031063 + vertex -0.899771 1.089378 0.334881 + vertex -0.894350 0.437791 -0.085160 + endloop + endfacet + facet normal 0.925102 -0.200272 0.322611 + outer loop + vertex -0.899771 1.089378 0.334881 + vertex -0.867084 1.166961 0.289312 + vertex -0.894350 0.437791 -0.085160 + endloop + endfacet + facet normal 0.809640 -0.427607 0.402039 + outer loop + vertex -0.899771 1.089378 0.334881 + vertex -1.020784 1.647871 1.172592 + vertex -0.981692 1.670114 1.117526 + endloop + endfacet + facet normal 0.933612 -0.233975 0.271337 + outer loop + vertex -0.899771 1.089378 0.334881 + vertex -0.981692 1.670114 1.117526 + vertex -0.867084 1.166961 0.289312 + endloop + endfacet + facet normal 0.756897 0.205577 0.620359 + outer loop + vertex -1.020784 1.647871 1.172592 + vertex -1.050486 1.831240 1.148066 + vertex -0.981692 1.670114 1.117526 + endloop + endfacet + facet normal 0.866550 0.293460 0.403698 + outer loop + vertex -1.050486 1.831240 1.148066 + vertex -1.002712 1.783576 1.080167 + vertex -0.981692 1.670114 1.117526 + endloop + endfacet + facet normal 0.904025 0.075514 0.420758 + outer loop + vertex -1.050486 1.831240 1.148066 + vertex -0.893078 2.392708 0.709098 + vertex -0.870797 2.305352 0.676905 + endloop + endfacet + facet normal 0.856917 0.161638 0.489456 + outer loop + vertex -1.050486 1.831240 1.148066 + vertex -0.870797 2.305352 0.676905 + vertex -1.002712 1.783576 1.080167 + endloop + endfacet + facet normal 0.959723 0.159563 0.231240 + outer loop + vertex -0.893078 2.392708 0.709098 + vertex -0.542185 3.154524 -1.272899 + vertex -0.870797 2.305352 0.676905 + endloop + endfacet + facet normal 0.942927 0.216353 0.253142 + outer loop + vertex -0.542185 3.154524 -1.272899 + vertex -0.517877 3.141793 -1.352567 + vertex -0.870797 2.305352 0.676905 + endloop + endfacet + facet normal 0.958870 0.070300 0.275003 + outer loop + vertex -0.542185 3.154524 -1.272899 + vertex -0.499670 3.540097 -1.519705 + vertex -0.491974 3.538694 -1.546181 + endloop + endfacet + facet normal 0.957077 0.074212 0.280173 + outer loop + vertex -0.542185 3.154524 -1.272899 + vertex -0.491974 3.538694 -1.546181 + vertex -0.517877 3.141793 -1.352567 + endloop + endfacet + facet normal -0.041443 0.415033 0.908862 + outer loop + vertex -0.894350 0.437791 -0.085160 + vertex -0.762543 0.487076 -0.101655 + vertex -0.771921 0.340665 -0.035225 + endloop + endfacet + facet normal 0.109902 -0.990349 0.084443 + outer loop + vertex -0.491974 3.538694 -1.546181 + vertex -0.475866 3.542093 -1.527286 + vertex -0.472149 3.539850 -1.558426 + endloop + endfacet + facet normal 0.109040 -0.457336 0.882584 + outer loop + vertex -0.894350 0.437791 -0.085160 + vertex -0.867084 1.166961 0.289312 + vertex -0.785607 1.214984 0.304130 + endloop + endfacet + facet normal 0.277855 -0.461014 0.842771 + outer loop + vertex -0.894350 0.437791 -0.085160 + vertex -0.785607 1.214984 0.304130 + vertex -0.762543 0.487076 -0.101655 + endloop + endfacet + facet normal 0.361493 -0.773815 0.520128 + outer loop + vertex -0.867084 1.166961 0.289312 + vertex -0.981692 1.670114 1.117526 + vertex -0.785607 1.214984 0.304130 + endloop + endfacet + facet normal 0.251163 -0.817641 0.518054 + outer loop + vertex -0.981692 1.670114 1.117526 + vertex -0.920360 1.683771 1.109345 + vertex -0.785607 1.214984 0.304130 + endloop + endfacet + facet normal 0.099152 0.327728 0.939555 + outer loop + vertex -0.981692 1.670114 1.117526 + vertex -1.002712 1.783576 1.080167 + vertex -0.911831 1.753510 1.081064 + endloop + endfacet + facet normal 0.041085 0.371169 0.927656 + outer loop + vertex -0.981692 1.670114 1.117526 + vertex -0.911831 1.753510 1.081064 + vertex -0.920360 1.683771 1.109345 + endloop + endfacet + facet normal 0.181426 0.572242 0.799764 + outer loop + vertex -1.002712 1.783576 1.080167 + vertex -0.870797 2.305352 0.676905 + vertex -0.911831 1.753510 1.081064 + endloop + endfacet + facet normal 0.172062 0.573693 0.800794 + outer loop + vertex -0.870797 2.305352 0.676905 + vertex -0.795808 2.250535 0.700063 + vertex -0.911831 1.753510 1.081064 + endloop + endfacet + facet normal 0.413948 0.814009 0.407476 + outer loop + vertex -0.870797 2.305352 0.676905 + vertex -0.517877 3.141793 -1.352567 + vertex -0.470782 3.138176 -1.393183 + endloop + endfacet + facet normal 0.453949 0.792808 0.406677 + outer loop + vertex -0.870797 2.305352 0.676905 + vertex -0.470782 3.138176 -1.393183 + vertex -0.795808 2.250535 0.700063 + endloop + endfacet + facet normal 0.635360 0.304674 0.709571 + outer loop + vertex -0.517877 3.141793 -1.352567 + vertex -0.491974 3.538694 -1.546181 + vertex -0.470782 3.138176 -1.393183 + endloop + endfacet + facet normal 0.480959 0.334958 0.810235 + outer loop + vertex -0.491974 3.538694 -1.546181 + vertex -0.472149 3.539850 -1.558426 + vertex -0.470782 3.138176 -1.393183 + endloop + endfacet + facet normal -0.041440 0.415033 0.908862 + outer loop + vertex -0.762543 0.487076 -0.101655 + vertex -0.637798 0.426110 -0.068128 + vertex -0.771921 0.340665 -0.035225 + endloop + endfacet + facet normal 0.110049 -0.990331 0.084460 + outer loop + vertex -0.472149 3.539850 -1.558426 + vertex -0.475866 3.542093 -1.527286 + vertex -0.455124 3.542697 -1.547222 + endloop + endfacet + facet normal -0.430225 -0.449914 0.782614 + outer loop + vertex -0.762543 0.487076 -0.101655 + vertex -0.785607 1.214984 0.304130 + vertex -0.637798 0.426110 -0.068128 + endloop + endfacet + facet normal -0.674363 -0.414663 0.610974 + outer loop + vertex -0.785607 1.214984 0.304130 + vertex -0.716696 1.197285 0.368179 + vertex -0.637798 0.426110 -0.068128 + endloop + endfacet + facet normal -0.534693 -0.766140 0.356556 + outer loop + vertex -0.785607 1.214984 0.304130 + vertex -0.920360 1.683771 1.109345 + vertex -0.882972 1.678557 1.154210 + endloop + endfacet + facet normal -0.530333 -0.768368 0.358271 + outer loop + vertex -0.785607 1.214984 0.304130 + vertex -0.882972 1.678557 1.154210 + vertex -0.716696 1.197285 0.368179 + endloop + endfacet + facet normal -0.702823 0.339469 0.625140 + outer loop + vertex -0.920360 1.683771 1.109345 + vertex -0.911831 1.753510 1.081064 + vertex -0.882972 1.678557 1.154210 + endloop + endfacet + facet normal -0.707317 0.335091 0.622428 + outer loop + vertex -0.911831 1.753510 1.081064 + vertex -0.846277 1.763681 1.150082 + vertex -0.882972 1.678557 1.154210 + endloop + endfacet + facet normal -0.619192 0.563640 0.546727 + outer loop + vertex -0.911831 1.753510 1.081064 + vertex -0.795808 2.250535 0.700063 + vertex -0.724583 2.269540 0.761136 + endloop + endfacet + facet normal -0.640846 0.558844 0.526318 + outer loop + vertex -0.911831 1.753510 1.081064 + vertex -0.724583 2.269540 0.761136 + vertex -0.846277 1.763681 1.150082 + endloop + endfacet + facet normal -0.466305 0.838134 0.283005 + outer loop + vertex -0.795808 2.250535 0.700063 + vertex -0.470782 3.138176 -1.393183 + vertex -0.724583 2.269540 0.761136 + endloop + endfacet + facet normal -0.445954 0.847108 0.289021 + outer loop + vertex -0.470782 3.138176 -1.393183 + vertex -0.436367 3.146393 -1.364164 + vertex -0.724583 2.269540 0.761136 + endloop + endfacet + facet normal -0.558004 0.314088 0.768102 + outer loop + vertex -0.470782 3.138176 -1.393183 + vertex -0.472149 3.539850 -1.558426 + vertex -0.455124 3.542697 -1.547222 + endloop + endfacet + facet normal -0.656411 0.290524 0.696219 + outer loop + vertex -0.470782 3.138176 -1.393183 + vertex -0.455124 3.542697 -1.547222 + vertex -0.436367 3.146393 -1.364164 + endloop + endfacet + facet normal -0.041439 0.415031 0.908863 + outer loop + vertex -0.637798 0.426110 -0.068128 + vertex -0.614051 0.300803 -0.009824 + vertex -0.771921 0.340665 -0.035225 + endloop + endfacet + facet normal 0.109999 -0.990341 0.084407 + outer loop + vertex -0.455124 3.542697 -1.547222 + vertex -0.475866 3.542093 -1.527286 + vertex -0.453719 3.545088 -1.521005 + endloop + endfacet + facet normal -0.995850 -0.087267 -0.025835 + outer loop + vertex -0.637798 0.426110 -0.068128 + vertex -0.716696 1.197285 0.368179 + vertex -0.712241 1.127192 0.433227 + endloop + endfacet + facet normal -0.985555 -0.154404 0.069576 + outer loop + vertex -0.637798 0.426110 -0.068128 + vertex -0.712241 1.127192 0.433227 + vertex -0.614051 0.300803 -0.009824 + endloop + endfacet + facet normal -0.980780 -0.162526 -0.107962 + outer loop + vertex -0.716696 1.197285 0.368179 + vertex -0.882972 1.678557 1.154210 + vertex -0.712241 1.127192 0.433227 + endloop + endfacet + facet normal -0.974204 -0.006703 -0.225569 + outer loop + vertex -0.882972 1.678557 1.154210 + vertex -0.897681 1.658402 1.218335 + vertex -0.712241 1.127192 0.433227 + endloop + endfacet + facet normal -0.886417 0.368533 -0.280085 + outer loop + vertex -0.882972 1.678557 1.154210 + vertex -0.846277 1.763681 1.150082 + vertex -0.855414 1.806430 1.235248 + endloop + endfacet + facet normal -0.949701 0.285797 -0.128012 + outer loop + vertex -0.882972 1.678557 1.154210 + vertex -0.855414 1.806430 1.235248 + vertex -0.897681 1.658402 1.218335 + endloop + endfacet + facet normal -0.980542 0.111841 -0.161335 + outer loop + vertex -0.846277 1.763681 1.150082 + vertex -0.724583 2.269540 0.761136 + vertex -0.855414 1.806430 1.235248 + endloop + endfacet + facet normal -0.975146 0.212986 -0.061048 + outer loop + vertex -0.724583 2.269540 0.761136 + vertex -0.710753 2.348053 0.814132 + vertex -0.855414 1.806430 1.235248 + endloop + endfacet + facet normal -0.987725 0.135249 -0.078147 + outer loop + vertex -0.724583 2.269540 0.761136 + vertex -0.436367 3.146393 -1.364164 + vertex -0.440545 3.160259 -1.287360 + endloop + endfacet + facet normal -0.977861 0.203926 -0.046917 + outer loop + vertex -0.724583 2.269540 0.761136 + vertex -0.440545 3.160259 -1.287360 + vertex -0.710753 2.348053 0.814132 + endloop + endfacet + facet normal -0.996882 -0.066672 -0.042191 + outer loop + vertex -0.436367 3.146393 -1.364164 + vertex -0.455124 3.542697 -1.547222 + vertex -0.440545 3.160259 -1.287360 + endloop + endfacet + facet normal -0.998558 -0.001607 0.053657 + outer loop + vertex -0.455124 3.542697 -1.547222 + vertex -0.453719 3.545088 -1.521005 + vertex -0.440545 3.160259 -1.287360 + endloop + endfacet + facet normal 0.272474 0.292852 0.916513 + outer loop + vertex -0.253797 0.214561 -0.045835 + vertex -0.376741 0.170128 0.004914 + vertex -0.376302 0.324781 -0.044633 + endloop + endfacet + facet normal -0.247446 -0.867470 0.431586 + outer loop + vertex 0.933725 3.979607 -1.556237 + vertex 0.911266 3.985315 -1.557641 + vertex 0.926604 3.992514 -1.534378 + endloop + endfacet + facet normal -0.777863 0.563658 -0.277884 + outer loop + vertex -0.253797 0.214561 -0.045835 + vertex 0.103584 0.929287 0.403520 + vertex 0.045554 0.876026 0.457925 + endloop + endfacet + facet normal -0.477920 0.658786 -0.581028 + outer loop + vertex -0.253797 0.214561 -0.045835 + vertex 0.045554 0.876026 0.457925 + vertex -0.376741 0.170128 0.004914 + endloop + endfacet + facet normal -0.779423 0.557750 -0.285332 + outer loop + vertex 0.103584 0.929287 0.403520 + vertex 0.204066 1.506257 1.256863 + vertex 0.045554 0.876026 0.457925 + endloop + endfacet + facet normal -0.765340 0.570419 -0.298121 + outer loop + vertex 0.204066 1.506257 1.256863 + vertex 0.174039 1.498042 1.318229 + vertex 0.045554 0.876026 0.457925 + endloop + endfacet + facet normal -0.725150 0.339533 -0.599062 + outer loop + vertex 0.204066 1.506257 1.256863 + vertex 0.282789 1.638025 1.236253 + vertex 0.252124 1.695822 1.306131 + endloop + endfacet + facet normal -0.867439 0.319119 -0.381722 + outer loop + vertex 0.204066 1.506257 1.256863 + vertex 0.252124 1.695822 1.306131 + vertex 0.174039 1.498042 1.318229 + endloop + endfacet + facet normal -0.886598 0.080321 -0.455513 + outer loop + vertex 0.282789 1.638025 1.236253 + vertex 0.676887 2.684097 0.653648 + vertex 0.252124 1.695822 1.306131 + endloop + endfacet + facet normal -0.822990 -0.021063 -0.567665 + outer loop + vertex 0.676887 2.684097 0.653648 + vertex 0.655481 2.773188 0.681377 + vertex 0.252124 1.695822 1.306131 + endloop + endfacet + facet normal -0.987821 -0.067298 -0.140287 + outer loop + vertex 0.676887 2.684097 0.653648 + vertex 0.870213 3.711051 -1.200285 + vertex 0.858199 3.754962 -1.136756 + endloop + endfacet + facet normal -0.965102 -0.169849 -0.199324 + outer loop + vertex 0.676887 2.684097 0.653648 + vertex 0.858199 3.754962 -1.136756 + vertex 0.655481 2.773188 0.681377 + endloop + endfacet + facet normal -0.983464 -0.007265 -0.180959 + outer loop + vertex 0.870213 3.711051 -1.200285 + vertex 0.933725 3.979607 -1.556237 + vertex 0.858199 3.754962 -1.136756 + endloop + endfacet + facet normal -0.962733 -0.124581 -0.240053 + outer loop + vertex 0.933725 3.979607 -1.556237 + vertex 0.926604 3.992514 -1.534378 + vertex 0.858199 3.754962 -1.136756 + endloop + endfacet + facet normal 0.272467 0.292852 0.916515 + outer loop + vertex -0.376741 0.170128 0.004914 + vertex -0.499356 0.242150 0.018352 + vertex -0.376302 0.324781 -0.044633 + endloop + endfacet + facet normal -0.247478 -0.867453 0.431602 + outer loop + vertex 0.926604 3.992514 -1.534378 + vertex 0.911266 3.985315 -1.557641 + vertex 0.907933 4.000000 -1.530038 + endloop + endfacet + facet normal 0.172648 0.456757 -0.872677 + outer loop + vertex -0.376741 0.170128 0.004914 + vertex 0.045554 0.876026 0.457925 + vertex -0.499356 0.242150 0.018352 + endloop + endfacet + facet normal -0.046516 0.595932 -0.801687 + outer loop + vertex 0.045554 0.876026 0.457925 + vertex -0.049308 0.883088 0.468678 + vertex -0.499356 0.242150 0.018352 + endloop + endfacet + facet normal 0.005787 0.809949 -0.586472 + outer loop + vertex 0.045554 0.876026 0.457925 + vertex 0.174039 1.498042 1.318229 + vertex 0.117908 1.508241 1.331761 + endloop + endfacet + facet normal -0.006080 0.810414 -0.585826 + outer loop + vertex 0.045554 0.876026 0.457925 + vertex 0.117908 1.508241 1.331761 + vertex -0.049308 0.883088 0.468678 + endloop + endfacet + facet normal -0.228952 0.030877 -0.972948 + outer loop + vertex 0.174039 1.498042 1.318229 + vertex 0.252124 1.695822 1.306131 + vertex 0.117908 1.508241 1.331761 + endloop + endfacet + facet normal -0.168553 -0.014067 -0.985592 + outer loop + vertex 0.252124 1.695822 1.306131 + vertex 0.164022 1.730315 1.320705 + vertex 0.117908 1.508241 1.331761 + endloop + endfacet + facet normal -0.246821 -0.415317 -0.875552 + outer loop + vertex 0.252124 1.695822 1.306131 + vertex 0.655481 2.773188 0.681377 + vertex 0.569666 2.815407 0.685542 + endloop + endfacet + facet normal -0.298811 -0.396427 -0.868077 + outer loop + vertex 0.252124 1.695822 1.306131 + vertex 0.569666 2.815407 0.685542 + vertex 0.164022 1.730315 1.320705 + endloop + endfacet + facet normal -0.408191 -0.783465 -0.468576 + outer loop + vertex 0.655481 2.773188 0.681377 + vertex 0.858199 3.754962 -1.136756 + vertex 0.569666 2.815407 0.685542 + endloop + endfacet + facet normal -0.526140 -0.719046 -0.454038 + outer loop + vertex 0.858199 3.754962 -1.136756 + vertex 0.819289 3.774946 -1.123315 + vertex 0.569666 2.815407 0.685542 + endloop + endfacet + facet normal -0.419350 -0.745756 -0.517681 + outer loop + vertex 0.858199 3.754962 -1.136756 + vertex 0.926604 3.992514 -1.534378 + vertex 0.907933 4.000000 -1.530038 + endloop + endfacet + facet normal -0.526109 -0.690328 -0.496646 + outer loop + vertex 0.858199 3.754962 -1.136756 + vertex 0.907933 4.000000 -1.530038 + vertex 0.819289 3.774946 -1.123315 + endloop + endfacet + facet normal 0.272470 0.292848 0.916515 + outer loop + vertex -0.499356 0.242150 0.018352 + vertex -0.529306 0.376396 -0.015639 + vertex -0.376302 0.324781 -0.044633 + endloop + endfacet + facet normal -0.247462 -0.867456 0.431605 + outer loop + vertex 0.907933 4.000000 -1.530038 + vertex 0.911266 3.985315 -1.557641 + vertex 0.891771 3.996428 -1.546482 + endloop + endfacet + facet normal 0.628429 0.100671 -0.771325 + outer loop + vertex -0.499356 0.242150 0.018352 + vertex -0.049308 0.883088 0.468678 + vertex -0.109567 0.945155 0.427683 + endloop + endfacet + facet normal 0.731984 -0.009186 -0.681260 + outer loop + vertex -0.499356 0.242150 0.018352 + vertex -0.109567 0.945155 0.427683 + vertex -0.529306 0.376396 -0.015639 + endloop + endfacet + facet normal 0.768509 0.438165 -0.466267 + outer loop + vertex -0.049308 0.883088 0.468678 + vertex 0.117908 1.508241 1.331761 + vertex -0.109567 0.945155 0.427683 + endloop + endfacet + facet normal 0.759350 0.449147 -0.470802 + outer loop + vertex 0.117908 1.508241 1.331761 + vertex 0.077941 1.529177 1.287271 + vertex -0.109567 0.945155 0.427683 + endloop + endfacet + facet normal 0.560265 -0.156831 -0.813331 + outer loop + vertex 0.117908 1.508241 1.331761 + vertex 0.164022 1.730315 1.320705 + vertex 0.084825 1.715526 1.269002 + endloop + endfacet + facet normal 0.718180 -0.094124 -0.689462 + outer loop + vertex 0.117908 1.508241 1.331761 + vertex 0.084825 1.715526 1.269002 + vertex 0.077941 1.529177 1.287271 + endloop + endfacet + facet normal 0.521722 -0.567763 -0.636751 + outer loop + vertex 0.164022 1.730315 1.320705 + vertex 0.569666 2.815407 0.685542 + vertex 0.084825 1.715526 1.269002 + endloop + endfacet + facet normal 0.426157 -0.563345 -0.707836 + outer loop + vertex 0.569666 2.815407 0.685542 + vertex 0.484060 2.778963 0.663007 + vertex 0.084825 1.715526 1.269002 + endloop + endfacet + facet normal 0.688727 -0.675522 -0.263297 + outer loop + vertex 0.569666 2.815407 0.685542 + vertex 0.819289 3.774946 -1.123315 + vertex 0.782781 3.755951 -1.170079 + endloop + endfacet + facet normal 0.444304 -0.818636 -0.363908 + outer loop + vertex 0.569666 2.815407 0.685542 + vertex 0.782781 3.755951 -1.170079 + vertex 0.484060 2.778963 0.663007 + endloop + endfacet + facet normal 0.672471 -0.699887 -0.240710 + outer loop + vertex 0.819289 3.774946 -1.123315 + vertex 0.907933 4.000000 -1.530038 + vertex 0.782781 3.755951 -1.170079 + endloop + endfacet + facet normal 0.523807 -0.778528 -0.345716 + outer loop + vertex 0.907933 4.000000 -1.530038 + vertex 0.891771 3.996428 -1.546482 + vertex 0.782781 3.755951 -1.170079 + endloop + endfacet + facet normal 0.272472 0.292858 0.916511 + outer loop + vertex -0.529306 0.376396 -0.015639 + vertex -0.444043 0.471773 -0.071463 + vertex -0.376302 0.324781 -0.044633 + endloop + endfacet + facet normal -0.247544 -0.867487 0.431495 + outer loop + vertex 0.891771 3.996428 -1.546482 + vertex 0.911266 3.985315 -1.557641 + vertex 0.890291 3.984491 -1.571330 + endloop + endfacet + facet normal 0.767618 -0.634876 0.087728 + outer loop + vertex -0.529306 0.376396 -0.015639 + vertex -0.109567 0.945155 0.427683 + vertex -0.444043 0.471773 -0.071463 + endloop + endfacet + facet normal 0.886160 -0.420222 -0.195281 + outer loop + vertex -0.109567 0.945155 0.427683 + vertex -0.089849 1.015489 0.365809 + vertex -0.444043 0.471773 -0.071463 + endloop + endfacet + facet normal 0.946717 -0.321838 0.012149 + outer loop + vertex -0.109567 0.945155 0.427683 + vertex 0.077941 1.529177 1.287271 + vertex 0.084233 1.545081 1.218260 + endloop + endfacet + facet normal 0.958333 -0.285045 -0.018619 + outer loop + vertex -0.109567 0.945155 0.427683 + vertex 0.084233 1.545081 1.218260 + vertex -0.089849 1.015489 0.365809 + endloop + endfacet + facet normal 0.996037 -0.028539 0.084242 + outer loop + vertex 0.077941 1.529177 1.287271 + vertex 0.084825 1.715526 1.269002 + vertex 0.084233 1.545081 1.218260 + endloop + endfacet + facet normal 0.985585 0.045119 -0.163055 + outer loop + vertex 0.084825 1.715526 1.269002 + vertex 0.074171 1.662592 1.189953 + vertex 0.084233 1.545081 1.218260 + endloop + endfacet + facet normal 0.950562 -0.277941 0.138492 + outer loop + vertex 0.084825 1.715526 1.269002 + vertex 0.484060 2.778963 0.663007 + vertex 0.463129 2.691300 0.630741 + endloop + endfacet + facet normal 0.946162 -0.313099 0.082134 + outer loop + vertex 0.084825 1.715526 1.269002 + vertex 0.463129 2.691300 0.630741 + vertex 0.074171 1.662592 1.189953 + endloop + endfacet + facet normal 0.969792 -0.242211 0.028945 + outer loop + vertex 0.484060 2.778963 0.663007 + vertex 0.782781 3.755951 -1.170079 + vertex 0.463129 2.691300 0.630741 + endloop + endfacet + facet normal 0.974733 -0.219097 0.043488 + outer loop + vertex 0.782781 3.755951 -1.170079 + vertex 0.776167 3.712284 -1.241837 + vertex 0.463129 2.691300 0.630741 + endloop + endfacet + facet normal 0.951111 -0.296674 0.085861 + outer loop + vertex 0.782781 3.755951 -1.170079 + vertex 0.891771 3.996428 -1.546482 + vertex 0.890291 3.984491 -1.571330 + endloop + endfacet + facet normal 0.952495 -0.291144 0.089382 + outer loop + vertex 0.782781 3.755951 -1.170079 + vertex 0.890291 3.984491 -1.571330 + vertex 0.776167 3.712284 -1.241837 + endloop + endfacet + facet normal 0.272474 0.292858 0.916511 + outer loop + vertex -0.444043 0.471773 -0.071463 + vertex -0.307767 0.456462 -0.107085 + vertex -0.376302 0.324781 -0.044633 + endloop + endfacet + facet normal -0.247540 -0.867492 0.431488 + outer loop + vertex 0.890291 3.984491 -1.571330 + vertex 0.911266 3.985315 -1.557641 + vertex 0.904605 3.973175 -1.585869 + endloop + endfacet + facet normal 0.444817 -0.719116 0.533863 + outer loop + vertex -0.444043 0.471773 -0.071463 + vertex -0.089849 1.015489 0.365809 + vertex -0.005001 1.041127 0.329648 + endloop + endfacet + facet normal 0.127749 -0.635160 0.761743 + outer loop + vertex -0.444043 0.471773 -0.071463 + vertex -0.005001 1.041127 0.329648 + vertex -0.307767 0.456462 -0.107085 + endloop + endfacet + facet normal 0.420686 -0.806615 0.415206 + outer loop + vertex -0.089849 1.015489 0.365809 + vertex 0.084233 1.545081 1.218260 + vertex -0.005001 1.041127 0.329648 + endloop + endfacet + facet normal 0.357584 -0.827292 0.433269 + outer loop + vertex 0.084233 1.545081 1.218260 + vertex 0.132047 1.543980 1.176695 + vertex -0.005001 1.041127 0.329648 + endloop + endfacet + facet normal 0.675312 0.226875 0.701770 + outer loop + vertex 0.084233 1.545081 1.218260 + vertex 0.074171 1.662592 1.189953 + vertex 0.140081 1.611374 1.143086 + endloop + endfacet + facet normal 0.632812 0.283821 0.720413 + outer loop + vertex 0.084233 1.545081 1.218260 + vertex 0.140081 1.611374 1.143086 + vertex 0.132047 1.543980 1.176695 + endloop + endfacet + facet normal 0.650721 0.157727 0.742755 + outer loop + vertex 0.074171 1.662592 1.189953 + vertex 0.463129 2.691300 0.630741 + vertex 0.140081 1.611374 1.143086 + endloop + endfacet + facet normal 0.526204 0.230871 0.818418 + outer loop + vertex 0.463129 2.691300 0.630741 + vertex 0.522632 2.618428 0.613040 + vertex 0.140081 1.611374 1.143086 + endloop + endfacet + facet normal 0.890469 0.320122 0.323399 + outer loop + vertex 0.463129 2.691300 0.630741 + vertex 0.776167 3.712284 -1.241837 + vertex 0.804428 3.676825 -1.284553 + endloop + endfacet + facet normal 0.754780 0.518794 0.401447 + outer loop + vertex 0.463129 2.691300 0.630741 + vertex 0.804428 3.676825 -1.284553 + vertex 0.522632 2.618428 0.613040 + endloop + endfacet + facet normal 0.880505 0.167589 0.443425 + outer loop + vertex 0.776167 3.712284 -1.241837 + vertex 0.890291 3.984491 -1.571330 + vertex 0.804428 3.676825 -1.284553 + endloop + endfacet + facet normal 0.785179 0.290597 0.546852 + outer loop + vertex 0.890291 3.984491 -1.571330 + vertex 0.904605 3.973175 -1.585869 + vertex 0.804428 3.676825 -1.284553 + endloop + endfacet + facet normal 0.272477 0.292857 0.916510 + outer loop + vertex -0.307767 0.456462 -0.107085 + vertex -0.223100 0.341991 -0.095679 + vertex -0.376302 0.324781 -0.044633 + endloop + endfacet + facet normal -0.247494 -0.867507 0.431484 + outer loop + vertex 0.904605 3.973175 -1.585869 + vertex 0.911266 3.985315 -1.557641 + vertex 0.923934 3.971001 -1.579153 + endloop + endfacet + facet normal -0.530285 -0.313740 0.787633 + outer loop + vertex -0.307767 0.456462 -0.107085 + vertex -0.005001 1.041127 0.329648 + vertex -0.223100 0.341991 -0.095679 + endloop + endfacet + facet normal -0.346002 -0.406495 0.845603 + outer loop + vertex -0.005001 1.041127 0.329648 + vertex 0.081085 1.002764 0.346431 + vertex -0.223100 0.341991 -0.095679 + endloop + endfacet + facet normal -0.409732 -0.753765 0.513768 + outer loop + vertex -0.005001 1.041127 0.329648 + vertex 0.132047 1.543980 1.176695 + vertex 0.185377 1.526700 1.193876 + endloop + endfacet + facet normal -0.430921 -0.742863 0.512310 + outer loop + vertex -0.005001 1.041127 0.329648 + vertex 0.185377 1.526700 1.193876 + vertex 0.081085 1.002764 0.346431 + endloop + endfacet + facet normal -0.136054 0.455070 0.880000 + outer loop + vertex 0.132047 1.543980 1.176695 + vertex 0.140081 1.611374 1.143086 + vertex 0.185377 1.526700 1.193876 + endloop + endfacet + facet normal -0.142184 0.452121 0.880551 + outer loop + vertex 0.140081 1.611374 1.143086 + vertex 0.232926 1.600441 1.163691 + vertex 0.185377 1.526700 1.193876 + endloop + endfacet + facet normal -0.076833 0.487081 0.869971 + outer loop + vertex 0.140081 1.611374 1.143086 + vertex 0.522632 2.618428 0.613040 + vertex 0.617763 2.615223 0.623236 + endloop + endfacet + facet normal -0.130131 0.504070 0.853803 + outer loop + vertex 0.140081 1.611374 1.143086 + vertex 0.617763 2.615223 0.623236 + vertex 0.232926 1.600441 1.163691 + endloop + endfacet + facet normal -0.022463 0.874535 0.484443 + outer loop + vertex 0.522632 2.618428 0.613040 + vertex 0.804428 3.676825 -1.284553 + vertex 0.617763 2.615223 0.623236 + endloop + endfacet + facet normal -0.193058 0.865289 0.462606 + outer loop + vertex 0.804428 3.676825 -1.284553 + vertex 0.846281 3.676276 -1.266060 + vertex 0.617763 2.615223 0.623236 + endloop + endfacet + facet normal -0.149909 0.729362 0.667502 + outer loop + vertex 0.804428 3.676825 -1.284553 + vertex 0.904605 3.973175 -1.585869 + vertex 0.923934 3.971001 -1.579153 + endloop + endfacet + facet normal -0.266440 0.733927 0.624789 + outer loop + vertex 0.804428 3.676825 -1.284553 + vertex 0.923934 3.971001 -1.579153 + vertex 0.846281 3.676276 -1.266060 + endloop + endfacet + facet normal 0.272477 0.292856 0.916511 + outer loop + vertex -0.223100 0.341991 -0.095679 + vertex -0.253797 0.214561 -0.045835 + vertex -0.376302 0.324781 -0.044633 + endloop + endfacet + facet normal -0.247450 -0.867507 0.431509 + outer loop + vertex 0.923934 3.971001 -1.579153 + vertex 0.911266 3.985315 -1.557641 + vertex 0.933725 3.979607 -1.556237 + endloop + endfacet + facet normal -0.879711 0.092958 0.466334 + outer loop + vertex -0.223100 0.341991 -0.095679 + vertex 0.081085 1.002764 0.346431 + vertex 0.103584 0.929287 0.403520 + endloop + endfacet + facet normal -0.920438 0.313202 0.233875 + outer loop + vertex -0.223100 0.341991 -0.095679 + vertex 0.103584 0.929287 0.403520 + vertex -0.253797 0.214561 -0.045835 + endloop + endfacet + facet normal -0.969112 -0.137853 0.204494 + outer loop + vertex 0.081085 1.002764 0.346431 + vertex 0.185377 1.526700 1.193876 + vertex 0.103584 0.929287 0.403520 + endloop + endfacet + facet normal -0.958292 -0.171373 0.228711 + outer loop + vertex 0.185377 1.526700 1.193876 + vertex 0.204066 1.506257 1.256863 + vertex 0.103584 0.929287 0.403520 + endloop + endfacet + facet normal -0.774108 0.591493 0.225596 + outer loop + vertex 0.185377 1.526700 1.193876 + vertex 0.232926 1.600441 1.163691 + vertex 0.282789 1.638025 1.236253 + endloop + endfacet + facet normal -0.760900 0.516107 0.393274 + outer loop + vertex 0.185377 1.526700 1.193876 + vertex 0.282789 1.638025 1.236253 + vertex 0.204066 1.506257 1.256863 + endloop + endfacet + facet normal -0.819471 0.478649 0.315217 + outer loop + vertex 0.232926 1.600441 1.163691 + vertex 0.617763 2.615223 0.623236 + vertex 0.282789 1.638025 1.236253 + endloop + endfacet + facet normal -0.778669 0.502565 0.375637 + outer loop + vertex 0.617763 2.615223 0.623236 + vertex 0.676887 2.684097 0.653648 + vertex 0.282789 1.638025 1.236253 + endloop + endfacet + facet normal -0.907486 0.403504 0.116849 + outer loop + vertex 0.617763 2.615223 0.623236 + vertex 0.846281 3.676276 -1.266060 + vertex 0.870213 3.711051 -1.200285 + endloop + endfacet + facet normal -0.786380 0.571480 0.234559 + outer loop + vertex 0.617763 2.615223 0.623236 + vertex 0.870213 3.711051 -1.200285 + vertex 0.676887 2.684097 0.653648 + endloop + endfacet + facet normal -0.915194 0.380924 0.131592 + outer loop + vertex 0.846281 3.676276 -1.266060 + vertex 0.923934 3.971001 -1.579153 + vertex 0.870213 3.711051 -1.200285 + endloop + endfacet + facet normal -0.864412 0.463299 0.195311 + outer loop + vertex 0.923934 3.971001 -1.579153 + vertex 0.933725 3.979607 -1.556237 + vertex 0.870213 3.711051 -1.200285 + endloop + endfacet + facet normal 0.272474 -0.292852 0.916513 + outer loop + vertex -0.376302 -0.324781 -0.044633 + vertex -0.376741 -0.170128 0.004914 + vertex -0.253797 -0.214561 -0.045835 + endloop + endfacet + facet normal -0.247446 0.867470 0.431586 + outer loop + vertex 0.926604 -3.992514 -1.534378 + vertex 0.911266 -3.985315 -1.557641 + vertex 0.933725 -3.979607 -1.556237 + endloop + endfacet + facet normal -0.777863 -0.563658 -0.277884 + outer loop + vertex 0.045554 -0.876026 0.457925 + vertex 0.103584 -0.929287 0.403520 + vertex -0.253797 -0.214561 -0.045835 + endloop + endfacet + facet normal -0.477920 -0.658786 -0.581028 + outer loop + vertex -0.376741 -0.170128 0.004914 + vertex 0.045554 -0.876026 0.457925 + vertex -0.253797 -0.214561 -0.045835 + endloop + endfacet + facet normal -0.779423 -0.557750 -0.285332 + outer loop + vertex 0.045554 -0.876026 0.457925 + vertex 0.204066 -1.506257 1.256863 + vertex 0.103584 -0.929287 0.403520 + endloop + endfacet + facet normal -0.765340 -0.570420 -0.298120 + outer loop + vertex 0.045554 -0.876026 0.457925 + vertex 0.174039 -1.498041 1.318229 + vertex 0.204066 -1.506257 1.256863 + endloop + endfacet + facet normal -0.725149 -0.339533 -0.599063 + outer loop + vertex 0.252124 -1.695822 1.306131 + vertex 0.282789 -1.638024 1.236253 + vertex 0.204066 -1.506257 1.256863 + endloop + endfacet + facet normal -0.867439 -0.319119 -0.381722 + outer loop + vertex 0.174039 -1.498041 1.318229 + vertex 0.252124 -1.695822 1.306131 + vertex 0.204066 -1.506257 1.256863 + endloop + endfacet + facet normal -0.886598 -0.080321 -0.455513 + outer loop + vertex 0.252124 -1.695822 1.306131 + vertex 0.676887 -2.684097 0.653648 + vertex 0.282789 -1.638024 1.236253 + endloop + endfacet + facet normal -0.822990 0.021063 -0.567665 + outer loop + vertex 0.252124 -1.695822 1.306131 + vertex 0.655481 -2.773188 0.681377 + vertex 0.676887 -2.684097 0.653648 + endloop + endfacet + facet normal -0.987821 0.067298 -0.140287 + outer loop + vertex 0.858199 -3.754962 -1.136756 + vertex 0.870213 -3.711051 -1.200285 + vertex 0.676887 -2.684097 0.653648 + endloop + endfacet + facet normal -0.965102 0.169849 -0.199324 + outer loop + vertex 0.655481 -2.773188 0.681377 + vertex 0.858199 -3.754962 -1.136756 + vertex 0.676887 -2.684097 0.653648 + endloop + endfacet + facet normal -0.983464 0.007265 -0.180959 + outer loop + vertex 0.858199 -3.754962 -1.136756 + vertex 0.933725 -3.979607 -1.556237 + vertex 0.870213 -3.711051 -1.200285 + endloop + endfacet + facet normal -0.962733 0.124581 -0.240053 + outer loop + vertex 0.858199 -3.754962 -1.136756 + vertex 0.926604 -3.992514 -1.534378 + vertex 0.933725 -3.979607 -1.556237 + endloop + endfacet + facet normal 0.272467 -0.292852 0.916515 + outer loop + vertex -0.376302 -0.324781 -0.044633 + vertex -0.499356 -0.242150 0.018352 + vertex -0.376741 -0.170128 0.004914 + endloop + endfacet + facet normal -0.247477 0.867453 0.431602 + outer loop + vertex 0.907933 -4.000000 -1.530038 + vertex 0.911266 -3.985315 -1.557641 + vertex 0.926604 -3.992514 -1.534378 + endloop + endfacet + facet normal 0.172648 -0.456757 -0.872677 + outer loop + vertex -0.499356 -0.242150 0.018352 + vertex 0.045554 -0.876026 0.457925 + vertex -0.376741 -0.170128 0.004914 + endloop + endfacet + facet normal -0.046516 -0.595931 -0.801687 + outer loop + vertex -0.499356 -0.242150 0.018352 + vertex -0.049308 -0.883088 0.468678 + vertex 0.045554 -0.876026 0.457925 + endloop + endfacet + facet normal 0.005789 -0.809949 -0.586472 + outer loop + vertex 0.117908 -1.508241 1.331761 + vertex 0.174039 -1.498041 1.318229 + vertex 0.045554 -0.876026 0.457925 + endloop + endfacet + facet normal -0.006079 -0.810414 -0.585826 + outer loop + vertex -0.049308 -0.883088 0.468678 + vertex 0.117908 -1.508241 1.331761 + vertex 0.045554 -0.876026 0.457925 + endloop + endfacet + facet normal -0.228951 -0.030877 -0.972948 + outer loop + vertex 0.117908 -1.508241 1.331761 + vertex 0.252124 -1.695822 1.306131 + vertex 0.174039 -1.498041 1.318229 + endloop + endfacet + facet normal -0.168553 0.014067 -0.985592 + outer loop + vertex 0.117908 -1.508241 1.331761 + vertex 0.164022 -1.730315 1.320705 + vertex 0.252124 -1.695822 1.306131 + endloop + endfacet + facet normal -0.246820 0.415317 -0.875552 + outer loop + vertex 0.569666 -2.815407 0.685542 + vertex 0.655481 -2.773188 0.681377 + vertex 0.252124 -1.695822 1.306131 + endloop + endfacet + facet normal -0.298811 0.396427 -0.868077 + outer loop + vertex 0.164022 -1.730315 1.320705 + vertex 0.569666 -2.815407 0.685542 + vertex 0.252124 -1.695822 1.306131 + endloop + endfacet + facet normal -0.408189 0.783466 -0.468576 + outer loop + vertex 0.569666 -2.815407 0.685542 + vertex 0.858199 -3.754962 -1.136756 + vertex 0.655481 -2.773188 0.681377 + endloop + endfacet + facet normal -0.526140 0.719046 -0.454038 + outer loop + vertex 0.569666 -2.815407 0.685542 + vertex 0.819289 -3.774946 -1.123315 + vertex 0.858199 -3.754962 -1.136756 + endloop + endfacet + facet normal -0.419349 0.745757 -0.517681 + outer loop + vertex 0.907933 -4.000000 -1.530038 + vertex 0.926604 -3.992514 -1.534378 + vertex 0.858199 -3.754962 -1.136756 + endloop + endfacet + facet normal -0.526109 0.690328 -0.496646 + outer loop + vertex 0.819289 -3.774946 -1.123315 + vertex 0.907933 -4.000000 -1.530038 + vertex 0.858199 -3.754962 -1.136756 + endloop + endfacet + facet normal 0.272470 -0.292848 0.916515 + outer loop + vertex -0.376302 -0.324781 -0.044633 + vertex -0.529306 -0.376397 -0.015639 + vertex -0.499356 -0.242150 0.018352 + endloop + endfacet + facet normal -0.247463 0.867456 0.431605 + outer loop + vertex 0.891771 -3.996428 -1.546482 + vertex 0.911266 -3.985315 -1.557641 + vertex 0.907933 -4.000000 -1.530038 + endloop + endfacet + facet normal 0.628429 -0.100671 -0.771325 + outer loop + vertex -0.109567 -0.945155 0.427683 + vertex -0.049308 -0.883088 0.468678 + vertex -0.499356 -0.242150 0.018352 + endloop + endfacet + facet normal 0.731984 0.009186 -0.681260 + outer loop + vertex -0.529306 -0.376397 -0.015639 + vertex -0.109567 -0.945155 0.427683 + vertex -0.499356 -0.242150 0.018352 + endloop + endfacet + facet normal 0.768509 -0.438166 -0.466267 + outer loop + vertex -0.109567 -0.945155 0.427683 + vertex 0.117908 -1.508241 1.331761 + vertex -0.049308 -0.883088 0.468678 + endloop + endfacet + facet normal 0.759350 -0.449147 -0.470802 + outer loop + vertex -0.109567 -0.945155 0.427683 + vertex 0.077941 -1.529177 1.287271 + vertex 0.117908 -1.508241 1.331761 + endloop + endfacet + facet normal 0.560265 0.156831 -0.813331 + outer loop + vertex 0.084825 -1.715526 1.269002 + vertex 0.164022 -1.730315 1.320705 + vertex 0.117908 -1.508241 1.331761 + endloop + endfacet + facet normal 0.718180 0.094124 -0.689462 + outer loop + vertex 0.077941 -1.529177 1.287271 + vertex 0.084825 -1.715526 1.269002 + vertex 0.117908 -1.508241 1.331761 + endloop + endfacet + facet normal 0.521721 0.567763 -0.636752 + outer loop + vertex 0.084825 -1.715526 1.269002 + vertex 0.569666 -2.815407 0.685542 + vertex 0.164022 -1.730315 1.320705 + endloop + endfacet + facet normal 0.426157 0.563346 -0.707836 + outer loop + vertex 0.084825 -1.715526 1.269002 + vertex 0.484060 -2.778963 0.663007 + vertex 0.569666 -2.815407 0.685542 + endloop + endfacet + facet normal 0.688727 0.675522 -0.263297 + outer loop + vertex 0.782781 -3.755951 -1.170079 + vertex 0.819289 -3.774946 -1.123315 + vertex 0.569666 -2.815407 0.685542 + endloop + endfacet + facet normal 0.444304 0.818636 -0.363908 + outer loop + vertex 0.484060 -2.778963 0.663007 + vertex 0.782781 -3.755951 -1.170079 + vertex 0.569666 -2.815407 0.685542 + endloop + endfacet + facet normal 0.672471 0.699887 -0.240710 + outer loop + vertex 0.782781 -3.755951 -1.170079 + vertex 0.907933 -4.000000 -1.530038 + vertex 0.819289 -3.774946 -1.123315 + endloop + endfacet + facet normal 0.523808 0.778528 -0.345715 + outer loop + vertex 0.782781 -3.755951 -1.170079 + vertex 0.891771 -3.996428 -1.546482 + vertex 0.907933 -4.000000 -1.530038 + endloop + endfacet + facet normal 0.272472 -0.292858 0.916512 + outer loop + vertex -0.376302 -0.324781 -0.044633 + vertex -0.444043 -0.471773 -0.071463 + vertex -0.529306 -0.376397 -0.015639 + endloop + endfacet + facet normal -0.247544 0.867488 0.431494 + outer loop + vertex 0.890291 -3.984491 -1.571330 + vertex 0.911266 -3.985315 -1.557641 + vertex 0.891771 -3.996428 -1.546482 + endloop + endfacet + facet normal 0.767618 0.634875 0.087727 + outer loop + vertex -0.444043 -0.471773 -0.071463 + vertex -0.109567 -0.945155 0.427683 + vertex -0.529306 -0.376397 -0.015639 + endloop + endfacet + facet normal 0.886160 0.420222 -0.195281 + outer loop + vertex -0.444043 -0.471773 -0.071463 + vertex -0.089849 -1.015489 0.365809 + vertex -0.109567 -0.945155 0.427683 + endloop + endfacet + facet normal 0.946717 0.321838 0.012149 + outer loop + vertex 0.084233 -1.545081 1.218260 + vertex 0.077941 -1.529177 1.287271 + vertex -0.109567 -0.945155 0.427683 + endloop + endfacet + facet normal 0.958333 0.285045 -0.018619 + outer loop + vertex -0.089849 -1.015489 0.365809 + vertex 0.084233 -1.545081 1.218260 + vertex -0.109567 -0.945155 0.427683 + endloop + endfacet + facet normal 0.996037 0.028539 0.084242 + outer loop + vertex 0.084233 -1.545081 1.218260 + vertex 0.084825 -1.715526 1.269002 + vertex 0.077941 -1.529177 1.287271 + endloop + endfacet + facet normal 0.985585 -0.045119 -0.163055 + outer loop + vertex 0.084233 -1.545081 1.218260 + vertex 0.074171 -1.662592 1.189953 + vertex 0.084825 -1.715526 1.269002 + endloop + endfacet + facet normal 0.950562 0.277941 0.138492 + outer loop + vertex 0.463129 -2.691300 0.630741 + vertex 0.484060 -2.778963 0.663007 + vertex 0.084825 -1.715526 1.269002 + endloop + endfacet + facet normal 0.946162 0.313099 0.082134 + outer loop + vertex 0.074171 -1.662592 1.189953 + vertex 0.463129 -2.691300 0.630741 + vertex 0.084825 -1.715526 1.269002 + endloop + endfacet + facet normal 0.969792 0.242211 0.028945 + outer loop + vertex 0.463129 -2.691300 0.630741 + vertex 0.782781 -3.755951 -1.170079 + vertex 0.484060 -2.778963 0.663007 + endloop + endfacet + facet normal 0.974733 0.219097 0.043488 + outer loop + vertex 0.463129 -2.691300 0.630741 + vertex 0.776167 -3.712284 -1.241837 + vertex 0.782781 -3.755951 -1.170079 + endloop + endfacet + facet normal 0.951111 0.296673 0.085862 + outer loop + vertex 0.890291 -3.984491 -1.571330 + vertex 0.891771 -3.996428 -1.546482 + vertex 0.782781 -3.755951 -1.170079 + endloop + endfacet + facet normal 0.952495 0.291144 0.089382 + outer loop + vertex 0.776167 -3.712284 -1.241837 + vertex 0.890291 -3.984491 -1.571330 + vertex 0.782781 -3.755951 -1.170079 + endloop + endfacet + facet normal 0.272474 -0.292858 0.916511 + outer loop + vertex -0.376302 -0.324781 -0.044633 + vertex -0.307767 -0.456462 -0.107085 + vertex -0.444043 -0.471773 -0.071463 + endloop + endfacet + facet normal -0.247540 0.867492 0.431487 + outer loop + vertex 0.904605 -3.973175 -1.585869 + vertex 0.911266 -3.985315 -1.557641 + vertex 0.890291 -3.984491 -1.571330 + endloop + endfacet + facet normal 0.444816 0.719116 0.533864 + outer loop + vertex -0.005001 -1.041127 0.329648 + vertex -0.089849 -1.015489 0.365809 + vertex -0.444043 -0.471773 -0.071463 + endloop + endfacet + facet normal 0.127749 0.635160 0.761743 + outer loop + vertex -0.307767 -0.456462 -0.107085 + vertex -0.005001 -1.041127 0.329648 + vertex -0.444043 -0.471773 -0.071463 + endloop + endfacet + facet normal 0.420685 0.806615 0.415206 + outer loop + vertex -0.005001 -1.041127 0.329648 + vertex 0.084233 -1.545081 1.218260 + vertex -0.089849 -1.015489 0.365809 + endloop + endfacet + facet normal 0.357582 0.827292 0.433270 + outer loop + vertex -0.005001 -1.041127 0.329648 + vertex 0.132047 -1.543979 1.176695 + vertex 0.084233 -1.545081 1.218260 + endloop + endfacet + facet normal 0.675312 -0.226875 0.701770 + outer loop + vertex 0.140081 -1.611374 1.143086 + vertex 0.074171 -1.662592 1.189953 + vertex 0.084233 -1.545081 1.218260 + endloop + endfacet + facet normal 0.632813 -0.283820 0.720412 + outer loop + vertex 0.132047 -1.543979 1.176695 + vertex 0.140081 -1.611374 1.143086 + vertex 0.084233 -1.545081 1.218260 + endloop + endfacet + facet normal 0.650721 -0.157727 0.742755 + outer loop + vertex 0.140081 -1.611374 1.143086 + vertex 0.463129 -2.691300 0.630741 + vertex 0.074171 -1.662592 1.189953 + endloop + endfacet + facet normal 0.526204 -0.230871 0.818418 + outer loop + vertex 0.140081 -1.611374 1.143086 + vertex 0.522632 -2.618427 0.613040 + vertex 0.463129 -2.691300 0.630741 + endloop + endfacet + facet normal 0.890469 -0.320122 0.323399 + outer loop + vertex 0.804428 -3.676825 -1.284553 + vertex 0.776167 -3.712284 -1.241837 + vertex 0.463129 -2.691300 0.630741 + endloop + endfacet + facet normal 0.754780 -0.518794 0.401448 + outer loop + vertex 0.522632 -2.618427 0.613040 + vertex 0.804428 -3.676825 -1.284553 + vertex 0.463129 -2.691300 0.630741 + endloop + endfacet + facet normal 0.880505 -0.167589 0.443425 + outer loop + vertex 0.804428 -3.676825 -1.284553 + vertex 0.890291 -3.984491 -1.571330 + vertex 0.776167 -3.712284 -1.241837 + endloop + endfacet + facet normal 0.785178 -0.290599 0.546853 + outer loop + vertex 0.804428 -3.676825 -1.284553 + vertex 0.904605 -3.973175 -1.585869 + vertex 0.890291 -3.984491 -1.571330 + endloop + endfacet + facet normal 0.272477 -0.292857 0.916510 + outer loop + vertex -0.376302 -0.324781 -0.044633 + vertex -0.223100 -0.341991 -0.095679 + vertex -0.307767 -0.456462 -0.107085 + endloop + endfacet + facet normal -0.247495 0.867507 0.431483 + outer loop + vertex 0.923934 -3.971001 -1.579153 + vertex 0.911266 -3.985315 -1.557641 + vertex 0.904605 -3.973175 -1.585869 + endloop + endfacet + facet normal -0.530285 0.313740 0.787633 + outer loop + vertex -0.223100 -0.341991 -0.095679 + vertex -0.005001 -1.041127 0.329648 + vertex -0.307767 -0.456462 -0.107085 + endloop + endfacet + facet normal -0.346002 0.406495 0.845603 + outer loop + vertex -0.223100 -0.341991 -0.095679 + vertex 0.081085 -1.002764 0.346431 + vertex -0.005001 -1.041127 0.329648 + endloop + endfacet + facet normal -0.409730 0.753766 0.513768 + outer loop + vertex 0.185377 -1.526700 1.193876 + vertex 0.132047 -1.543979 1.176695 + vertex -0.005001 -1.041127 0.329648 + endloop + endfacet + facet normal -0.430921 0.742863 0.512310 + outer loop + vertex 0.081085 -1.002764 0.346431 + vertex 0.185377 -1.526700 1.193876 + vertex -0.005001 -1.041127 0.329648 + endloop + endfacet + facet normal -0.136055 -0.455070 0.880000 + outer loop + vertex 0.185377 -1.526700 1.193876 + vertex 0.140081 -1.611374 1.143086 + vertex 0.132047 -1.543979 1.176695 + endloop + endfacet + facet normal -0.142183 -0.452122 0.880551 + outer loop + vertex 0.185377 -1.526700 1.193876 + vertex 0.232926 -1.600441 1.163691 + vertex 0.140081 -1.611374 1.143086 + endloop + endfacet + facet normal -0.076834 -0.487082 0.869970 + outer loop + vertex 0.617763 -2.615223 0.623236 + vertex 0.522632 -2.618427 0.613040 + vertex 0.140081 -1.611374 1.143086 + endloop + endfacet + facet normal -0.130130 -0.504070 0.853803 + outer loop + vertex 0.232926 -1.600441 1.163691 + vertex 0.617763 -2.615223 0.623236 + vertex 0.140081 -1.611374 1.143086 + endloop + endfacet + facet normal -0.022465 -0.874535 0.484442 + outer loop + vertex 0.617763 -2.615223 0.623236 + vertex 0.804428 -3.676825 -1.284553 + vertex 0.522632 -2.618427 0.613040 + endloop + endfacet + facet normal -0.193058 -0.865289 0.462606 + outer loop + vertex 0.617763 -2.615223 0.623236 + vertex 0.846281 -3.676276 -1.266060 + vertex 0.804428 -3.676825 -1.284553 + endloop + endfacet + facet normal -0.149910 -0.729362 0.667502 + outer loop + vertex 0.923934 -3.971001 -1.579153 + vertex 0.904605 -3.973175 -1.585869 + vertex 0.804428 -3.676825 -1.284553 + endloop + endfacet + facet normal -0.266440 -0.733927 0.624789 + outer loop + vertex 0.846281 -3.676276 -1.266060 + vertex 0.923934 -3.971001 -1.579153 + vertex 0.804428 -3.676825 -1.284553 + endloop + endfacet + facet normal 0.272478 -0.292856 0.916511 + outer loop + vertex -0.376302 -0.324781 -0.044633 + vertex -0.253797 -0.214561 -0.045835 + vertex -0.223100 -0.341991 -0.095679 + endloop + endfacet + facet normal -0.247450 0.867507 0.431509 + outer loop + vertex 0.933725 -3.979607 -1.556237 + vertex 0.911266 -3.985315 -1.557641 + vertex 0.923934 -3.971001 -1.579153 + endloop + endfacet + facet normal -0.879711 -0.092959 0.466334 + outer loop + vertex 0.103584 -0.929287 0.403520 + vertex 0.081085 -1.002764 0.346431 + vertex -0.223100 -0.341991 -0.095679 + endloop + endfacet + facet normal -0.920438 -0.313202 0.233875 + outer loop + vertex -0.253797 -0.214561 -0.045835 + vertex 0.103584 -0.929287 0.403520 + vertex -0.223100 -0.341991 -0.095679 + endloop + endfacet + facet normal -0.969112 0.137854 0.204494 + outer loop + vertex 0.103584 -0.929287 0.403520 + vertex 0.185377 -1.526700 1.193876 + vertex 0.081085 -1.002764 0.346431 + endloop + endfacet + facet normal -0.958292 0.171373 0.228710 + outer loop + vertex 0.103584 -0.929287 0.403520 + vertex 0.204066 -1.506257 1.256863 + vertex 0.185377 -1.526700 1.193876 + endloop + endfacet + facet normal -0.774107 -0.591494 0.225595 + outer loop + vertex 0.282789 -1.638024 1.236253 + vertex 0.232926 -1.600441 1.163691 + vertex 0.185377 -1.526700 1.193876 + endloop + endfacet + facet normal -0.760900 -0.516107 0.393275 + outer loop + vertex 0.204066 -1.506257 1.256863 + vertex 0.282789 -1.638024 1.236253 + vertex 0.185377 -1.526700 1.193876 + endloop + endfacet + facet normal -0.819471 -0.478649 0.315218 + outer loop + vertex 0.282789 -1.638024 1.236253 + vertex 0.617763 -2.615223 0.623236 + vertex 0.232926 -1.600441 1.163691 + endloop + endfacet + facet normal -0.778668 -0.502565 0.375638 + outer loop + vertex 0.282789 -1.638024 1.236253 + vertex 0.676887 -2.684097 0.653648 + vertex 0.617763 -2.615223 0.623236 + endloop + endfacet + facet normal -0.907486 -0.403504 0.116849 + outer loop + vertex 0.870213 -3.711051 -1.200285 + vertex 0.846281 -3.676276 -1.266060 + vertex 0.617763 -2.615223 0.623236 + endloop + endfacet + facet normal -0.786379 -0.571481 0.234559 + outer loop + vertex 0.676887 -2.684097 0.653648 + vertex 0.870213 -3.711051 -1.200285 + vertex 0.617763 -2.615223 0.623236 + endloop + endfacet + facet normal -0.915194 -0.380924 0.131592 + outer loop + vertex 0.870213 -3.711051 -1.200285 + vertex 0.923934 -3.971001 -1.579153 + vertex 0.846281 -3.676276 -1.266060 + endloop + endfacet + facet normal -0.864412 -0.463299 0.195311 + outer loop + vertex 0.870213 -3.711051 -1.200285 + vertex 0.933725 -3.979607 -1.556237 + vertex 0.923934 -3.971001 -1.579153 + endloop + endfacet + facet normal 0.287101 0.225652 0.930943 + outer loop + vertex 0.254596 0.172017 -0.203340 + vertex 0.134732 0.118958 -0.153513 + vertex 0.128368 0.277101 -0.189883 + endloop + endfacet + facet normal -0.184374 -0.887741 0.421808 + outer loop + vertex 1.541262 3.228386 -1.480601 + vertex 1.518561 3.233232 -1.480323 + vertex 1.535171 3.240416 -1.457945 + endloop + endfacet + facet normal -0.475138 0.667519 -0.573291 + outer loop + vertex 0.254596 0.172017 -0.203340 + vertex 0.599097 0.871928 0.326091 + vertex 0.515124 0.832623 0.349921 + endloop + endfacet + facet normal -0.518251 0.659949 -0.543952 + outer loop + vertex 0.254596 0.172017 -0.203340 + vertex 0.515124 0.832623 0.349921 + vertex 0.134732 0.118958 -0.153513 + endloop + endfacet + facet normal -0.472387 0.830830 -0.294232 + outer loop + vertex 0.599097 0.871928 0.326091 + vertex 0.790359 1.282756 1.179089 + vertex 0.515124 0.832623 0.349921 + endloop + endfacet + facet normal -0.327001 0.871802 -0.364734 + outer loop + vertex 0.790359 1.282756 1.179089 + vertex 0.737774 1.281594 1.223455 + vertex 0.515124 0.832623 0.349921 + endloop + endfacet + facet normal -0.350684 0.480596 -0.803771 + outer loop + vertex 0.790359 1.282756 1.179089 + vertex 0.895302 1.394673 1.200220 + vertex 0.851906 1.458227 1.257154 + endloop + endfacet + facet normal -0.567528 0.492582 -0.659754 + outer loop + vertex 0.790359 1.282756 1.179089 + vertex 0.851906 1.458227 1.257154 + vertex 0.737774 1.281594 1.223455 + endloop + endfacet + facet normal -0.840571 -0.096438 -0.533047 + outer loop + vertex 0.895302 1.394673 1.200220 + vertex 1.332892 2.383628 0.331257 + vertex 0.851906 1.458227 1.257154 + endloop + endfacet + facet normal -0.887653 0.000607 -0.460512 + outer loop + vertex 1.332892 2.383628 0.331257 + vertex 1.320483 2.475455 0.355297 + vertex 0.851906 1.458227 1.257154 + endloop + endfacet + facet normal -0.991471 -0.018419 -0.129021 + outer loop + vertex 1.332892 2.383628 0.331257 + vertex 1.512451 2.948164 -1.129171 + vertex 1.503159 2.989863 -1.063723 + endloop + endfacet + facet normal -0.982980 -0.091065 -0.159555 + outer loop + vertex 1.332892 2.383628 0.331257 + vertex 1.503159 2.989863 -1.063723 + vertex 1.320483 2.475455 0.355297 + endloop + endfacet + facet normal -0.992560 -0.041503 -0.114468 + outer loop + vertex 1.512451 2.948164 -1.129171 + vertex 1.541262 3.228386 -1.480601 + vertex 1.503159 2.989863 -1.063723 + endloop + endfacet + facet normal -0.971499 -0.156291 -0.178220 + outer loop + vertex 1.541262 3.228386 -1.480601 + vertex 1.535171 3.240416 -1.457945 + vertex 1.503159 2.989863 -1.063723 + endloop + endfacet + facet normal 0.287098 0.225652 0.930943 + outer loop + vertex 0.134732 0.118958 -0.153513 + vertex 0.010076 0.184984 -0.131074 + vertex 0.128368 0.277101 -0.189883 + endloop + endfacet + facet normal -0.184355 -0.887751 0.421796 + outer loop + vertex 1.535171 3.240416 -1.457945 + vertex 1.518561 3.233232 -1.480323 + vertex 1.516571 3.247036 -1.452140 + endloop + endfacet + facet normal 0.127014 0.525668 -0.841154 + outer loop + vertex 0.134732 0.118958 -0.153513 + vertex 0.515124 0.832623 0.349921 + vertex 0.010076 0.184984 -0.131074 + endloop + endfacet + facet normal 0.362983 0.356361 -0.860959 + outer loop + vertex 0.515124 0.832623 0.349921 + vertex 0.427043 0.859716 0.324000 + vertex 0.010076 0.184984 -0.131074 + endloop + endfacet + facet normal 0.393000 0.773265 -0.497606 + outer loop + vertex 0.515124 0.832623 0.349921 + vertex 0.737774 1.281594 1.223455 + vertex 0.684049 1.303568 1.215172 + endloop + endfacet + facet normal 0.385495 0.776756 -0.498040 + outer loop + vertex 0.515124 0.832623 0.349921 + vertex 0.684049 1.303568 1.215172 + vertex 0.427043 0.859716 0.324000 + endloop + endfacet + facet normal 0.180200 0.070741 -0.981083 + outer loop + vertex 0.737774 1.281594 1.223455 + vertex 0.851906 1.458227 1.257154 + vertex 0.684049 1.303568 1.215172 + endloop + endfacet + facet normal 0.230536 0.013907 -0.972965 + outer loop + vertex 0.851906 1.458227 1.257154 + vertex 0.773848 1.510727 1.239410 + vertex 0.684049 1.303568 1.215172 + endloop + endfacet + facet normal -0.213642 -0.591138 -0.777762 + outer loop + vertex 0.851906 1.458227 1.257154 + vertex 1.320483 2.475455 0.355297 + vertex 1.250076 2.534936 0.329428 + endloop + endfacet + facet normal -0.219361 -0.589029 -0.777769 + outer loop + vertex 0.851906 1.458227 1.257154 + vertex 1.250076 2.534936 0.329428 + vertex 0.773848 1.510727 1.239410 + endloop + endfacet + facet normal -0.526722 -0.775172 -0.348814 + outer loop + vertex 1.320483 2.475455 0.355297 + vertex 1.503159 2.989863 -1.063723 + vertex 1.250076 2.534936 0.329428 + endloop + endfacet + facet normal -0.515795 -0.782329 -0.349166 + outer loop + vertex 1.503159 2.989863 -1.063723 + vertex 1.464530 3.007919 -1.047115 + vertex 1.250076 2.534936 0.329428 + endloop + endfacet + facet normal -0.425265 -0.747819 -0.509820 + outer loop + vertex 1.503159 2.989863 -1.063723 + vertex 1.535171 3.240416 -1.457945 + vertex 1.516571 3.247036 -1.452140 + endloop + endfacet + facet normal -0.532313 -0.697276 -0.480051 + outer loop + vertex 1.503159 2.989863 -1.063723 + vertex 1.516571 3.247036 -1.452140 + vertex 1.464530 3.007919 -1.047115 + endloop + endfacet + facet normal 0.287100 0.225650 0.930943 + outer loop + vertex 0.010076 0.184984 -0.131074 + vertex -0.025503 0.320378 -0.152919 + vertex 0.128368 0.277101 -0.189883 + endloop + endfacet + facet normal -0.184421 -0.887741 0.421787 + outer loop + vertex 1.516571 3.247036 -1.452140 + vertex 1.518561 3.233232 -1.480323 + vertex 1.499470 3.243264 -1.467557 + endloop + endfacet + facet normal 0.821850 -0.134507 -0.553598 + outer loop + vertex 0.010076 0.184984 -0.131074 + vertex 0.427043 0.859716 0.324000 + vertex 0.401182 0.932807 0.267848 + endloop + endfacet + facet normal 0.661470 0.053120 -0.748088 + outer loop + vertex 0.010076 0.184984 -0.131074 + vertex 0.401182 0.932807 0.267848 + vertex -0.025503 0.320378 -0.152919 + endloop + endfacet + facet normal 0.944038 0.090313 -0.317233 + outer loop + vertex 0.427043 0.859716 0.324000 + vertex 0.684049 1.303568 1.215172 + vertex 0.401182 0.932807 0.267848 + endloop + endfacet + facet normal 0.961417 -0.036992 -0.272598 + outer loop + vertex 0.684049 1.303568 1.215172 + vertex 0.669640 1.332134 1.160477 + vertex 0.401182 0.932807 0.267848 + endloop + endfacet + facet normal 0.790184 -0.278662 -0.545854 + outer loop + vertex 0.684049 1.303568 1.215172 + vertex 0.773848 1.510727 1.239410 + vertex 0.719906 1.512637 1.160348 + endloop + endfacet + facet normal 0.896213 -0.249837 -0.366583 + outer loop + vertex 0.684049 1.303568 1.215172 + vertex 0.719906 1.512637 1.160348 + vertex 0.669640 1.332134 1.160477 + endloop + endfacet + facet normal 0.608523 -0.666115 -0.431267 + outer loop + vertex 0.773848 1.510727 1.239410 + vertex 1.250076 2.534936 0.329428 + vertex 0.719906 1.512637 1.160348 + endloop + endfacet + facet normal 0.533110 -0.682671 -0.499754 + outer loop + vertex 1.250076 2.534936 0.329428 + vertex 1.174691 2.517280 0.273131 + vertex 0.719906 1.512637 1.160348 + endloop + endfacet + facet normal 0.592279 -0.785880 -0.177758 + outer loop + vertex 1.250076 2.534936 0.329428 + vertex 1.464530 3.007919 -1.047115 + vertex 1.425654 2.988739 -1.091849 + endloop + endfacet + facet normal 0.385834 -0.891602 -0.237017 + outer loop + vertex 1.250076 2.534936 0.329428 + vertex 1.425654 2.988739 -1.091849 + vertex 1.174691 2.517280 0.273131 + endloop + endfacet + facet normal 0.680419 -0.665989 -0.305759 + outer loop + vertex 1.464530 3.007919 -1.047115 + vertex 1.516571 3.247036 -1.452140 + vertex 1.425654 2.988739 -1.091849 + endloop + endfacet + facet normal 0.528015 -0.747652 -0.402762 + outer loop + vertex 1.516571 3.247036 -1.452140 + vertex 1.499470 3.243264 -1.467557 + vertex 1.425654 2.988739 -1.091849 + endloop + endfacet + facet normal 0.287102 0.225660 0.930940 + outer loop + vertex -0.025503 0.320378 -0.152919 + vertex 0.054785 0.423181 -0.202600 + vertex 0.128368 0.277101 -0.189883 + endloop + endfacet + facet normal -0.184494 -0.887768 0.421699 + outer loop + vertex 1.499470 3.243264 -1.467557 + vertex 1.518561 3.233232 -1.480323 + vertex 1.496745 3.231941 -1.492587 + endloop + endfacet + facet normal 0.800133 -0.597049 0.057623 + outer loop + vertex -0.025503 0.320378 -0.152919 + vertex 0.401182 0.932807 0.267848 + vertex 0.054785 0.423181 -0.202600 + endloop + endfacet + facet normal 0.781402 -0.617047 0.093078 + outer loop + vertex 0.401182 0.932807 0.267848 + vertex 0.457012 0.996856 0.223749 + vertex 0.054785 0.423181 -0.202600 + endloop + endfacet + facet normal 0.591942 -0.786968 0.174031 + outer loop + vertex 0.401182 0.932807 0.267848 + vertex 0.669640 1.332134 1.160477 + vertex 0.705398 1.345779 1.100557 + endloop + endfacet + facet normal 0.766158 -0.641513 0.038248 + outer loop + vertex 0.401182 0.932807 0.267848 + vertex 0.705398 1.345779 1.100557 + vertex 0.457012 0.996856 0.223749 + endloop + endfacet + facet normal 0.856900 -0.238298 0.457095 + outer loop + vertex 0.669640 1.332134 1.160477 + vertex 0.719906 1.512637 1.160348 + vertex 0.705398 1.345779 1.100557 + endloop + endfacet + facet normal 0.958668 -0.166126 0.230992 + outer loop + vertex 0.719906 1.512637 1.160348 + vertex 0.730700 1.462517 1.079503 + vertex 0.705398 1.345779 1.100557 + endloop + endfacet + facet normal 0.937909 -0.329898 0.107209 + outer loop + vertex 0.719906 1.512637 1.160348 + vertex 1.174691 2.517280 0.273131 + vertex 1.151094 2.435785 0.228796 + endloop + endfacet + facet normal 0.949356 -0.194094 0.247086 + outer loop + vertex 0.719906 1.512637 1.160348 + vertex 1.151094 2.435785 0.228796 + vertex 0.730700 1.462517 1.079503 + endloop + endfacet + facet normal 0.948076 -0.310924 0.066920 + outer loop + vertex 1.174691 2.517280 0.273131 + vertex 1.425654 2.988739 -1.091849 + vertex 1.151094 2.435785 0.228796 + endloop + endfacet + facet normal 0.943762 -0.325122 0.060078 + outer loop + vertex 1.425654 2.988739 -1.091849 + vertex 1.415802 2.946763 -1.164243 + vertex 1.151094 2.435785 0.228796 + endloop + endfacet + facet normal 0.965288 -0.260870 0.012923 + outer loop + vertex 1.425654 2.988739 -1.091849 + vertex 1.499470 3.243264 -1.467557 + vertex 1.496745 3.231941 -1.492587 + endloop + endfacet + facet normal 0.966702 -0.255370 0.016512 + outer loop + vertex 1.425654 2.988739 -1.091849 + vertex 1.496745 3.231941 -1.492587 + vertex 1.415802 2.946763 -1.164243 + endloop + endfacet + facet normal 0.287105 0.225662 0.930939 + outer loop + vertex 0.054785 0.423181 -0.202600 + vertex 0.190484 0.415984 -0.242705 + vertex 0.128368 0.277101 -0.189883 + endloop + endfacet + facet normal -0.184529 -0.887732 0.421759 + outer loop + vertex 1.496745 3.231941 -1.492587 + vertex 1.518561 3.233232 -1.480323 + vertex 1.510447 3.221589 -1.508381 + endloop + endfacet + facet normal 0.033782 -0.611306 0.790673 + outer loop + vertex 0.054785 0.423181 -0.202600 + vertex 0.457012 0.996856 0.223749 + vertex 0.552495 1.003632 0.224908 + endloop + endfacet + facet normal 0.175380 -0.676897 0.714880 + outer loop + vertex 0.054785 0.423181 -0.202600 + vertex 0.552495 1.003632 0.224908 + vertex 0.190484 0.415984 -0.242705 + endloop + endfacet + facet normal 0.061934 -0.933253 0.353840 + outer loop + vertex 0.457012 0.996856 0.223749 + vertex 0.705398 1.345779 1.100557 + vertex 0.552495 1.003632 0.224908 + endloop + endfacet + facet normal -0.055269 -0.926690 0.371741 + outer loop + vertex 0.705398 1.345779 1.100557 + vertex 0.764395 1.334228 1.080534 + vertex 0.552495 1.003632 0.224908 + endloop + endfacet + facet normal 0.378070 0.084331 0.921928 + outer loop + vertex 0.705398 1.345779 1.100557 + vertex 0.730700 1.462517 1.079503 + vertex 0.798102 1.398111 1.057754 + endloop + endfacet + facet normal 0.343856 0.149169 0.927099 + outer loop + vertex 0.705398 1.345779 1.100557 + vertex 0.798102 1.398111 1.057754 + vertex 0.764395 1.334228 1.080534 + endloop + endfacet + facet normal 0.588113 0.373160 0.717548 + outer loop + vertex 0.730700 1.462517 1.079503 + vertex 1.151094 2.435785 0.228796 + vertex 0.798102 1.398111 1.057754 + endloop + endfacet + facet normal 0.621727 0.348749 0.701305 + outer loop + vertex 1.151094 2.435785 0.228796 + vertex 1.197054 2.351813 0.229809 + vertex 0.798102 1.398111 1.057754 + endloop + endfacet + facet normal 0.900524 0.324002 0.289966 + outer loop + vertex 1.151094 2.435785 0.228796 + vertex 1.415802 2.946763 -1.164243 + vertex 1.442396 2.913601 -1.209781 + endloop + endfacet + facet normal 0.829440 0.457835 0.320024 + outer loop + vertex 1.151094 2.435785 0.228796 + vertex 1.442396 2.913601 -1.209781 + vertex 1.197054 2.351813 0.229809 + endloop + endfacet + facet normal 0.901798 0.190602 0.387855 + outer loop + vertex 1.415802 2.946763 -1.164243 + vertex 1.496745 3.231941 -1.492587 + vertex 1.442396 2.913601 -1.209781 + endloop + endfacet + facet normal 0.809248 0.306871 0.500946 + outer loop + vertex 1.496745 3.231941 -1.492587 + vertex 1.510447 3.221589 -1.508381 + vertex 1.442396 2.913601 -1.209781 + endloop + endfacet + facet normal 0.287106 0.225661 0.930939 + outer loop + vertex 0.190484 0.415984 -0.242705 + vertex 0.279407 0.304206 -0.243034 + vertex 0.128368 0.277101 -0.189883 + endloop + endfacet + facet normal -0.184330 -0.887790 0.421725 + outer loop + vertex 1.510447 3.221589 -1.508381 + vertex 1.518561 3.233232 -1.480323 + vertex 1.530259 3.220009 -1.503047 + endloop + endfacet + facet normal -0.455894 -0.365068 0.811718 + outer loop + vertex 0.190484 0.415984 -0.242705 + vertex 0.552495 1.003632 0.224908 + vertex 0.279407 0.304206 -0.243034 + endloop + endfacet + facet normal -0.683324 -0.202508 0.701469 + outer loop + vertex 0.552495 1.003632 0.224908 + vertex 0.615729 0.948034 0.270455 + vertex 0.279407 0.304206 -0.243034 + endloop + endfacet + facet normal -0.753481 -0.528666 0.390869 + outer loop + vertex 0.552495 1.003632 0.224908 + vertex 0.764395 1.334228 1.080534 + vertex 0.802205 1.306180 1.115484 + endloop + endfacet + facet normal -0.750331 -0.532756 0.391375 + outer loop + vertex 0.552495 1.003632 0.224908 + vertex 0.802205 1.306180 1.115484 + vertex 0.615729 0.948034 0.270455 + endloop + endfacet + facet normal -0.375712 0.480761 0.792281 + outer loop + vertex 0.764395 1.334228 1.080534 + vertex 0.798102 1.398111 1.057754 + vertex 0.802205 1.306180 1.115484 + endloop + endfacet + facet normal -0.382036 0.479180 0.790212 + outer loop + vertex 0.798102 1.398111 1.057754 + vertex 0.871357 1.367918 1.111479 + vertex 0.802205 1.306180 1.115484 + endloop + endfacet + facet normal -0.196148 0.688335 0.698371 + outer loop + vertex 0.798102 1.398111 1.057754 + vertex 1.197054 2.351813 0.229809 + vertex 1.277961 2.328603 0.275409 + endloop + endfacet + facet normal -0.219507 0.691687 0.688030 + outer loop + vertex 0.798102 1.398111 1.057754 + vertex 1.277961 2.328603 0.275409 + vertex 0.871357 1.367918 1.111479 + endloop + endfacet + facet normal 0.056591 0.926782 0.371313 + outer loop + vertex 1.197054 2.351813 0.229809 + vertex 1.442396 2.913601 -1.209781 + vertex 1.277961 2.328603 0.275409 + endloop + endfacet + facet normal -0.140208 0.926429 0.349386 + outer loop + vertex 1.442396 2.913601 -1.209781 + vertex 1.485407 2.914224 -1.194173 + vertex 1.277961 2.328603 0.275409 + endloop + endfacet + facet normal -0.131446 0.704857 0.697064 + outer loop + vertex 1.442396 2.913601 -1.209781 + vertex 1.510447 3.221589 -1.508381 + vertex 1.530259 3.220009 -1.503047 + endloop + endfacet + facet normal -0.250629 0.705920 0.662467 + outer loop + vertex 1.442396 2.913601 -1.209781 + vertex 1.530259 3.220009 -1.503047 + vertex 1.485407 2.914224 -1.194173 + endloop + endfacet + facet normal 0.287107 0.225659 0.930939 + outer loop + vertex 0.279407 0.304206 -0.243034 + vertex 0.254596 0.172017 -0.203340 + vertex 0.128368 0.277101 -0.189883 + endloop + endfacet + facet normal -0.184386 -0.887791 0.421697 + outer loop + vertex 1.530259 3.220009 -1.503047 + vertex 1.518561 3.233232 -1.480323 + vertex 1.541262 3.228386 -1.480601 + endloop + endfacet + facet normal -0.923753 0.336100 0.183621 + outer loop + vertex 0.279407 0.304206 -0.243034 + vertex 0.615729 0.948034 0.270455 + vertex 0.599097 0.871928 0.326091 + endloop + endfacet + facet normal -0.929181 0.254807 0.267763 + outer loop + vertex 0.279407 0.304206 -0.243034 + vertex 0.599097 0.871928 0.326091 + vertex 0.254596 0.172017 -0.203340 + endloop + endfacet + facet normal -0.956223 0.277304 0.093486 + outer loop + vertex 0.615729 0.948034 0.270455 + vertex 0.802205 1.306180 1.115484 + vertex 0.599097 0.871928 0.326091 + endloop + endfacet + facet normal -0.900450 0.434894 -0.007556 + outer loop + vertex 0.802205 1.306180 1.115484 + vertex 0.790359 1.282756 1.179089 + vertex 0.599097 0.871928 0.326091 + endloop + endfacet + facet normal -0.666761 0.743949 -0.044383 + outer loop + vertex 0.802205 1.306180 1.115484 + vertex 0.871357 1.367918 1.111479 + vertex 0.895302 1.394673 1.200220 + endloop + endfacet + facet normal -0.735310 0.668849 0.109359 + outer loop + vertex 0.802205 1.306180 1.115484 + vertex 0.895302 1.394673 1.200220 + vertex 0.790359 1.282756 1.179089 + endloop + endfacet + facet normal -0.882355 0.459965 0.099409 + outer loop + vertex 0.871357 1.367918 1.111479 + vertex 1.277961 2.328603 0.275409 + vertex 0.895302 1.394673 1.200220 + endloop + endfacet + facet normal -0.796392 0.557779 0.233757 + outer loop + vertex 1.277961 2.328603 0.275409 + vertex 1.332892 2.383628 0.331257 + vertex 0.895302 1.394673 1.200220 + endloop + endfacet + facet normal -0.852394 0.515902 0.085260 + outer loop + vertex 1.277961 2.328603 0.275409 + vertex 1.485407 2.914224 -1.194173 + vertex 1.512451 2.948164 -1.129171 + endloop + endfacet + facet normal -0.770076 0.621155 0.145430 + outer loop + vertex 1.277961 2.328603 0.275409 + vertex 1.512451 2.948164 -1.129171 + vertex 1.332892 2.383628 0.331257 + endloop + endfacet + facet normal -0.917797 0.340653 0.203972 + outer loop + vertex 1.485407 2.914224 -1.194173 + vertex 1.530259 3.220009 -1.503047 + vertex 1.512451 2.948164 -1.129171 + endloop + endfacet + facet normal -0.865919 0.423268 0.266512 + outer loop + vertex 1.530259 3.220009 -1.503047 + vertex 1.541262 3.228386 -1.480601 + vertex 1.512451 2.948164 -1.129171 + endloop + endfacet + facet normal 0.287101 -0.225652 0.930943 + outer loop + vertex 0.073210 -0.249522 -0.189883 + vertex 0.079574 -0.091378 -0.153513 + vertex 0.199438 -0.144437 -0.203340 + endloop + endfacet + facet normal -0.184375 0.887742 0.421806 + outer loop + vertex 1.480012 -3.212837 -1.457945 + vertex 1.463403 -3.205654 -1.480323 + vertex 1.486104 -3.200807 -1.480601 + endloop + endfacet + facet normal -0.475138 -0.667519 -0.573291 + outer loop + vertex 0.459966 -0.805043 0.349921 + vertex 0.543939 -0.844349 0.326091 + vertex 0.199438 -0.144437 -0.203340 + endloop + endfacet + facet normal -0.518250 -0.659949 -0.543952 + outer loop + vertex 0.079574 -0.091378 -0.153513 + vertex 0.459966 -0.805043 0.349921 + vertex 0.199438 -0.144437 -0.203340 + endloop + endfacet + facet normal -0.472387 -0.830830 -0.294232 + outer loop + vertex 0.459966 -0.805043 0.349921 + vertex 0.735200 -1.255177 1.179089 + vertex 0.543939 -0.844349 0.326091 + endloop + endfacet + facet normal -0.327001 -0.871802 -0.364734 + outer loop + vertex 0.459966 -0.805043 0.349921 + vertex 0.682616 -1.254015 1.223455 + vertex 0.735200 -1.255177 1.179089 + endloop + endfacet + facet normal -0.350685 -0.480595 -0.803771 + outer loop + vertex 0.796747 -1.430648 1.257154 + vertex 0.840144 -1.367094 1.200220 + vertex 0.735200 -1.255177 1.179089 + endloop + endfacet + facet normal -0.567528 -0.492582 -0.659754 + outer loop + vertex 0.682616 -1.254015 1.223455 + vertex 0.796747 -1.430648 1.257154 + vertex 0.735200 -1.255177 1.179089 + endloop + endfacet + facet normal -0.840572 0.096438 -0.533047 + outer loop + vertex 0.796747 -1.430648 1.257154 + vertex 1.277733 -2.356050 0.331257 + vertex 0.840144 -1.367094 1.200220 + endloop + endfacet + facet normal -0.887653 -0.000607 -0.460512 + outer loop + vertex 0.796747 -1.430648 1.257154 + vertex 1.265324 -2.447876 0.355297 + vertex 1.277733 -2.356050 0.331257 + endloop + endfacet + facet normal -0.991471 0.018419 -0.129021 + outer loop + vertex 1.448001 -2.962284 -1.063723 + vertex 1.457292 -2.920585 -1.129171 + vertex 1.277733 -2.356050 0.331257 + endloop + endfacet + facet normal -0.982980 0.091065 -0.159555 + outer loop + vertex 1.265324 -2.447876 0.355297 + vertex 1.448001 -2.962284 -1.063723 + vertex 1.277733 -2.356050 0.331257 + endloop + endfacet + facet normal -0.992560 0.041503 -0.114468 + outer loop + vertex 1.448001 -2.962284 -1.063723 + vertex 1.486104 -3.200807 -1.480601 + vertex 1.457292 -2.920585 -1.129171 + endloop + endfacet + facet normal -0.971498 0.156296 -0.178223 + outer loop + vertex 1.448001 -2.962284 -1.063723 + vertex 1.480012 -3.212837 -1.457945 + vertex 1.486104 -3.200807 -1.480601 + endloop + endfacet + facet normal 0.287098 -0.225652 0.930943 + outer loop + vertex 0.073210 -0.249522 -0.189883 + vertex -0.045083 -0.157405 -0.131074 + vertex 0.079574 -0.091378 -0.153513 + endloop + endfacet + facet normal -0.184356 0.887751 0.421795 + outer loop + vertex 1.461412 -3.219458 -1.452140 + vertex 1.463403 -3.205654 -1.480323 + vertex 1.480012 -3.212837 -1.457945 + endloop + endfacet + facet normal 0.127014 -0.525668 -0.841154 + outer loop + vertex -0.045083 -0.157405 -0.131074 + vertex 0.459966 -0.805043 0.349921 + vertex 0.079574 -0.091378 -0.153513 + endloop + endfacet + facet normal 0.362984 -0.356360 -0.860959 + outer loop + vertex -0.045083 -0.157405 -0.131074 + vertex 0.371885 -0.832137 0.324000 + vertex 0.459966 -0.805043 0.349921 + endloop + endfacet + facet normal 0.393003 -0.773264 -0.497606 + outer loop + vertex 0.628890 -1.275990 1.215172 + vertex 0.682616 -1.254015 1.223455 + vertex 0.459966 -0.805043 0.349921 + endloop + endfacet + facet normal 0.385496 -0.776755 -0.498040 + outer loop + vertex 0.371885 -0.832137 0.324000 + vertex 0.628890 -1.275990 1.215172 + vertex 0.459966 -0.805043 0.349921 + endloop + endfacet + facet normal 0.180201 -0.070741 -0.981083 + outer loop + vertex 0.628890 -1.275990 1.215172 + vertex 0.796747 -1.430648 1.257154 + vertex 0.682616 -1.254015 1.223455 + endloop + endfacet + facet normal 0.230535 -0.013907 -0.972965 + outer loop + vertex 0.628890 -1.275990 1.215172 + vertex 0.718689 -1.483148 1.239410 + vertex 0.796747 -1.430648 1.257154 + endloop + endfacet + facet normal -0.213642 0.591138 -0.777762 + outer loop + vertex 1.194918 -2.507357 0.329428 + vertex 1.265324 -2.447876 0.355297 + vertex 0.796747 -1.430648 1.257154 + endloop + endfacet + facet normal -0.219361 0.589029 -0.777769 + outer loop + vertex 0.718689 -1.483148 1.239410 + vertex 1.194918 -2.507357 0.329428 + vertex 0.796747 -1.430648 1.257154 + endloop + endfacet + facet normal -0.526722 0.775172 -0.348814 + outer loop + vertex 1.194918 -2.507357 0.329428 + vertex 1.448001 -2.962284 -1.063723 + vertex 1.265324 -2.447876 0.355297 + endloop + endfacet + facet normal -0.515792 0.782331 -0.349166 + outer loop + vertex 1.194918 -2.507357 0.329428 + vertex 1.409371 -2.980340 -1.047115 + vertex 1.448001 -2.962284 -1.063723 + endloop + endfacet + facet normal -0.425267 0.747819 -0.509819 + outer loop + vertex 1.461412 -3.219458 -1.452140 + vertex 1.480012 -3.212837 -1.457945 + vertex 1.448001 -2.962284 -1.063723 + endloop + endfacet + facet normal -0.532310 0.697278 -0.480052 + outer loop + vertex 1.409371 -2.980340 -1.047115 + vertex 1.461412 -3.219458 -1.452140 + vertex 1.448001 -2.962284 -1.063723 + endloop + endfacet + facet normal 0.287100 -0.225650 0.930943 + outer loop + vertex 0.073210 -0.249522 -0.189883 + vertex -0.080662 -0.292799 -0.152919 + vertex -0.045083 -0.157405 -0.131074 + endloop + endfacet + facet normal -0.184420 0.887742 0.421786 + outer loop + vertex 1.444311 -3.215685 -1.467557 + vertex 1.463403 -3.205654 -1.480323 + vertex 1.461412 -3.219458 -1.452140 + endloop + endfacet + facet normal 0.821850 0.134507 -0.553598 + outer loop + vertex 0.346023 -0.905228 0.267848 + vertex 0.371885 -0.832137 0.324000 + vertex -0.045083 -0.157405 -0.131074 + endloop + endfacet + facet normal 0.661470 -0.053120 -0.748088 + outer loop + vertex -0.080662 -0.292799 -0.152919 + vertex 0.346023 -0.905228 0.267848 + vertex -0.045083 -0.157405 -0.131074 + endloop + endfacet + facet normal 0.944038 -0.090313 -0.317233 + outer loop + vertex 0.346023 -0.905228 0.267848 + vertex 0.628890 -1.275990 1.215172 + vertex 0.371885 -0.832137 0.324000 + endloop + endfacet + facet normal 0.961417 0.036993 -0.272597 + outer loop + vertex 0.346023 -0.905228 0.267848 + vertex 0.614482 -1.304555 1.160477 + vertex 0.628890 -1.275990 1.215172 + endloop + endfacet + facet normal 0.790185 0.278662 -0.545853 + outer loop + vertex 0.664747 -1.485057 1.160348 + vertex 0.718689 -1.483148 1.239410 + vertex 0.628890 -1.275990 1.215172 + endloop + endfacet + facet normal 0.896214 0.249837 -0.366582 + outer loop + vertex 0.614482 -1.304555 1.160477 + vertex 0.664747 -1.485057 1.160348 + vertex 0.628890 -1.275990 1.215172 + endloop + endfacet + facet normal 0.608523 0.666115 -0.431267 + outer loop + vertex 0.664747 -1.485057 1.160348 + vertex 1.194918 -2.507357 0.329428 + vertex 0.718689 -1.483148 1.239410 + endloop + endfacet + facet normal 0.533112 0.682671 -0.499752 + outer loop + vertex 0.664747 -1.485057 1.160348 + vertex 1.119533 -2.489701 0.273131 + vertex 1.194918 -2.507357 0.329428 + endloop + endfacet + facet normal 0.592274 0.785884 -0.177760 + outer loop + vertex 1.370495 -2.961160 -1.091849 + vertex 1.409371 -2.980340 -1.047115 + vertex 1.194918 -2.507357 0.329428 + endloop + endfacet + facet normal 0.385836 0.891602 -0.237017 + outer loop + vertex 1.119533 -2.489701 0.273131 + vertex 1.370495 -2.961160 -1.091849 + vertex 1.194918 -2.507357 0.329428 + endloop + endfacet + facet normal 0.680415 0.665992 -0.305761 + outer loop + vertex 1.370495 -2.961160 -1.091849 + vertex 1.461412 -3.219458 -1.452140 + vertex 1.409371 -2.980340 -1.047115 + endloop + endfacet + facet normal 0.528015 0.747652 -0.402761 + outer loop + vertex 1.370495 -2.961160 -1.091849 + vertex 1.444311 -3.215685 -1.467557 + vertex 1.461412 -3.219458 -1.452140 + endloop + endfacet + facet normal 0.287102 -0.225660 0.930940 + outer loop + vertex 0.073210 -0.249522 -0.189883 + vertex -0.000373 -0.395602 -0.202600 + vertex -0.080662 -0.292799 -0.152919 + endloop + endfacet + facet normal -0.184492 0.887768 0.421700 + outer loop + vertex 1.441586 -3.204362 -1.492587 + vertex 1.463403 -3.205654 -1.480323 + vertex 1.444311 -3.215685 -1.467557 + endloop + endfacet + facet normal 0.800133 0.597049 0.057623 + outer loop + vertex -0.000373 -0.395602 -0.202600 + vertex 0.346023 -0.905228 0.267848 + vertex -0.080662 -0.292799 -0.152919 + endloop + endfacet + facet normal 0.781401 0.617048 0.093079 + outer loop + vertex -0.000373 -0.395602 -0.202600 + vertex 0.401854 -0.969277 0.223749 + vertex 0.346023 -0.905228 0.267848 + endloop + endfacet + facet normal 0.591942 0.786967 0.174031 + outer loop + vertex 0.650239 -1.318200 1.100557 + vertex 0.614482 -1.304555 1.160477 + vertex 0.346023 -0.905228 0.267848 + endloop + endfacet + facet normal 0.766158 0.641513 0.038248 + outer loop + vertex 0.401854 -0.969277 0.223749 + vertex 0.650239 -1.318200 1.100557 + vertex 0.346023 -0.905228 0.267848 + endloop + endfacet + facet normal 0.856900 0.238298 0.457095 + outer loop + vertex 0.650239 -1.318200 1.100557 + vertex 0.664747 -1.485057 1.160348 + vertex 0.614482 -1.304555 1.160477 + endloop + endfacet + facet normal 0.958668 0.166127 0.230991 + outer loop + vertex 0.650239 -1.318200 1.100557 + vertex 0.675542 -1.434938 1.079503 + vertex 0.664747 -1.485057 1.160348 + endloop + endfacet + facet normal 0.937909 0.329899 0.107207 + outer loop + vertex 1.095935 -2.408206 0.228796 + vertex 1.119533 -2.489701 0.273131 + vertex 0.664747 -1.485057 1.160348 + endloop + endfacet + facet normal 0.949356 0.194094 0.247086 + outer loop + vertex 0.675542 -1.434938 1.079503 + vertex 1.095935 -2.408206 0.228796 + vertex 0.664747 -1.485057 1.160348 + endloop + endfacet + facet normal 0.948076 0.310925 0.066919 + outer loop + vertex 1.095935 -2.408206 0.228796 + vertex 1.370495 -2.961160 -1.091849 + vertex 1.119533 -2.489701 0.273131 + endloop + endfacet + facet normal 0.943763 0.325119 0.060079 + outer loop + vertex 1.095935 -2.408206 0.228796 + vertex 1.360644 -2.919185 -1.164243 + vertex 1.370495 -2.961160 -1.091849 + endloop + endfacet + facet normal 0.965285 0.260878 0.012918 + outer loop + vertex 1.441586 -3.204362 -1.492587 + vertex 1.444311 -3.215685 -1.467557 + vertex 1.370495 -2.961160 -1.091849 + endloop + endfacet + facet normal 0.966703 0.255367 0.016514 + outer loop + vertex 1.360644 -2.919185 -1.164243 + vertex 1.441586 -3.204362 -1.492587 + vertex 1.370495 -2.961160 -1.091849 + endloop + endfacet + facet normal 0.287105 -0.225662 0.930939 + outer loop + vertex 0.073210 -0.249522 -0.189883 + vertex 0.135325 -0.388405 -0.242705 + vertex -0.000373 -0.395602 -0.202600 + endloop + endfacet + facet normal -0.184526 0.887733 0.421758 + outer loop + vertex 1.455288 -3.194010 -1.508381 + vertex 1.463403 -3.205654 -1.480323 + vertex 1.441586 -3.204362 -1.492587 + endloop + endfacet + facet normal 0.033782 0.611306 0.790673 + outer loop + vertex 0.497337 -0.976053 0.224908 + vertex 0.401854 -0.969277 0.223749 + vertex -0.000373 -0.395602 -0.202600 + endloop + endfacet + facet normal 0.175380 0.676897 0.714880 + outer loop + vertex 0.135325 -0.388405 -0.242705 + vertex 0.497337 -0.976053 0.224908 + vertex -0.000373 -0.395602 -0.202600 + endloop + endfacet + facet normal 0.061934 0.933253 0.353840 + outer loop + vertex 0.497337 -0.976053 0.224908 + vertex 0.650239 -1.318200 1.100557 + vertex 0.401854 -0.969277 0.223749 + endloop + endfacet + facet normal -0.055268 0.926690 0.371741 + outer loop + vertex 0.497337 -0.976053 0.224908 + vertex 0.709237 -1.306649 1.080534 + vertex 0.650239 -1.318200 1.100557 + endloop + endfacet + facet normal 0.378070 -0.084331 0.921928 + outer loop + vertex 0.742944 -1.370532 1.057754 + vertex 0.675542 -1.434938 1.079503 + vertex 0.650239 -1.318200 1.100557 + endloop + endfacet + facet normal 0.343856 -0.149169 0.927099 + outer loop + vertex 0.709237 -1.306649 1.080534 + vertex 0.742944 -1.370532 1.057754 + vertex 0.650239 -1.318200 1.100557 + endloop + endfacet + facet normal 0.588113 -0.373160 0.717548 + outer loop + vertex 0.742944 -1.370532 1.057754 + vertex 1.095935 -2.408206 0.228796 + vertex 0.675542 -1.434938 1.079503 + endloop + endfacet + facet normal 0.621728 -0.348749 0.701305 + outer loop + vertex 0.742944 -1.370532 1.057754 + vertex 1.141895 -2.324234 0.229809 + vertex 1.095935 -2.408206 0.228796 + endloop + endfacet + facet normal 0.900526 -0.323996 0.289965 + outer loop + vertex 1.387238 -2.886023 -1.209781 + vertex 1.360644 -2.919185 -1.164243 + vertex 1.095935 -2.408206 0.228796 + endloop + endfacet + facet normal 0.829441 -0.457835 0.320024 + outer loop + vertex 1.141895 -2.324234 0.229809 + vertex 1.387238 -2.886023 -1.209781 + vertex 1.095935 -2.408206 0.228796 + endloop + endfacet + facet normal 0.901800 -0.190600 0.387852 + outer loop + vertex 1.387238 -2.886023 -1.209781 + vertex 1.441586 -3.204362 -1.492587 + vertex 1.360644 -2.919185 -1.164243 + endloop + endfacet + facet normal 0.809241 -0.306879 0.500953 + outer loop + vertex 1.387238 -2.886023 -1.209781 + vertex 1.455288 -3.194010 -1.508381 + vertex 1.441586 -3.204362 -1.492587 + endloop + endfacet + facet normal 0.287106 -0.225661 0.930939 + outer loop + vertex 0.073210 -0.249522 -0.189883 + vertex 0.224249 -0.276626 -0.243034 + vertex 0.135325 -0.388405 -0.242705 + endloop + endfacet + facet normal -0.184330 0.887790 0.421725 + outer loop + vertex 1.475101 -3.192430 -1.503047 + vertex 1.463403 -3.205654 -1.480323 + vertex 1.455288 -3.194010 -1.508381 + endloop + endfacet + facet normal -0.455894 0.365068 0.811718 + outer loop + vertex 0.224249 -0.276626 -0.243034 + vertex 0.497337 -0.976053 0.224908 + vertex 0.135325 -0.388405 -0.242705 + endloop + endfacet + facet normal -0.683324 0.202508 0.701469 + outer loop + vertex 0.224249 -0.276626 -0.243034 + vertex 0.560570 -0.920455 0.270455 + vertex 0.497337 -0.976053 0.224908 + endloop + endfacet + facet normal -0.753482 0.528665 0.390869 + outer loop + vertex 0.747047 -1.278601 1.115484 + vertex 0.709237 -1.306649 1.080534 + vertex 0.497337 -0.976053 0.224908 + endloop + endfacet + facet normal -0.750331 0.532756 0.391375 + outer loop + vertex 0.560570 -0.920455 0.270455 + vertex 0.747047 -1.278601 1.115484 + vertex 0.497337 -0.976053 0.224908 + endloop + endfacet + facet normal -0.375711 -0.480761 0.792282 + outer loop + vertex 0.747047 -1.278601 1.115484 + vertex 0.742944 -1.370532 1.057754 + vertex 0.709237 -1.306649 1.080534 + endloop + endfacet + facet normal -0.382036 -0.479179 0.790212 + outer loop + vertex 0.747047 -1.278601 1.115484 + vertex 0.816199 -1.340339 1.111479 + vertex 0.742944 -1.370532 1.057754 + endloop + endfacet + facet normal -0.196148 -0.688335 0.698371 + outer loop + vertex 1.222802 -2.301024 0.275409 + vertex 1.141895 -2.324234 0.229809 + vertex 0.742944 -1.370532 1.057754 + endloop + endfacet + facet normal -0.219507 -0.691687 0.688030 + outer loop + vertex 0.816199 -1.340339 1.111479 + vertex 1.222802 -2.301024 0.275409 + vertex 0.742944 -1.370532 1.057754 + endloop + endfacet + facet normal 0.056590 -0.926781 0.371313 + outer loop + vertex 1.222802 -2.301024 0.275409 + vertex 1.387238 -2.886023 -1.209781 + vertex 1.141895 -2.324234 0.229809 + endloop + endfacet + facet normal -0.140208 -0.926429 0.349386 + outer loop + vertex 1.222802 -2.301024 0.275409 + vertex 1.430249 -2.886646 -1.194173 + vertex 1.387238 -2.886023 -1.209781 + endloop + endfacet + facet normal -0.131446 -0.704858 0.697064 + outer loop + vertex 1.475101 -3.192430 -1.503047 + vertex 1.455288 -3.194010 -1.508381 + vertex 1.387238 -2.886023 -1.209781 + endloop + endfacet + facet normal -0.250628 -0.705920 0.662467 + outer loop + vertex 1.430249 -2.886646 -1.194173 + vertex 1.475101 -3.192430 -1.503047 + vertex 1.387238 -2.886023 -1.209781 + endloop + endfacet + facet normal 0.287107 -0.225659 0.930939 + outer loop + vertex 0.073210 -0.249522 -0.189883 + vertex 0.199438 -0.144437 -0.203340 + vertex 0.224249 -0.276626 -0.243034 + endloop + endfacet + facet normal -0.184387 0.887791 0.421696 + outer loop + vertex 1.486104 -3.200807 -1.480601 + vertex 1.463403 -3.205654 -1.480323 + vertex 1.475101 -3.192430 -1.503047 + endloop + endfacet + facet normal -0.923753 -0.336100 0.183621 + outer loop + vertex 0.543939 -0.844349 0.326091 + vertex 0.560570 -0.920455 0.270455 + vertex 0.224249 -0.276626 -0.243034 + endloop + endfacet + facet normal -0.929181 -0.254807 0.267762 + outer loop + vertex 0.199438 -0.144437 -0.203340 + vertex 0.543939 -0.844349 0.326091 + vertex 0.224249 -0.276626 -0.243034 + endloop + endfacet + facet normal -0.956223 -0.277304 0.093486 + outer loop + vertex 0.543939 -0.844349 0.326091 + vertex 0.747047 -1.278601 1.115484 + vertex 0.560570 -0.920455 0.270455 + endloop + endfacet + facet normal -0.900450 -0.434894 -0.007556 + outer loop + vertex 0.543939 -0.844349 0.326091 + vertex 0.735200 -1.255177 1.179089 + vertex 0.747047 -1.278601 1.115484 + endloop + endfacet + facet normal -0.666762 -0.743948 -0.044383 + outer loop + vertex 0.840144 -1.367094 1.200220 + vertex 0.816199 -1.340339 1.111479 + vertex 0.747047 -1.278601 1.115484 + endloop + endfacet + facet normal -0.735310 -0.668849 0.109359 + outer loop + vertex 0.735200 -1.255177 1.179089 + vertex 0.840144 -1.367094 1.200220 + vertex 0.747047 -1.278601 1.115484 + endloop + endfacet + facet normal -0.882355 -0.459965 0.099409 + outer loop + vertex 0.840144 -1.367094 1.200220 + vertex 1.222802 -2.301024 0.275409 + vertex 0.816199 -1.340339 1.111479 + endloop + endfacet + facet normal -0.796393 -0.557778 0.233755 + outer loop + vertex 0.840144 -1.367094 1.200220 + vertex 1.277733 -2.356050 0.331257 + vertex 1.222802 -2.301024 0.275409 + endloop + endfacet + facet normal -0.852396 -0.515899 0.085259 + outer loop + vertex 1.457292 -2.920585 -1.129171 + vertex 1.430249 -2.886646 -1.194173 + vertex 1.222802 -2.301024 0.275409 + endloop + endfacet + facet normal -0.770078 -0.621153 0.145429 + outer loop + vertex 1.277733 -2.356050 0.331257 + vertex 1.457292 -2.920585 -1.129171 + vertex 1.222802 -2.301024 0.275409 + endloop + endfacet + facet normal -0.917798 -0.340652 0.203971 + outer loop + vertex 1.457292 -2.920585 -1.129171 + vertex 1.475101 -3.192430 -1.503047 + vertex 1.430249 -2.886646 -1.194173 + endloop + endfacet + facet normal -0.865921 -0.423265 0.266510 + outer loop + vertex 1.457292 -2.920585 -1.129171 + vertex 1.486104 -3.200807 -1.480601 + vertex 1.475101 -3.192430 -1.503047 + endloop + endfacet + facet normal 0.000000 0.000000 0.000000 + outer loop + vertex -2.044177 0.405290 -0.393859 + vertex -2.044177 0.405290 -0.393859 + vertex -2.044177 0.405290 -0.393859 + endloop + endfacet + facet normal -0.891946 0.305186 -0.333607 + outer loop + vertex -1.823871 0.262815 0.436649 + vertex -1.887549 0.152714 0.506180 + vertex -1.825895 0.173241 0.360119 + endloop + endfacet + facet normal -0.885286 -0.462164 0.051707 + outer loop + vertex -1.964459 0.327821 0.278563 + vertex -1.928270 0.255226 0.249315 + vertex -2.044177 0.405290 -0.393859 + endloop + endfacet + facet normal 0.000000 0.000000 0.000000 + outer loop + vertex -2.044177 0.405290 -0.393859 + vertex -1.964459 0.327821 0.278563 + vertex -2.044177 0.405290 -0.393859 + endloop + endfacet + facet normal -0.782589 -0.524956 0.334628 + outer loop + vertex -1.964459 0.327821 0.278563 + vertex -1.825895 0.173241 0.360119 + vertex -1.928270 0.255226 0.249315 + endloop + endfacet + facet normal -0.758137 -0.413600 0.504146 + outer loop + vertex -1.964459 0.327821 0.278563 + vertex -1.823871 0.262815 0.436649 + vertex -1.825895 0.173241 0.360119 + endloop + endfacet + facet normal 0.000000 0.000000 0.000000 + outer loop + vertex -2.044177 0.405290 -0.393859 + vertex -2.044177 0.405290 -0.393859 + vertex -2.044177 0.405290 -0.393859 + endloop + endfacet + facet normal -0.891943 0.305170 -0.333629 + outer loop + vertex -1.869800 0.269480 0.565534 + vertex -1.887549 0.152714 0.506180 + vertex -1.823871 0.262815 0.436649 + endloop + endfacet + facet normal 0.000000 0.000000 0.000000 + outer loop + vertex -2.044177 0.405290 -0.393859 + vertex -1.964459 0.327821 0.278563 + vertex -2.044177 0.405290 -0.393859 + endloop + endfacet + facet normal -0.239093 -0.967433 -0.083113 + outer loop + vertex -2.044177 0.405290 -0.393859 + vertex -2.059240 0.350344 0.289045 + vertex -1.964459 0.327821 0.278563 + endloop + endfacet + facet normal -0.347356 -0.934694 -0.075443 + outer loop + vertex -1.869800 0.269480 0.565534 + vertex -1.823871 0.262815 0.436649 + vertex -1.964459 0.327821 0.278563 + endloop + endfacet + facet normal -0.241774 -0.963362 -0.116098 + outer loop + vertex -2.059240 0.350344 0.289045 + vertex -1.869800 0.269480 0.565534 + vertex -1.964459 0.327821 0.278563 + endloop + endfacet + facet normal 0.000000 0.000000 0.000000 + outer loop + vertex -2.044177 0.405290 -0.393859 + vertex -2.044177 0.405290 -0.393859 + vertex -2.044177 0.405290 -0.393859 + endloop + endfacet + facet normal -0.891948 0.305166 -0.333620 + outer loop + vertex -1.929093 0.188218 0.649726 + vertex -1.887549 0.152714 0.506180 + vertex -1.869800 0.269480 0.565534 + endloop + endfacet + facet normal 0.485254 -0.872347 -0.059485 + outer loop + vertex -2.141237 0.305836 0.272870 + vertex -2.059240 0.350344 0.289045 + vertex -2.044177 0.405290 -0.393859 + endloop + endfacet + facet normal 0.000000 0.000000 0.000000 + outer loop + vertex -2.044177 0.405290 -0.393859 + vertex -2.141237 0.305836 0.272870 + vertex -2.044177 0.405290 -0.393859 + endloop + endfacet + facet normal 0.482345 -0.694664 -0.533652 + outer loop + vertex -2.141237 0.305836 0.272870 + vertex -1.869800 0.269480 0.565534 + vertex -2.059240 0.350344 0.289045 + endloop + endfacet + facet normal 0.403895 -0.783667 -0.471948 + outer loop + vertex -2.141237 0.305836 0.272870 + vertex -1.929093 0.188218 0.649726 + vertex -1.869800 0.269480 0.565534 + endloop + endfacet + facet normal 0.000000 0.000000 0.000000 + outer loop + vertex -2.044177 0.405290 -0.393859 + vertex -2.044177 0.405290 -0.393859 + vertex -2.044177 0.405290 -0.393859 + endloop + endfacet + facet normal -0.891945 0.305175 -0.333622 + outer loop + vertex -1.957105 0.080220 0.625826 + vertex -1.887549 0.152714 0.506180 + vertex -1.929093 0.188218 0.649726 + endloop + endfacet + facet normal 0.000000 0.000000 0.000000 + outer loop + vertex -2.044177 0.405290 -0.393859 + vertex -2.141237 0.305836 0.272870 + vertex -2.044177 0.405290 -0.393859 + endloop + endfacet + facet normal 0.982346 -0.141966 0.121830 + outer loop + vertex -2.044177 0.405290 -0.393859 + vertex -2.148711 0.227811 0.242217 + vertex -2.141237 0.305836 0.272870 + endloop + endfacet + facet normal 0.851678 -0.107380 -0.512947 + outer loop + vertex -1.957105 0.080220 0.625826 + vertex -1.929093 0.188218 0.649726 + vertex -2.141237 0.305836 0.272870 + endloop + endfacet + facet normal 0.903622 0.078834 -0.421014 + outer loop + vertex -2.148711 0.227811 0.242217 + vertex -1.957105 0.080220 0.625826 + vertex -2.141237 0.305836 0.272870 + endloop + endfacet + facet normal 0.000000 0.000000 0.000000 + outer loop + vertex -2.044177 0.405290 -0.393859 + vertex -2.044177 0.405290 -0.393859 + vertex -2.044177 0.405290 -0.393859 + endloop + endfacet + facet normal -0.891943 0.305188 -0.333613 + outer loop + vertex -1.932741 0.026811 0.511829 + vertex -1.887549 0.152714 0.506180 + vertex -1.957105 0.080220 0.625826 + endloop + endfacet + facet normal 0.618495 0.724667 0.303843 + outer loop + vertex -2.076031 0.175025 0.220167 + vertex -2.148711 0.227811 0.242217 + vertex -2.044177 0.405290 -0.393859 + endloop + endfacet + facet normal 0.000000 0.000000 0.000000 + outer loop + vertex -2.044177 0.405290 -0.393859 + vertex -2.076031 0.175025 0.220167 + vertex -2.044177 0.405290 -0.393859 + endloop + endfacet + facet normal 0.590632 0.806794 0.015398 + outer loop + vertex -2.076031 0.175025 0.220167 + vertex -1.957105 0.080220 0.625826 + vertex -2.148711 0.227811 0.242217 + endloop + endfacet + facet normal 0.806725 0.582334 -0.100412 + outer loop + vertex -2.076031 0.175025 0.220167 + vertex -1.932741 0.026811 0.511829 + vertex -1.957105 0.080220 0.625826 + endloop + endfacet + facet normal 0.000000 0.000000 0.000000 + outer loop + vertex -2.044177 0.405290 -0.393859 + vertex -2.044177 0.405290 -0.393859 + vertex -2.044177 0.405290 -0.393859 + endloop + endfacet + facet normal -0.891946 0.305190 -0.333603 + outer loop + vertex -1.874349 0.068210 0.393579 + vertex -1.887549 0.152714 0.506180 + vertex -1.932741 0.026811 0.511829 + endloop + endfacet + facet normal 0.000000 0.000000 0.000000 + outer loop + vertex -2.044177 0.405290 -0.393859 + vertex -2.076031 0.175025 0.220167 + vertex -2.044177 0.405290 -0.393859 + endloop + endfacet + facet normal -0.126801 0.930913 0.342523 + outer loop + vertex -2.044177 0.405290 -0.393859 + vertex -1.977924 0.187225 0.223327 + vertex -2.076031 0.175025 0.220167 + endloop + endfacet + facet normal 0.145876 0.909062 0.390290 + outer loop + vertex -1.874349 0.068210 0.393579 + vertex -1.932741 0.026811 0.511829 + vertex -2.076031 0.175025 0.220167 + endloop + endfacet + facet normal -0.116741 0.779242 0.615755 + outer loop + vertex -1.977924 0.187225 0.223327 + vertex -1.874349 0.068210 0.393579 + vertex -2.076031 0.175025 0.220167 + endloop + endfacet + facet normal 0.000000 0.000000 0.000000 + outer loop + vertex -2.044177 0.405290 -0.393859 + vertex -2.044177 0.405290 -0.393859 + vertex -2.044177 0.405290 -0.393859 + endloop + endfacet + facet normal -0.891944 0.305194 -0.333605 + outer loop + vertex -1.825895 0.173241 0.360119 + vertex -1.887549 0.152714 0.506180 + vertex -1.874349 0.068210 0.393579 + endloop + endfacet + facet normal -0.824144 0.500415 0.265276 + outer loop + vertex -1.928270 0.255226 0.249315 + vertex -1.977924 0.187225 0.223327 + vertex -2.044177 0.405290 -0.393859 + endloop + endfacet + facet normal 0.000000 0.000000 0.000000 + outer loop + vertex -2.044177 0.405290 -0.393859 + vertex -1.928270 0.255226 0.249315 + vertex -2.044177 0.405290 -0.393859 + endloop + endfacet + facet normal -0.719097 0.282446 0.634920 + outer loop + vertex -1.928270 0.255226 0.249315 + vertex -1.874349 0.068210 0.393579 + vertex -1.977924 0.187225 0.223327 + endloop + endfacet + facet normal -0.460381 0.455179 0.762143 + outer loop + vertex -1.928270 0.255226 0.249315 + vertex -1.825895 0.173241 0.360119 + vertex -1.874349 0.068210 0.393579 + endloop + endfacet + facet normal 0.000000 0.000000 0.000000 + outer loop + vertex -2.042185 0.828595 0.146647 + vertex -2.042185 0.828595 0.146647 + vertex -2.042185 0.828595 0.146647 + endloop + endfacet + facet normal -0.417209 0.680008 -0.602931 + outer loop + vertex -1.578235 0.290569 0.523094 + vertex -1.568903 0.382055 0.619818 + vertex -1.690046 0.288253 0.597851 + endloop + endfacet + facet normal 0.390952 0.768585 0.506393 + outer loop + vertex -1.677769 0.494724 0.372043 + vertex -1.751140 0.490709 0.434782 + vertex -2.042185 0.828595 0.146647 + endloop + endfacet + facet normal 0.000000 0.000000 0.000000 + outer loop + vertex -2.042185 0.828595 0.146647 + vertex -1.677769 0.494724 0.372043 + vertex -2.042185 0.828595 0.146647 + endloop + endfacet + facet normal 0.482775 0.633069 0.605105 + outer loop + vertex -1.677769 0.494724 0.372043 + vertex -1.690046 0.288253 0.597851 + vertex -1.751140 0.490709 0.434782 + endloop + endfacet + facet normal 0.406461 0.663174 0.628482 + outer loop + vertex -1.677769 0.494724 0.372043 + vertex -1.578235 0.290569 0.523094 + vertex -1.690046 0.288253 0.597851 + endloop + endfacet + facet normal 0.000000 0.000000 0.000000 + outer loop + vertex -2.042185 0.828595 0.146647 + vertex -2.042185 0.828595 0.146647 + vertex -2.042185 0.828595 0.146647 + endloop + endfacet + facet normal -0.417208 0.680009 -0.602931 + outer loop + vertex -1.459397 0.361776 0.521173 + vertex -1.568903 0.382055 0.619818 + vertex -1.578235 0.290569 0.523094 + endloop + endfacet + facet normal 0.000000 0.000000 0.000000 + outer loop + vertex -2.042185 0.828595 0.146647 + vertex -1.677769 0.494724 0.372043 + vertex -2.042185 0.828595 0.146647 + endloop + endfacet + facet normal -0.141780 0.442906 0.885287 + outer loop + vertex -2.042185 0.828595 0.146647 + vertex -1.610792 0.552543 0.353843 + vertex -1.677769 0.494724 0.372043 + endloop + endfacet + facet normal -0.275093 0.481557 0.832122 + outer loop + vertex -1.459397 0.361776 0.521173 + vertex -1.578235 0.290569 0.523094 + vertex -1.677769 0.494724 0.372043 + endloop + endfacet + facet normal -0.234951 0.528878 0.815528 + outer loop + vertex -1.610792 0.552543 0.353843 + vertex -1.459397 0.361776 0.521173 + vertex -1.677769 0.494724 0.372043 + endloop + endfacet + facet normal 0.000000 0.000000 0.000000 + outer loop + vertex -2.042185 0.828595 0.146647 + vertex -2.042185 0.828595 0.146647 + vertex -2.042185 0.828595 0.146647 + endloop + endfacet + facet normal -0.417209 0.680007 -0.602932 + outer loop + vertex -1.423018 0.448254 0.593532 + vertex -1.568903 0.382055 0.619818 + vertex -1.459397 0.361776 0.521173 + endloop + endfacet + facet normal -0.577505 -0.348286 0.738367 + outer loop + vertex -1.600651 0.620626 0.393889 + vertex -1.610792 0.552543 0.353843 + vertex -2.042185 0.828595 0.146647 + endloop + endfacet + facet normal 0.000000 0.000000 0.000000 + outer loop + vertex -2.042185 0.828595 0.146647 + vertex -1.600651 0.620626 0.393889 + vertex -2.042185 0.828595 0.146647 + endloop + endfacet + facet normal -0.825805 -0.189440 0.531186 + outer loop + vertex -1.600651 0.620626 0.393889 + vertex -1.459397 0.361776 0.521173 + vertex -1.610792 0.552543 0.353843 + endloop + endfacet + facet normal -0.799487 -0.150301 0.581575 + outer loop + vertex -1.600651 0.620626 0.393889 + vertex -1.423018 0.448254 0.593532 + vertex -1.459397 0.361776 0.521173 + endloop + endfacet + facet normal 0.000000 0.000000 0.000000 + outer loop + vertex -2.042185 0.828595 0.146647 + vertex -2.042185 0.828595 0.146647 + vertex -2.042185 0.828595 0.146647 + endloop + endfacet + facet normal -0.417208 0.680003 -0.602937 + outer loop + vertex -1.496495 0.484885 0.685687 + vertex -1.568903 0.382055 0.619818 + vertex -1.423018 0.448254 0.593532 + endloop + endfacet + facet normal 0.000000 0.000000 0.000000 + outer loop + vertex -2.042185 0.828595 0.146647 + vertex -1.600651 0.620626 0.393889 + vertex -2.042185 0.828595 0.146647 + endloop + endfacet + facet normal -0.432328 -0.901613 0.013673 + outer loop + vertex -2.042185 0.828595 0.146647 + vertex -1.654973 0.647707 0.462025 + vertex -1.600651 0.620626 0.393889 + endloop + endfacet + facet normal -0.591238 -0.791076 -0.156960 + outer loop + vertex -1.496495 0.484885 0.685687 + vertex -1.423018 0.448254 0.593532 + vertex -1.600651 0.620626 0.393889 + endloop + endfacet + facet normal -0.591242 -0.791074 -0.156958 + outer loop + vertex -1.654973 0.647707 0.462025 + vertex -1.496495 0.484885 0.685687 + vertex -1.600651 0.620626 0.393889 + endloop + endfacet + facet normal 0.000000 0.000000 0.000000 + outer loop + vertex -2.042185 0.828595 0.146647 + vertex -2.042185 0.828595 0.146647 + vertex -2.042185 0.828595 0.146647 + endloop + endfacet + facet normal -0.417218 0.680005 -0.602929 + outer loop + vertex -1.624494 0.444081 0.728241 + vertex -1.568903 0.382055 0.619818 + vertex -1.496495 0.484885 0.685687 + endloop + endfacet + facet normal 0.053749 -0.836287 -0.545651 + outer loop + vertex -1.732860 0.613395 0.506941 + vertex -1.654973 0.647707 0.462025 + vertex -2.042185 0.828595 0.146647 + endloop + endfacet + facet normal 0.000000 0.000000 0.000000 + outer loop + vertex -2.042185 0.828595 0.146647 + vertex -1.732860 0.613395 0.506941 + vertex -2.042185 0.828595 0.146647 + endloop + endfacet + facet normal 0.011834 -0.804398 -0.593973 + outer loop + vertex -1.732860 0.613395 0.506941 + vertex -1.496495 0.484885 0.685687 + vertex -1.654973 0.647707 0.462025 + endloop + endfacet + facet normal 0.043387 -0.783097 -0.620384 + outer loop + vertex -1.732860 0.613395 0.506941 + vertex -1.624494 0.444081 0.728241 + vertex -1.496495 0.484885 0.685687 + endloop + endfacet + facet normal 0.000000 0.000000 0.000000 + outer loop + vertex -2.042185 0.828595 0.146647 + vertex -2.042185 0.828595 0.146647 + vertex -2.042185 0.828595 0.146647 + endloop + endfacet + facet normal -0.417210 0.680010 -0.602928 + outer loop + vertex -1.710631 0.356573 0.689150 + vertex -1.568903 0.382055 0.619818 + vertex -1.624494 0.444081 0.728241 + endloop + endfacet + facet normal 0.000000 0.000000 0.000000 + outer loop + vertex -2.042185 0.828595 0.146647 + vertex -1.732860 0.613395 0.506941 + vertex -2.042185 0.828595 0.146647 + endloop + endfacet + facet normal 0.644526 -0.270724 -0.715049 + outer loop + vertex -2.042185 0.828595 0.146647 + vertex -1.775658 0.543522 0.494818 + vertex -1.732860 0.613395 0.506941 + endloop + endfacet + facet normal 0.676753 -0.386139 -0.626819 + outer loop + vertex -1.710631 0.356573 0.689150 + vertex -1.624494 0.444081 0.728241 + vertex -1.732860 0.613395 0.506941 + endloop + endfacet + facet normal 0.734698 -0.349097 -0.581679 + outer loop + vertex -1.775658 0.543522 0.494818 + vertex -1.710631 0.356573 0.689150 + vertex -1.732860 0.613395 0.506941 + endloop + endfacet + facet normal 0.000000 0.000000 0.000000 + outer loop + vertex -2.042185 0.828595 0.146647 + vertex -2.042185 0.828595 0.146647 + vertex -2.042185 0.828595 0.146647 + endloop + endfacet + facet normal -0.417210 0.680010 -0.602929 + outer loop + vertex -1.690046 0.288253 0.597851 + vertex -1.568903 0.382055 0.619818 + vertex -1.710631 0.356573 0.689150 + endloop + endfacet + facet normal 0.811765 0.561055 -0.162035 + outer loop + vertex -1.751140 0.490709 0.434782 + vertex -1.775658 0.543522 0.494818 + vertex -2.042185 0.828595 0.146647 + endloop + endfacet + facet normal 0.000000 0.000000 0.000000 + outer loop + vertex -2.042185 0.828595 0.146647 + vertex -1.751140 0.490709 0.434782 + vertex -2.042185 0.828595 0.146647 + endloop + endfacet + facet normal 0.926234 0.373678 0.049547 + outer loop + vertex -1.751140 0.490709 0.434782 + vertex -1.710631 0.356573 0.689150 + vertex -1.775658 0.543522 0.494818 + endloop + endfacet + facet normal 0.957406 0.288746 -0.000204 + outer loop + vertex -1.751140 0.490709 0.434782 + vertex -1.690046 0.288253 0.597851 + vertex -1.710631 0.356573 0.689150 + endloop + endfacet + facet normal -0.188931 -0.058235 -0.980262 + outer loop + vertex -1.068990 0.002298 1.101103 + vertex -1.102244 0.110185 1.101103 + vertex -1.515773 0.002298 1.187214 + endloop + endfacet + facet normal -0.184716 -0.074175 -0.979989 + outer loop + vertex -1.102244 0.110185 1.101103 + vertex -1.211482 0.382218 1.101103 + vertex -1.515773 0.002298 1.187214 + endloop + endfacet + facet normal -0.069184 -0.258199 0.963611 + outer loop + vertex -1.515773 0.250511 0.260870 + vertex -1.391667 0.217257 0.260870 + vertex -1.515773 0.002298 0.194362 + endloop + endfacet + facet normal 0.049739 -0.258499 -0.964730 + outer loop + vertex -1.211482 0.382218 1.101103 + vertex -1.515773 0.250511 1.120705 + vertex -1.515773 0.002298 1.187214 + endloop + endfacet + facet normal 0.865196 -0.129781 0.484348 + outer loop + vertex -1.590238 0.217257 0.384977 + vertex -1.515773 0.250511 0.260870 + vertex -1.515773 0.002298 0.194362 + endloop + endfacet + facet normal 0.069184 -0.258199 -0.963611 + outer loop + vertex -1.515773 0.250511 1.120705 + vertex -1.639879 0.217257 1.120705 + vertex -1.515773 0.002298 1.187214 + endloop + endfacet + facet normal 0.202386 -0.609559 0.766471 + outer loop + vertex -1.681090 0.126405 0.336713 + vertex -1.590238 0.217257 0.384977 + vertex -1.515773 0.002298 0.194362 + endloop + endfacet + facet normal 0.189015 -0.189015 -0.963611 + outer loop + vertex -1.639879 0.217257 1.120705 + vertex -1.730732 0.126405 1.120705 + vertex -1.515773 0.002298 1.187214 + endloop + endfacet + facet normal 0.575660 -0.154247 0.803009 + outer loop + vertex -1.714344 0.002298 0.336713 + vertex -1.681090 0.126405 0.336713 + vertex -1.515773 0.002298 0.194362 + endloop + endfacet + facet normal 0.258199 -0.069185 -0.963611 + outer loop + vertex -1.730732 0.126405 1.120705 + vertex -1.763986 0.002298 1.120705 + vertex -1.515773 0.002298 1.187214 + endloop + endfacet + facet normal 0.202414 -0.788103 0.581311 + outer loop + vertex -1.391667 0.217257 0.260870 + vertex -1.300815 0.374617 0.442575 + vertex -1.161840 0.410311 0.442575 + endloop + endfacet + facet normal -0.085783 -0.731518 0.676405 + outer loop + vertex -1.515773 0.489080 0.539102 + vertex -1.300815 0.374617 0.442575 + vertex -1.391667 0.217257 0.260870 + endloop + endfacet + facet normal -0.199330 -0.743908 0.637862 + outer loop + vertex -1.515773 0.250511 0.260870 + vertex -1.515773 0.489080 0.539102 + vertex -1.391667 0.217257 0.260870 + endloop + endfacet + facet normal 0.818344 -0.436300 0.374105 + outer loop + vertex -1.590238 0.217257 0.384977 + vertex -1.515773 0.489080 0.539102 + vertex -1.515773 0.250511 0.260870 + endloop + endfacet + facet normal -0.151084 -0.455931 0.877098 + outer loop + vertex -1.590238 0.217257 0.384977 + vertex -1.730732 0.374617 0.442575 + vertex -1.515773 0.489080 0.539102 + endloop + endfacet + facet normal 0.186527 -0.186527 0.964580 + outer loop + vertex -1.888092 0.217257 0.442575 + vertex -1.730732 0.374617 0.442575 + vertex -1.590238 0.217257 0.384977 + endloop + endfacet + facet normal 0.154704 -0.579695 0.800012 + outer loop + vertex -1.681090 0.126405 0.336713 + vertex -1.888092 0.217257 0.442575 + vertex -1.590238 0.217257 0.384977 + endloop + endfacet + facet normal 0.413534 -0.110806 0.903721 + outer loop + vertex -1.714344 0.002298 0.336713 + vertex -1.888092 0.217257 0.442575 + vertex -1.681090 0.126405 0.336713 + endloop + endfacet + facet normal 0.303035 -0.212556 0.928972 + outer loop + vertex -1.714344 0.002298 0.336713 + vertex -1.937417 0.002298 0.409480 + vertex -1.888092 0.217257 0.442575 + endloop + endfacet + facet normal -0.839147 -0.156274 0.520972 + outer loop + vertex -1.161840 0.410311 0.442575 + vertex -0.820777 0.002298 0.869546 + vertex -1.085856 0.002298 0.442575 + endloop + endfacet + facet normal -0.844083 -0.175277 0.506756 + outer loop + vertex -1.161840 0.410311 0.442575 + vertex -0.905672 0.411127 0.869546 + vertex -0.820777 0.002298 0.869546 + endloop + endfacet + facet normal -0.610179 -0.701911 0.367427 + outer loop + vertex -1.087376 0.569084 0.869546 + vertex -0.905672 0.411127 0.869546 + vertex -1.161840 0.410311 0.442575 + endloop + endfacet + facet normal 0.237148 -0.923342 0.301993 + outer loop + vertex -1.300815 0.374617 0.442575 + vertex -1.087376 0.569084 0.869546 + vertex -1.161840 0.410311 0.442575 + endloop + endfacet + facet normal -0.224840 -0.839457 0.494731 + outer loop + vertex -1.515773 0.489080 0.539102 + vertex -1.087376 0.569084 0.869546 + vertex -1.300815 0.374617 0.442575 + endloop + endfacet + facet normal 0.136154 -0.988692 0.062858 + outer loop + vertex -1.515773 0.489080 0.539102 + vertex -1.515773 0.498724 0.690788 + vertex -1.087376 0.569084 0.869546 + endloop + endfacet + facet normal 0.379295 -0.923411 0.058708 + outer loop + vertex -1.822320 0.370554 0.655329 + vertex -1.515773 0.498724 0.690788 + vertex -1.515773 0.489080 0.539102 + endloop + endfacet + facet normal 0.407738 -0.899263 0.158352 + outer loop + vertex -1.730732 0.374617 0.442575 + vertex -1.822320 0.370554 0.655329 + vertex -1.515773 0.489080 0.539102 + endloop + endfacet + facet normal 0.678963 -0.678963 0.279317 + outer loop + vertex -1.888092 0.217257 0.442575 + vertex -1.822320 0.370554 0.655329 + vertex -1.730732 0.374617 0.442575 + endloop + endfacet + facet normal 0.852383 -0.512161 0.105518 + outer loop + vertex -1.888092 0.217257 0.442575 + vertex -1.954668 0.150289 0.655329 + vertex -1.822320 0.370554 0.655329 + endloop + endfacet + facet normal 0.871156 -0.475356 0.122977 + outer loop + vertex -2.028746 0.002298 0.608051 + vertex -1.954668 0.150289 0.655329 + vertex -1.888092 0.217257 0.442575 + endloop + endfacet + facet normal 0.876484 -0.263182 0.403126 + outer loop + vertex -1.937417 0.002298 0.409480 + vertex -2.028746 0.002298 0.608051 + vertex -1.888092 0.217257 0.442575 + endloop + endfacet + facet normal -0.881306 -0.176261 -0.438442 + outer loop + vertex -0.963269 0.382218 1.003234 + vertex -0.887285 0.002298 1.003234 + vertex -0.820777 0.002298 0.869546 + endloop + endfacet + facet normal -0.887549 -0.184303 -0.422243 + outer loop + vertex -0.905672 0.411127 0.869546 + vertex -0.963269 0.382218 1.003234 + vertex -0.820777 0.002298 0.869546 + endloop + endfacet + facet normal -0.599210 -0.689293 -0.407213 + outer loop + vertex -1.087376 0.569084 0.869546 + vertex -0.963269 0.382218 1.003234 + vertex -0.905672 0.411127 0.869546 + endloop + endfacet + facet normal -0.599209 -0.689293 -0.407213 + outer loop + vertex -1.087376 0.569084 0.869546 + vertex -1.120630 0.519014 1.003234 + vertex -0.963269 0.382218 1.003234 + endloop + endfacet + facet normal 0.249579 -0.925593 -0.284583 + outer loop + vertex -1.515773 0.432215 0.939001 + vertex -1.120630 0.519014 1.003234 + vertex -1.087376 0.569084 0.869546 + endloop + endfacet + facet normal 0.257640 -0.933317 -0.250082 + outer loop + vertex -1.515773 0.498724 0.690788 + vertex -1.515773 0.432215 0.939001 + vertex -1.087376 0.569084 0.869546 + endloop + endfacet + facet normal 0.397968 -0.886140 -0.237440 + outer loop + vertex -1.822320 0.370554 0.655329 + vertex -1.515773 0.432215 0.939001 + vertex -1.515773 0.498724 0.690788 + endloop + endfacet + facet normal 0.404057 -0.881292 -0.245075 + outer loop + vertex -1.822320 0.370554 0.655329 + vertex -1.776119 0.322712 0.903542 + vertex -1.515773 0.432215 0.939001 + endloop + endfacet + facet normal 0.894505 -0.365526 -0.257395 + outer loop + vertex -2.028746 0.002298 0.608051 + vertex -1.890735 0.131957 0.903542 + vertex -1.954668 0.150289 0.655329 + endloop + endfacet + facet normal 0.875203 -0.431019 -0.219643 + outer loop + vertex -2.028746 0.002298 0.608051 + vertex -1.945691 0.002298 0.939001 + vertex -1.890735 0.131957 0.903542 + endloop + endfacet + facet normal -0.472085 -0.094417 -0.876482 + outer loop + vertex -0.963269 0.382218 1.003234 + vertex -1.068990 0.002298 1.101103 + vertex -0.887285 0.002298 1.003234 + endloop + endfacet + facet normal -0.399085 -0.123011 -0.908625 + outer loop + vertex -0.963269 0.382218 1.003234 + vertex -1.102244 0.110185 1.101103 + vertex -1.068990 0.002298 1.101103 + endloop + endfacet + facet normal -0.362893 -0.145724 -0.920366 + outer loop + vertex -1.211482 0.382218 1.101103 + vertex -1.102244 0.110185 1.101103 + vertex -0.963269 0.382218 1.003234 + endloop + endfacet + facet normal -0.337955 -0.388762 -0.857117 + outer loop + vertex -1.120630 0.519014 1.003234 + vertex -1.211482 0.382218 1.101103 + vertex -0.963269 0.382218 1.003234 + endloop + endfacet + facet normal 0.260203 -0.670138 -0.695133 + outer loop + vertex -1.515773 0.432215 0.939001 + vertex -1.211482 0.382218 1.101103 + vertex -1.120630 0.519014 1.003234 + endloop + endfacet + facet normal 0.252094 -0.684269 -0.684269 + outer loop + vertex -1.515773 0.432215 0.939001 + vertex -1.515773 0.250511 1.120705 + vertex -1.211482 0.382218 1.101103 + endloop + endfacet + facet normal 0.186157 -0.694746 -0.694747 + outer loop + vertex -1.639879 0.217257 1.120705 + vertex -1.515773 0.250511 1.120705 + vertex -1.515773 0.432215 0.939001 + endloop + endfacet + facet normal 0.380661 -0.715228 -0.586128 + outer loop + vertex -1.776119 0.322712 0.903542 + vertex -1.639879 0.217257 1.120705 + vertex -1.515773 0.432215 0.939001 + endloop + endfacet + facet normal 0.673307 -0.404561 -0.618861 + outer loop + vertex -1.890735 0.131957 0.903542 + vertex -1.639879 0.217257 1.120705 + vertex -1.776119 0.322712 0.903542 + endloop + endfacet + facet normal 0.622430 -0.622430 -0.474513 + outer loop + vertex -1.890735 0.131957 0.903542 + vertex -1.730732 0.126405 1.120705 + vertex -1.639879 0.217257 1.120705 + endloop + endfacet + facet normal 0.784513 -0.210212 -0.583395 + outer loop + vertex -1.763986 0.002298 1.120705 + vertex -1.730732 0.126405 1.120705 + vertex -1.890735 0.131957 0.903542 + endloop + endfacet + facet normal 0.634201 -0.442244 -0.634200 + outer loop + vertex -1.945691 0.002298 0.939001 + vertex -1.763986 0.002298 1.120705 + vertex -1.890735 0.131957 0.903542 + endloop + endfacet + facet normal -0.521937 0.820092 0.234586 + outer loop + vertex -1.860467 0.186705 0.720924 + vertex -1.861866 0.181822 0.734879 + vertex -1.901368 0.159714 0.724277 + endloop + endfacet + facet normal 0.561336 0.037146 -0.826754 + outer loop + vertex -1.860467 0.186705 0.720924 + vertex -1.886257 0.190699 0.703593 + vertex -1.954668 0.150289 0.655329 + endloop + endfacet + facet normal 0.511620 -0.810681 -0.284677 + outer loop + vertex -1.954668 0.150289 0.655329 + vertex -1.901368 0.159714 0.724277 + vertex -1.860467 0.186705 0.720924 + endloop + endfacet + facet normal 0.675249 -0.414224 -0.610292 + outer loop + vertex -1.954668 0.150289 0.655329 + vertex -1.886257 0.190699 0.703593 + vertex -1.862077 0.240275 0.696698 + endloop + endfacet + facet normal 0.672121 -0.413267 -0.614380 + outer loop + vertex -1.849925 0.223467 0.721298 + vertex -1.862077 0.240275 0.696698 + vertex -1.886257 0.190699 0.703593 + endloop + endfacet + facet normal 0.536241 -0.145309 -0.831463 + outer loop + vertex -1.886257 0.190699 0.703593 + vertex -1.860467 0.186705 0.720924 + vertex -1.849925 0.223467 0.721298 + endloop + endfacet + facet normal 0.895058 -0.005534 -0.445915 + outer loop + vertex -1.862077 0.240275 0.696698 + vertex -1.849925 0.223467 0.721298 + vertex -1.835890 0.272417 0.748863 + endloop + endfacet + facet normal 0.914936 -0.290189 -0.280504 + outer loop + vertex -1.835890 0.272417 0.748863 + vertex -1.831853 0.302246 0.731172 + vertex -1.862077 0.240275 0.696698 + endloop + endfacet + facet normal 0.968834 -0.246922 -0.019740 + outer loop + vertex -1.822786 0.320837 0.786330 + vertex -1.835890 0.272417 0.748863 + vertex -1.828249 0.299062 0.790559 + endloop + endfacet + facet normal 0.977088 -0.189592 -0.096715 + outer loop + vertex -1.835890 0.272417 0.748863 + vertex -1.822786 0.320837 0.786330 + vertex -1.831853 0.302246 0.731172 + endloop + endfacet + facet normal 0.997900 -0.059398 0.025814 + outer loop + vertex -1.828830 0.308443 0.834594 + vertex -1.828249 0.299062 0.790559 + vertex -1.829451 0.294871 0.827351 + endloop + endfacet + facet normal 0.970842 -0.231529 0.062124 + outer loop + vertex -1.828830 0.308443 0.834594 + vertex -1.822786 0.320837 0.786330 + vertex -1.828249 0.299062 0.790559 + endloop + endfacet + facet normal 0.980896 -0.124577 0.149411 + outer loop + vertex -1.829451 0.294871 0.827351 + vertex -1.835347 0.274306 0.848914 + vertex -1.828830 0.308443 0.834594 + endloop + endfacet + facet normal 0.919196 -0.010333 0.393664 + outer loop + vertex -1.835347 0.274306 0.848914 + vertex -1.840920 0.283655 0.862173 + vertex -1.828830 0.308443 0.834594 + endloop + endfacet + facet normal 0.793512 -0.287576 0.536319 + outer loop + vertex -1.835347 0.274306 0.848914 + vertex -1.859056 0.246472 0.869068 + vertex -1.840920 0.283655 0.862173 + endloop + endfacet + facet normal 0.804794 -0.326705 0.495551 + outer loop + vertex -1.859056 0.246472 0.869068 + vertex -1.835347 0.274306 0.848914 + vertex -1.842342 0.249915 0.844194 + endloop + endfacet + facet normal 0.715217 -0.572144 0.401392 + outer loop + vertex -1.842342 0.249915 0.844194 + vertex -1.877191 0.209291 0.848384 + vertex -1.859056 0.246472 0.869068 + endloop + endfacet + facet normal 0.653586 -0.502280 0.566163 + outer loop + vertex -1.877191 0.209291 0.848384 + vertex -1.842342 0.249915 0.844194 + vertex -1.849634 0.224481 0.830049 + endloop + endfacet + facet normal 0.553775 -0.818229 0.154385 + outer loop + vertex -1.877191 0.209291 0.848384 + vertex -1.849634 0.224481 0.830049 + vertex -1.851632 0.217521 0.800321 + endloop + endfacet + facet normal 0.600953 -0.777222 0.186495 + outer loop + vertex -1.851632 0.217521 0.800321 + vertex -1.886257 0.190699 0.800120 + vertex -1.877191 0.209291 0.848384 + endloop + endfacet + facet normal 0.597519 -0.772989 0.213209 + outer loop + vertex -1.886257 0.190699 0.800120 + vertex -1.851632 0.217521 0.800321 + vertex -1.855076 0.205509 0.766424 + endloop + endfacet + facet normal 0.664247 -0.676876 0.317198 + outer loop + vertex -1.855076 0.205509 0.766424 + vertex -1.898347 0.165911 0.772540 + vertex -1.886257 0.190699 0.800120 + endloop + endfacet + facet normal 0.657633 -0.663550 0.356679 + outer loop + vertex -1.898347 0.165911 0.772540 + vertex -1.855076 0.205509 0.766424 + vertex -1.861866 0.181822 0.734879 + endloop + endfacet + facet normal 0.469526 -0.878965 0.083462 + outer loop + vertex -1.861866 0.181822 0.734879 + vertex -1.901368 0.159714 0.724277 + vertex -1.898347 0.165911 0.772540 + endloop + endfacet + facet normal 0.373063 -0.913279 -0.163542 + outer loop + vertex -1.954668 0.150289 0.655329 + vertex -1.890735 0.131957 0.903542 + vertex -1.901368 0.159714 0.724277 + endloop + endfacet + facet normal 0.998070 -0.011605 -0.060998 + outer loop + vertex -1.890735 0.131957 0.903542 + vertex -1.898347 0.165911 0.772540 + vertex -1.901368 0.159714 0.724277 + endloop + endfacet + facet normal 0.941414 -0.309132 -0.134823 + outer loop + vertex -1.890735 0.131957 0.903542 + vertex -1.886257 0.190699 0.800120 + vertex -1.898347 0.165911 0.772540 + endloop + endfacet + facet normal 0.967766 -0.234684 -0.091397 + outer loop + vertex -1.890735 0.131957 0.903542 + vertex -1.877191 0.209291 0.848384 + vertex -1.886257 0.190699 0.800120 + endloop + endfacet + facet normal 0.919147 -0.322406 -0.226325 + outer loop + vertex -1.890735 0.131957 0.903542 + vertex -1.859056 0.246472 0.869068 + vertex -1.877191 0.209291 0.848384 + endloop + endfacet + facet normal 0.629824 -0.378435 -0.678313 + outer loop + vertex -1.859056 0.246472 0.869068 + vertex -1.890735 0.131957 0.903542 + vertex -1.776119 0.322712 0.903542 + endloop + endfacet + facet normal 0.655910 -0.434390 -0.617322 + outer loop + vertex -1.776119 0.322712 0.903542 + vertex -1.840920 0.283655 0.862173 + vertex -1.859056 0.246472 0.869068 + endloop + endfacet + facet normal 0.635727 -0.691575 -0.342891 + outer loop + vertex -1.776119 0.322712 0.903542 + vertex -1.828830 0.308443 0.834594 + vertex -1.840920 0.283655 0.862173 + endloop + endfacet + facet normal 0.669934 -0.402535 -0.623822 + outer loop + vertex -1.822320 0.370554 0.655329 + vertex -1.954668 0.150289 0.655329 + vertex -1.862077 0.240275 0.696698 + endloop + endfacet + facet normal 0.919928 -0.341762 -0.192175 + outer loop + vertex -1.822320 0.370554 0.655329 + vertex -1.862077 0.240275 0.696698 + vertex -1.831853 0.302246 0.731172 + endloop + endfacet + facet normal 0.970270 -0.227405 -0.082850 + outer loop + vertex -1.822320 0.370554 0.655329 + vertex -1.831853 0.302246 0.731172 + vertex -1.822786 0.320837 0.786330 + endloop + endfacet + facet normal 0.549645 -0.795334 -0.255606 + outer loop + vertex -1.828830 0.308443 0.834594 + vertex -1.776119 0.322712 0.903542 + vertex -1.822320 0.370554 0.655329 + endloop + endfacet + facet normal -0.685612 -0.679787 -0.260433 + outer loop + vertex -1.822320 0.370554 0.655329 + vertex -1.828830 0.308443 0.834594 + vertex -1.822786 0.320837 0.786330 + endloop + endfacet + facet normal 0.097717 0.666160 0.739380 + outer loop + vertex 0.090069 -0.167229 -0.494952 + vertex -0.233263 -0.437810 -0.208435 + vertex -0.584930 -0.284506 -0.300080 + endloop + endfacet + facet normal -0.169718 0.339002 0.925350 + outer loop + vertex 0.460438 -0.389086 -0.345746 + vertex 0.090069 -0.167229 -0.494952 + vertex 0.457304 0.000000 -0.488862 + endloop + endfacet + facet normal 0.099872 0.664684 0.740419 + outer loop + vertex 0.460438 -0.389086 -0.345746 + vertex -0.233263 -0.437810 -0.208435 + vertex 0.090069 -0.167229 -0.494952 + endloop + endfacet + facet normal 0.220944 0.280460 0.934091 + outer loop + vertex -0.610705 0.000000 -0.379406 + vertex 0.090069 -0.167229 -0.494952 + vertex -0.584930 -0.284506 -0.300080 + endloop + endfacet + facet normal 0.220944 -0.280460 0.934091 + outer loop + vertex 0.090069 0.167229 -0.494952 + vertex -0.610705 0.000000 -0.379406 + vertex -0.584930 0.284506 -0.300080 + endloop + endfacet + facet normal -0.016582 0.000000 0.999862 + outer loop + vertex 0.090069 -0.167229 -0.494952 + vertex 0.090069 0.167229 -0.494952 + vertex 0.457304 0.000000 -0.488862 + endloop + endfacet + facet normal 0.162687 0.000000 0.986678 + outer loop + vertex 0.090069 0.167229 -0.494952 + vertex 0.090069 -0.167229 -0.494952 + vertex -0.610705 0.000000 -0.379406 + endloop + endfacet + facet normal -0.190478 0.247609 0.949951 + outer loop + vertex -1.141375 -0.292008 -0.409700 + vertex -0.610705 0.000000 -0.379406 + vertex -0.584930 -0.284506 -0.300080 + endloop + endfacet + facet normal 0.699707 0.000000 0.714430 + outer loop + vertex -1.141375 0.292008 -0.409700 + vertex -1.141375 -0.292008 -0.409700 + vertex -1.418457 0.000000 -0.138327 + endloop + endfacet + facet normal -0.190478 -0.247609 0.949951 + outer loop + vertex -0.610705 0.000000 -0.379406 + vertex -1.141375 0.292008 -0.409700 + vertex -0.584930 0.284506 -0.300080 + endloop + endfacet + facet normal -0.056992 0.000000 0.998375 + outer loop + vertex -1.141375 0.292008 -0.409700 + vertex -0.610705 0.000000 -0.379406 + vertex -1.141375 -0.292008 -0.409700 + endloop + endfacet + facet normal 0.802316 -0.263622 0.535530 + outer loop + vertex -1.338460 0.472478 -0.025593 + vertex -1.141375 0.292008 -0.409700 + vertex -1.418457 0.000000 -0.138327 + endloop + endfacet + facet normal -0.193045 -0.149942 0.969666 + outer loop + vertex -1.141375 0.292008 -0.409700 + vertex -0.903297 0.764486 -0.289242 + vertex -0.584930 0.284506 -0.300080 + endloop + endfacet + facet normal 0.667307 -0.481182 0.568477 + outer loop + vertex -0.903297 0.764486 -0.289242 + vertex -1.141375 0.292008 -0.409700 + vertex -1.338460 0.472478 -0.025593 + endloop + endfacet + facet normal 0.097717 -0.666160 0.739380 + outer loop + vertex -0.233263 0.437810 -0.208435 + vertex 0.090069 0.167229 -0.494952 + vertex -0.584930 0.284506 -0.300080 + endloop + endfacet + facet normal -0.169718 -0.339002 0.925350 + outer loop + vertex 0.090069 0.167229 -0.494952 + vertex 0.460438 0.389086 -0.345746 + vertex 0.457304 0.000000 -0.488862 + endloop + endfacet + facet normal 0.099872 -0.664684 0.740419 + outer loop + vertex 0.460438 0.389086 -0.345746 + vertex 0.090069 0.167229 -0.494952 + vertex -0.233263 0.437810 -0.208435 + endloop + endfacet + facet normal -0.193045 0.149942 0.969666 + outer loop + vertex -0.903297 -0.764486 -0.289242 + vertex -1.141375 -0.292008 -0.409700 + vertex -0.584930 -0.284506 -0.300080 + endloop + endfacet + facet normal 0.802316 0.263622 0.535530 + outer loop + vertex -1.141375 -0.292008 -0.409700 + vertex -1.338460 -0.472478 -0.025593 + vertex -1.418457 0.000000 -0.138327 + endloop + endfacet + facet normal 0.667307 0.481182 0.568476 + outer loop + vertex -1.338460 -0.472478 -0.025593 + vertex -1.141375 -0.292008 -0.409700 + vertex -0.903297 -0.764486 -0.289242 + endloop + endfacet + facet normal -0.188931 0.058235 -0.980262 + outer loop + vertex -1.515773 0.000460 1.187214 + vertex -1.102244 -0.107427 1.101103 + vertex -1.068990 0.000460 1.101103 + endloop + endfacet + facet normal -0.184716 0.074175 -0.979989 + outer loop + vertex -1.515773 0.000460 1.187214 + vertex -1.211482 -0.379460 1.101103 + vertex -1.102244 -0.107427 1.101103 + endloop + endfacet + facet normal -0.069184 0.258199 0.963611 + outer loop + vertex -1.515773 0.000460 0.194362 + vertex -1.391667 -0.214499 0.260870 + vertex -1.515773 -0.247753 0.260870 + endloop + endfacet + facet normal 0.049739 0.258499 -0.964730 + outer loop + vertex -1.515773 0.000460 1.187214 + vertex -1.515773 -0.247753 1.120705 + vertex -1.211482 -0.379460 1.101103 + endloop + endfacet + facet normal 0.865196 0.129781 0.484348 + outer loop + vertex -1.515773 0.000460 0.194362 + vertex -1.515773 -0.247753 0.260870 + vertex -1.590238 -0.214499 0.384977 + endloop + endfacet + facet normal 0.069184 0.258199 -0.963611 + outer loop + vertex -1.515773 0.000460 1.187214 + vertex -1.639879 -0.214499 1.120705 + vertex -1.515773 -0.247753 1.120705 + endloop + endfacet + facet normal 0.202386 0.609559 0.766471 + outer loop + vertex -1.515773 0.000460 0.194362 + vertex -1.590238 -0.214499 0.384977 + vertex -1.681090 -0.123647 0.336713 + endloop + endfacet + facet normal 0.189015 0.189015 -0.963611 + outer loop + vertex -1.515773 0.000460 1.187214 + vertex -1.730732 -0.123647 1.120705 + vertex -1.639879 -0.214499 1.120705 + endloop + endfacet + facet normal 0.575660 0.154247 0.803009 + outer loop + vertex -1.515773 0.000460 0.194362 + vertex -1.681090 -0.123647 0.336713 + vertex -1.714344 0.000460 0.336713 + endloop + endfacet + facet normal 0.258199 0.069185 -0.963611 + outer loop + vertex -1.515773 0.000460 1.187214 + vertex -1.763986 0.000460 1.120705 + vertex -1.730732 -0.123647 1.120705 + endloop + endfacet + facet normal 0.202414 0.788103 0.581311 + outer loop + vertex -1.161840 -0.407553 0.442575 + vertex -1.300815 -0.371860 0.442575 + vertex -1.391667 -0.214499 0.260870 + endloop + endfacet + facet normal -0.085783 0.731518 0.676405 + outer loop + vertex -1.391667 -0.214499 0.260870 + vertex -1.300815 -0.371860 0.442575 + vertex -1.515773 -0.486322 0.539102 + endloop + endfacet + facet normal -0.199329 0.743908 0.637862 + outer loop + vertex -1.391667 -0.214499 0.260870 + vertex -1.515773 -0.486322 0.539102 + vertex -1.515773 -0.247753 0.260870 + endloop + endfacet + facet normal 0.818344 0.436300 0.374105 + outer loop + vertex -1.515773 -0.247753 0.260870 + vertex -1.515773 -0.486322 0.539102 + vertex -1.590238 -0.214499 0.384977 + endloop + endfacet + facet normal -0.151084 0.455931 0.877098 + outer loop + vertex -1.515773 -0.486322 0.539102 + vertex -1.730732 -0.371860 0.442575 + vertex -1.590238 -0.214499 0.384977 + endloop + endfacet + facet normal 0.186527 0.186527 0.964580 + outer loop + vertex -1.590238 -0.214499 0.384977 + vertex -1.730732 -0.371860 0.442575 + vertex -1.888092 -0.214499 0.442575 + endloop + endfacet + facet normal 0.154704 0.579696 0.800012 + outer loop + vertex -1.590238 -0.214499 0.384977 + vertex -1.888092 -0.214499 0.442575 + vertex -1.681090 -0.123647 0.336713 + endloop + endfacet + facet normal 0.413534 0.110806 0.903721 + outer loop + vertex -1.681090 -0.123647 0.336713 + vertex -1.888092 -0.214499 0.442575 + vertex -1.714344 0.000460 0.336713 + endloop + endfacet + facet normal 0.303035 0.212556 0.928972 + outer loop + vertex -1.888092 -0.214499 0.442575 + vertex -1.937417 0.000460 0.409480 + vertex -1.714344 0.000460 0.336713 + endloop + endfacet + facet normal -0.839147 0.156274 0.520972 + outer loop + vertex -1.085856 0.000460 0.442575 + vertex -0.820777 0.000460 0.869546 + vertex -1.161840 -0.407553 0.442575 + endloop + endfacet + facet normal -0.844083 0.175277 0.506756 + outer loop + vertex -0.820777 0.000460 0.869546 + vertex -0.905672 -0.408369 0.869546 + vertex -1.161840 -0.407553 0.442575 + endloop + endfacet + facet normal -0.610179 0.701911 0.367427 + outer loop + vertex -1.161840 -0.407553 0.442575 + vertex -0.905672 -0.408369 0.869546 + vertex -1.087376 -0.566326 0.869546 + endloop + endfacet + facet normal 0.237148 0.923342 0.301994 + outer loop + vertex -1.161840 -0.407553 0.442575 + vertex -1.087376 -0.566326 0.869546 + vertex -1.300815 -0.371860 0.442575 + endloop + endfacet + facet normal -0.224840 0.839457 0.494731 + outer loop + vertex -1.300815 -0.371860 0.442575 + vertex -1.087376 -0.566326 0.869546 + vertex -1.515773 -0.486322 0.539102 + endloop + endfacet + facet normal 0.136154 0.988692 0.062858 + outer loop + vertex -1.087376 -0.566326 0.869546 + vertex -1.515773 -0.495966 0.690788 + vertex -1.515773 -0.486322 0.539102 + endloop + endfacet + facet normal 0.379295 0.923411 0.058708 + outer loop + vertex -1.515773 -0.486322 0.539102 + vertex -1.515773 -0.495966 0.690788 + vertex -1.822320 -0.367796 0.655329 + endloop + endfacet + facet normal 0.407738 0.899263 0.158352 + outer loop + vertex -1.515773 -0.486322 0.539102 + vertex -1.822320 -0.367796 0.655329 + vertex -1.730732 -0.371860 0.442575 + endloop + endfacet + facet normal 0.678963 0.678963 0.279318 + outer loop + vertex -1.730732 -0.371860 0.442575 + vertex -1.822320 -0.367796 0.655329 + vertex -1.888092 -0.214499 0.442575 + endloop + endfacet + facet normal 0.852383 0.512161 0.105518 + outer loop + vertex -1.822320 -0.367796 0.655329 + vertex -1.954668 -0.147531 0.655329 + vertex -1.888092 -0.214499 0.442575 + endloop + endfacet + facet normal 0.871156 0.475356 0.122977 + outer loop + vertex -1.888092 -0.214499 0.442575 + vertex -1.954668 -0.147531 0.655329 + vertex -2.028746 0.000460 0.608051 + endloop + endfacet + facet normal 0.876484 0.263183 0.403126 + outer loop + vertex -1.888092 -0.214499 0.442575 + vertex -2.028746 0.000460 0.608051 + vertex -1.937417 0.000460 0.409480 + endloop + endfacet + facet normal -0.881306 0.176261 -0.438442 + outer loop + vertex -0.820777 0.000460 0.869546 + vertex -0.887285 0.000460 1.003234 + vertex -0.963269 -0.379460 1.003234 + endloop + endfacet + facet normal -0.887549 0.184303 -0.422243 + outer loop + vertex -0.820777 0.000460 0.869546 + vertex -0.963269 -0.379460 1.003234 + vertex -0.905672 -0.408369 0.869546 + endloop + endfacet + facet normal -0.599210 0.689293 -0.407213 + outer loop + vertex -0.905672 -0.408369 0.869546 + vertex -0.963269 -0.379460 1.003234 + vertex -1.087376 -0.566326 0.869546 + endloop + endfacet + facet normal -0.599209 0.689293 -0.407214 + outer loop + vertex -0.963269 -0.379460 1.003234 + vertex -1.120630 -0.516256 1.003234 + vertex -1.087376 -0.566326 0.869546 + endloop + endfacet + facet normal 0.249579 0.925593 -0.284584 + outer loop + vertex -1.087376 -0.566326 0.869546 + vertex -1.120630 -0.516256 1.003234 + vertex -1.515773 -0.429457 0.939001 + endloop + endfacet + facet normal 0.257641 0.933317 -0.250082 + outer loop + vertex -1.087376 -0.566326 0.869546 + vertex -1.515773 -0.429457 0.939001 + vertex -1.515773 -0.495966 0.690788 + endloop + endfacet + facet normal 0.397968 0.886140 -0.237441 + outer loop + vertex -1.515773 -0.495966 0.690788 + vertex -1.515773 -0.429457 0.939001 + vertex -1.822320 -0.367796 0.655329 + endloop + endfacet + facet normal 0.404057 0.881292 -0.245075 + outer loop + vertex -1.515773 -0.429457 0.939001 + vertex -1.776119 -0.319954 0.903542 + vertex -1.822320 -0.367796 0.655329 + endloop + endfacet + facet normal 0.894505 0.365526 -0.257395 + outer loop + vertex -1.954668 -0.147531 0.655329 + vertex -1.890735 -0.129199 0.903542 + vertex -2.028746 0.000460 0.608051 + endloop + endfacet + facet normal 0.875203 0.431019 -0.219643 + outer loop + vertex -1.890735 -0.129199 0.903542 + vertex -1.945691 0.000460 0.939001 + vertex -2.028746 0.000460 0.608051 + endloop + endfacet + facet normal -0.472085 0.094417 -0.876482 + outer loop + vertex -0.887285 0.000460 1.003234 + vertex -1.068990 0.000460 1.101103 + vertex -0.963269 -0.379460 1.003234 + endloop + endfacet + facet normal -0.399085 0.123011 -0.908625 + outer loop + vertex -1.068990 0.000460 1.101103 + vertex -1.102244 -0.107427 1.101103 + vertex -0.963269 -0.379460 1.003234 + endloop + endfacet + facet normal -0.362893 0.145724 -0.920366 + outer loop + vertex -0.963269 -0.379460 1.003234 + vertex -1.102244 -0.107427 1.101103 + vertex -1.211482 -0.379460 1.101103 + endloop + endfacet + facet normal -0.337955 0.388762 -0.857118 + outer loop + vertex -0.963269 -0.379460 1.003234 + vertex -1.211482 -0.379460 1.101103 + vertex -1.120630 -0.516256 1.003234 + endloop + endfacet + facet normal 0.260203 0.670138 -0.695133 + outer loop + vertex -1.120630 -0.516256 1.003234 + vertex -1.211482 -0.379460 1.101103 + vertex -1.515773 -0.429457 0.939001 + endloop + endfacet + facet normal 0.252094 0.684269 -0.684269 + outer loop + vertex -1.211482 -0.379460 1.101103 + vertex -1.515773 -0.247753 1.120705 + vertex -1.515773 -0.429457 0.939001 + endloop + endfacet + facet normal 0.186156 0.694746 -0.694747 + outer loop + vertex -1.515773 -0.429457 0.939001 + vertex -1.515773 -0.247753 1.120705 + vertex -1.639879 -0.214499 1.120705 + endloop + endfacet + facet normal 0.380661 0.715228 -0.586128 + outer loop + vertex -1.515773 -0.429457 0.939001 + vertex -1.639879 -0.214499 1.120705 + vertex -1.776119 -0.319954 0.903542 + endloop + endfacet + facet normal 0.673307 0.404561 -0.618861 + outer loop + vertex -1.776119 -0.319954 0.903542 + vertex -1.639879 -0.214499 1.120705 + vertex -1.890735 -0.129199 0.903542 + endloop + endfacet + facet normal 0.622430 0.622430 -0.474513 + outer loop + vertex -1.639879 -0.214499 1.120705 + vertex -1.730732 -0.123647 1.120705 + vertex -1.890735 -0.129199 0.903542 + endloop + endfacet + facet normal 0.784513 0.210211 -0.583395 + outer loop + vertex -1.890735 -0.129199 0.903542 + vertex -1.730732 -0.123647 1.120705 + vertex -1.763986 0.000460 1.120705 + endloop + endfacet + facet normal 0.634201 0.442244 -0.634200 + outer loop + vertex -1.890735 -0.129199 0.903542 + vertex -1.763986 0.000460 1.120705 + vertex -1.945691 0.000460 0.939001 + endloop + endfacet + facet normal -0.521937 -0.820093 0.234582 + outer loop + vertex -1.901368 -0.156956 0.724277 + vertex -1.861866 -0.179064 0.734879 + vertex -1.860467 -0.183947 0.720924 + endloop + endfacet + facet normal 0.561336 -0.037146 -0.826754 + outer loop + vertex -1.954668 -0.147531 0.655329 + vertex -1.886257 -0.187942 0.703593 + vertex -1.860467 -0.183947 0.720924 + endloop + endfacet + facet normal 0.511620 0.810681 -0.284676 + outer loop + vertex -1.860467 -0.183947 0.720924 + vertex -1.901368 -0.156956 0.724277 + vertex -1.954668 -0.147531 0.655329 + endloop + endfacet + facet normal 0.675249 0.414225 -0.610292 + outer loop + vertex -1.862077 -0.237518 0.696698 + vertex -1.886257 -0.187942 0.703593 + vertex -1.954668 -0.147531 0.655329 + endloop + endfacet + facet normal 0.672121 0.413267 -0.614381 + outer loop + vertex -1.886257 -0.187942 0.703593 + vertex -1.862077 -0.237518 0.696698 + vertex -1.849925 -0.220709 0.721298 + endloop + endfacet + facet normal 0.536241 0.145310 -0.831463 + outer loop + vertex -1.849925 -0.220709 0.721298 + vertex -1.860467 -0.183947 0.720924 + vertex -1.886257 -0.187942 0.703593 + endloop + endfacet + facet normal 0.895058 0.005534 -0.445915 + outer loop + vertex -1.835890 -0.269659 0.748863 + vertex -1.849925 -0.220709 0.721298 + vertex -1.862077 -0.237518 0.696698 + endloop + endfacet + facet normal 0.914936 0.290190 -0.280504 + outer loop + vertex -1.862077 -0.237518 0.696698 + vertex -1.831853 -0.299488 0.731172 + vertex -1.835890 -0.269659 0.748863 + endloop + endfacet + facet normal 0.968834 0.246923 -0.019739 + outer loop + vertex -1.828249 -0.296305 0.790559 + vertex -1.835890 -0.269659 0.748863 + vertex -1.822786 -0.318079 0.786330 + endloop + endfacet + facet normal 0.977088 0.189592 -0.096715 + outer loop + vertex -1.831853 -0.299488 0.731172 + vertex -1.822786 -0.318079 0.786330 + vertex -1.835890 -0.269659 0.748863 + endloop + endfacet + facet normal 0.997901 0.059398 0.025814 + outer loop + vertex -1.829451 -0.292113 0.827351 + vertex -1.828249 -0.296305 0.790559 + vertex -1.828830 -0.305685 0.834594 + endloop + endfacet + facet normal 0.970842 0.231530 0.062124 + outer loop + vertex -1.828249 -0.296305 0.790559 + vertex -1.822786 -0.318079 0.786330 + vertex -1.828830 -0.305685 0.834594 + endloop + endfacet + facet normal 0.980896 0.124577 0.149412 + outer loop + vertex -1.828830 -0.305685 0.834594 + vertex -1.835347 -0.271548 0.848914 + vertex -1.829451 -0.292113 0.827351 + endloop + endfacet + facet normal 0.919196 0.010333 0.393664 + outer loop + vertex -1.828830 -0.305685 0.834594 + vertex -1.840920 -0.280897 0.862173 + vertex -1.835347 -0.271548 0.848914 + endloop + endfacet + facet normal 0.793512 0.287575 0.536319 + outer loop + vertex -1.840920 -0.280897 0.862173 + vertex -1.859056 -0.243714 0.869068 + vertex -1.835347 -0.271548 0.848914 + endloop + endfacet + facet normal 0.804794 0.326706 0.495550 + outer loop + vertex -1.842342 -0.247157 0.844194 + vertex -1.835347 -0.271548 0.848914 + vertex -1.859056 -0.243714 0.869068 + endloop + endfacet + facet normal 0.715218 0.572144 0.401390 + outer loop + vertex -1.859056 -0.243714 0.869068 + vertex -1.877191 -0.206533 0.848384 + vertex -1.842342 -0.247157 0.844194 + endloop + endfacet + facet normal 0.653585 0.502279 0.566165 + outer loop + vertex -1.849634 -0.221723 0.830049 + vertex -1.842342 -0.247157 0.844194 + vertex -1.877191 -0.206533 0.848384 + endloop + endfacet + facet normal 0.553774 0.818230 0.154383 + outer loop + vertex -1.851632 -0.214763 0.800321 + vertex -1.849634 -0.221723 0.830049 + vertex -1.877191 -0.206533 0.848384 + endloop + endfacet + facet normal 0.600953 0.777223 0.186494 + outer loop + vertex -1.877191 -0.206533 0.848384 + vertex -1.886257 -0.187942 0.800120 + vertex -1.851632 -0.214763 0.800321 + endloop + endfacet + facet normal 0.597519 0.772990 0.213208 + outer loop + vertex -1.855076 -0.202751 0.766424 + vertex -1.851632 -0.214763 0.800321 + vertex -1.886257 -0.187942 0.800120 + endloop + endfacet + facet normal 0.664247 0.676876 0.317198 + outer loop + vertex -1.886257 -0.187942 0.800120 + vertex -1.898347 -0.163153 0.772540 + vertex -1.855076 -0.202751 0.766424 + endloop + endfacet + facet normal 0.657633 0.663550 0.356678 + outer loop + vertex -1.861866 -0.179064 0.734879 + vertex -1.855076 -0.202751 0.766424 + vertex -1.898347 -0.163153 0.772540 + endloop + endfacet + facet normal 0.469526 0.878965 0.083462 + outer loop + vertex -1.898347 -0.163153 0.772540 + vertex -1.901368 -0.156956 0.724277 + vertex -1.861866 -0.179064 0.734879 + endloop + endfacet + facet normal 0.373063 0.913279 -0.163542 + outer loop + vertex -1.901368 -0.156956 0.724277 + vertex -1.890735 -0.129199 0.903542 + vertex -1.954668 -0.147531 0.655329 + endloop + endfacet + facet normal 0.998070 0.011605 -0.060998 + outer loop + vertex -1.901368 -0.156956 0.724277 + vertex -1.898347 -0.163153 0.772540 + vertex -1.890735 -0.129199 0.903542 + endloop + endfacet + facet normal 0.941414 0.309131 -0.134823 + outer loop + vertex -1.898347 -0.163153 0.772540 + vertex -1.886257 -0.187942 0.800120 + vertex -1.890735 -0.129199 0.903542 + endloop + endfacet + facet normal 0.967765 0.234684 -0.091397 + outer loop + vertex -1.886257 -0.187942 0.800120 + vertex -1.877191 -0.206533 0.848384 + vertex -1.890735 -0.129199 0.903542 + endloop + endfacet + facet normal 0.919147 0.322407 -0.226325 + outer loop + vertex -1.877191 -0.206533 0.848384 + vertex -1.859056 -0.243714 0.869068 + vertex -1.890735 -0.129199 0.903542 + endloop + endfacet + facet normal 0.629825 0.378435 -0.678313 + outer loop + vertex -1.776119 -0.319954 0.903542 + vertex -1.890735 -0.129199 0.903542 + vertex -1.859056 -0.243714 0.869068 + endloop + endfacet + facet normal 0.655910 0.434389 -0.617323 + outer loop + vertex -1.859056 -0.243714 0.869068 + vertex -1.840920 -0.280897 0.862173 + vertex -1.776119 -0.319954 0.903542 + endloop + endfacet + facet normal 0.635727 0.691576 -0.342891 + outer loop + vertex -1.840920 -0.280897 0.862173 + vertex -1.828830 -0.305685 0.834594 + vertex -1.776119 -0.319954 0.903542 + endloop + endfacet + facet normal 0.669934 0.402535 -0.623822 + outer loop + vertex -1.862077 -0.237518 0.696698 + vertex -1.954668 -0.147531 0.655329 + vertex -1.822320 -0.367796 0.655329 + endloop + endfacet + facet normal 0.919928 0.341762 -0.192175 + outer loop + vertex -1.831853 -0.299488 0.731172 + vertex -1.862077 -0.237518 0.696698 + vertex -1.822320 -0.367796 0.655329 + endloop + endfacet + facet normal 0.970270 0.227404 -0.082849 + outer loop + vertex -1.822786 -0.318079 0.786330 + vertex -1.831853 -0.299488 0.731172 + vertex -1.822320 -0.367796 0.655329 + endloop + endfacet + facet normal 0.549645 0.795334 -0.255606 + outer loop + vertex -1.822320 -0.367796 0.655329 + vertex -1.776119 -0.319954 0.903542 + vertex -1.828830 -0.305685 0.834594 + endloop + endfacet + facet normal -0.685613 0.679786 -0.260433 + outer loop + vertex -1.822786 -0.318079 0.786330 + vertex -1.828830 -0.305685 0.834594 + vertex -1.822320 -0.367796 0.655329 + endloop + endfacet + facet normal 0.000000 0.000000 0.000000 + outer loop + vertex -2.036655 -0.418328 -0.397620 + vertex -2.036655 -0.418328 -0.397620 + vertex -2.036655 -0.418328 -0.397620 + endloop + endfacet + facet normal -0.891946 -0.305187 -0.333607 + outer loop + vertex -1.818374 -0.186279 0.356358 + vertex -1.880028 -0.165751 0.502419 + vertex -1.816350 -0.275852 0.432888 + endloop + endfacet + facet normal -0.885286 0.462164 0.051707 + outer loop + vertex -2.036655 -0.418328 -0.397620 + vertex -1.920747 -0.268264 0.245554 + vertex -1.956937 -0.340858 0.274802 + endloop + endfacet + facet normal 0.000000 0.000000 0.000000 + outer loop + vertex -2.036655 -0.418328 -0.397620 + vertex -1.956937 -0.340858 0.274802 + vertex -2.036655 -0.418328 -0.397620 + endloop + endfacet + facet normal -0.782591 0.524956 0.334623 + outer loop + vertex -1.920747 -0.268264 0.245554 + vertex -1.818374 -0.186279 0.356358 + vertex -1.956937 -0.340858 0.274802 + endloop + endfacet + facet normal -0.758139 0.413598 0.504145 + outer loop + vertex -1.818374 -0.186279 0.356358 + vertex -1.816350 -0.275852 0.432888 + vertex -1.956937 -0.340858 0.274802 + endloop + endfacet + facet normal 0.000000 0.000000 0.000000 + outer loop + vertex -2.036655 -0.418328 -0.397620 + vertex -2.036655 -0.418328 -0.397620 + vertex -2.036655 -0.418328 -0.397620 + endloop + endfacet + facet normal -0.891943 -0.305171 -0.333630 + outer loop + vertex -1.816350 -0.275852 0.432888 + vertex -1.880028 -0.165751 0.502419 + vertex -1.862278 -0.282517 0.561774 + endloop + endfacet + facet normal 0.000000 0.000000 0.000000 + outer loop + vertex -2.036655 -0.418328 -0.397620 + vertex -1.956937 -0.340858 0.274802 + vertex -2.036655 -0.418328 -0.397620 + endloop + endfacet + facet normal -0.239093 0.967433 -0.083113 + outer loop + vertex -1.956937 -0.340858 0.274802 + vertex -2.051718 -0.363382 0.285284 + vertex -2.036655 -0.418328 -0.397620 + endloop + endfacet + facet normal -0.347357 0.934693 -0.075444 + outer loop + vertex -1.956937 -0.340858 0.274802 + vertex -1.816350 -0.275852 0.432888 + vertex -1.862278 -0.282517 0.561774 + endloop + endfacet + facet normal -0.241774 0.963362 -0.116099 + outer loop + vertex -1.956937 -0.340858 0.274802 + vertex -1.862278 -0.282517 0.561774 + vertex -2.051718 -0.363382 0.285284 + endloop + endfacet + facet normal 0.000000 0.000000 0.000000 + outer loop + vertex -2.036655 -0.418328 -0.397620 + vertex -2.036655 -0.418328 -0.397620 + vertex -2.036655 -0.418328 -0.397620 + endloop + endfacet + facet normal -0.891950 -0.305165 -0.333615 + outer loop + vertex -1.862278 -0.282517 0.561774 + vertex -1.880028 -0.165751 0.502419 + vertex -1.921571 -0.201255 0.645966 + endloop + endfacet + facet normal 0.485254 0.872347 -0.059485 + outer loop + vertex -2.036655 -0.418328 -0.397620 + vertex -2.051718 -0.363382 0.285284 + vertex -2.133715 -0.318873 0.269109 + endloop + endfacet + facet normal 0.000000 0.000000 0.000000 + outer loop + vertex -2.036655 -0.418328 -0.397620 + vertex -2.133715 -0.318873 0.269109 + vertex -2.036655 -0.418328 -0.397620 + endloop + endfacet + facet normal 0.482345 0.694665 -0.533651 + outer loop + vertex -2.051718 -0.363382 0.285284 + vertex -1.862278 -0.282517 0.561774 + vertex -2.133715 -0.318873 0.269109 + endloop + endfacet + facet normal 0.403897 0.783665 -0.471949 + outer loop + vertex -1.862278 -0.282517 0.561774 + vertex -1.921571 -0.201255 0.645966 + vertex -2.133715 -0.318873 0.269109 + endloop + endfacet + facet normal 0.000000 0.000000 0.000000 + outer loop + vertex -2.036655 -0.418328 -0.397620 + vertex -2.036655 -0.418328 -0.397620 + vertex -2.036655 -0.418328 -0.397620 + endloop + endfacet + facet normal -0.891947 -0.305175 -0.333616 + outer loop + vertex -1.921571 -0.201255 0.645966 + vertex -1.880028 -0.165751 0.502419 + vertex -1.949582 -0.093257 0.622065 + endloop + endfacet + facet normal 0.000000 0.000000 0.000000 + outer loop + vertex -2.036655 -0.418328 -0.397620 + vertex -2.133715 -0.318873 0.269109 + vertex -2.036655 -0.418328 -0.397620 + endloop + endfacet + facet normal 0.982346 0.141966 0.121830 + outer loop + vertex -2.133715 -0.318873 0.269109 + vertex -2.141189 -0.240848 0.238457 + vertex -2.036655 -0.418328 -0.397620 + endloop + endfacet + facet normal 0.851677 0.107381 -0.512947 + outer loop + vertex -2.133715 -0.318873 0.269109 + vertex -1.921571 -0.201255 0.645966 + vertex -1.949582 -0.093257 0.622065 + endloop + endfacet + facet normal 0.903622 -0.078834 -0.421014 + outer loop + vertex -2.133715 -0.318873 0.269109 + vertex -1.949582 -0.093257 0.622065 + vertex -2.141189 -0.240848 0.238457 + endloop + endfacet + facet normal 0.000000 0.000000 0.000000 + outer loop + vertex -2.036655 -0.418328 -0.397620 + vertex -2.036655 -0.418328 -0.397620 + vertex -2.036655 -0.418328 -0.397620 + endloop + endfacet + facet normal -0.891946 -0.305182 -0.333612 + outer loop + vertex -1.949582 -0.093257 0.622065 + vertex -1.880028 -0.165751 0.502419 + vertex -1.925218 -0.039849 0.508068 + endloop + endfacet + facet normal 0.618494 -0.724668 0.303843 + outer loop + vertex -2.036655 -0.418328 -0.397620 + vertex -2.141189 -0.240848 0.238457 + vertex -2.068509 -0.188062 0.216406 + endloop + endfacet + facet normal 0.000000 0.000000 0.000000 + outer loop + vertex -2.036655 -0.418328 -0.397620 + vertex -2.068509 -0.188062 0.216406 + vertex -2.036655 -0.418328 -0.397620 + endloop + endfacet + facet normal 0.590631 -0.806795 0.015399 + outer loop + vertex -2.141189 -0.240848 0.238457 + vertex -1.949582 -0.093257 0.622065 + vertex -2.068509 -0.188062 0.216406 + endloop + endfacet + facet normal 0.806724 -0.582335 -0.100411 + outer loop + vertex -1.949582 -0.093257 0.622065 + vertex -1.925218 -0.039849 0.508068 + vertex -2.068509 -0.188062 0.216406 + endloop + endfacet + facet normal 0.000000 0.000000 0.000000 + outer loop + vertex -2.036655 -0.418328 -0.397620 + vertex -2.036655 -0.418328 -0.397620 + vertex -2.036655 -0.418328 -0.397620 + endloop + endfacet + facet normal -0.891950 -0.305184 -0.333600 + outer loop + vertex -1.925218 -0.039849 0.508068 + vertex -1.880028 -0.165751 0.502419 + vertex -1.866827 -0.081247 0.389819 + endloop + endfacet + facet normal 0.000000 0.000000 0.000000 + outer loop + vertex -2.036655 -0.418328 -0.397620 + vertex -2.068509 -0.188062 0.216406 + vertex -2.036655 -0.418328 -0.397620 + endloop + endfacet + facet normal -0.126801 -0.930913 0.342523 + outer loop + vertex -2.068509 -0.188062 0.216406 + vertex -1.970402 -0.200263 0.219567 + vertex -2.036655 -0.418328 -0.397620 + endloop + endfacet + facet normal 0.145877 -0.909062 0.390290 + outer loop + vertex -2.068509 -0.188062 0.216406 + vertex -1.925218 -0.039849 0.508068 + vertex -1.866827 -0.081247 0.389819 + endloop + endfacet + facet normal -0.116741 -0.779242 0.615755 + outer loop + vertex -2.068509 -0.188062 0.216406 + vertex -1.866827 -0.081247 0.389819 + vertex -1.970402 -0.200263 0.219567 + endloop + endfacet + facet normal 0.000000 0.000000 0.000000 + outer loop + vertex -2.036655 -0.418328 -0.397620 + vertex -2.036655 -0.418328 -0.397620 + vertex -2.036655 -0.418328 -0.397620 + endloop + endfacet + facet normal -0.891944 -0.305192 -0.333606 + outer loop + vertex -1.866827 -0.081247 0.389819 + vertex -1.880028 -0.165751 0.502419 + vertex -1.818374 -0.186279 0.356358 + endloop + endfacet + facet normal -0.824144 -0.500415 0.265276 + outer loop + vertex -2.036655 -0.418328 -0.397620 + vertex -1.970402 -0.200263 0.219567 + vertex -1.920747 -0.268264 0.245554 + endloop + endfacet + facet normal 0.000000 0.000000 0.000000 + outer loop + vertex -2.036655 -0.418328 -0.397620 + vertex -1.920747 -0.268264 0.245554 + vertex -2.036655 -0.418328 -0.397620 + endloop + endfacet + facet normal -0.719098 -0.282447 0.634918 + outer loop + vertex -1.970402 -0.200263 0.219567 + vertex -1.866827 -0.081247 0.389819 + vertex -1.920747 -0.268264 0.245554 + endloop + endfacet + facet normal -0.460383 -0.455179 0.762141 + outer loop + vertex -1.866827 -0.081247 0.389819 + vertex -1.818374 -0.186279 0.356358 + vertex -1.920747 -0.268264 0.245554 + endloop + endfacet + facet normal 0.000000 0.000000 0.000000 + outer loop + vertex -2.042185 -0.773436 0.148903 + vertex -2.042185 -0.773436 0.148903 + vertex -2.042185 -0.773436 0.148903 + endloop + endfacet + facet normal -0.417208 -0.680009 -0.602931 + outer loop + vertex -1.690046 -0.233094 0.600108 + vertex -1.568903 -0.326897 0.622075 + vertex -1.578235 -0.235411 0.525351 + endloop + endfacet + facet normal 0.390952 -0.768585 0.506392 + outer loop + vertex -2.042185 -0.773436 0.148903 + vertex -1.751140 -0.435551 0.437038 + vertex -1.677769 -0.439566 0.374299 + endloop + endfacet + facet normal 0.000000 0.000000 0.000000 + outer loop + vertex -2.042185 -0.773436 0.148903 + vertex -1.677769 -0.439566 0.374299 + vertex -2.042185 -0.773436 0.148903 + endloop + endfacet + facet normal 0.482776 -0.633070 0.605104 + outer loop + vertex -1.751140 -0.435551 0.437038 + vertex -1.690046 -0.233094 0.600108 + vertex -1.677769 -0.439566 0.374299 + endloop + endfacet + facet normal 0.406461 -0.663174 0.628482 + outer loop + vertex -1.690046 -0.233094 0.600108 + vertex -1.578235 -0.235411 0.525351 + vertex -1.677769 -0.439566 0.374299 + endloop + endfacet + facet normal 0.000000 0.000000 0.000000 + outer loop + vertex -2.042185 -0.773436 0.148903 + vertex -2.042185 -0.773436 0.148903 + vertex -2.042185 -0.773436 0.148903 + endloop + endfacet + facet normal -0.417208 -0.680009 -0.602931 + outer loop + vertex -1.578235 -0.235411 0.525351 + vertex -1.568903 -0.326897 0.622075 + vertex -1.459397 -0.306618 0.523429 + endloop + endfacet + facet normal 0.000000 0.000000 0.000000 + outer loop + vertex -2.042185 -0.773436 0.148903 + vertex -1.677769 -0.439566 0.374299 + vertex -2.042185 -0.773436 0.148903 + endloop + endfacet + facet normal -0.141780 -0.442905 0.885287 + outer loop + vertex -1.677769 -0.439566 0.374299 + vertex -1.610792 -0.497384 0.356099 + vertex -2.042185 -0.773436 0.148903 + endloop + endfacet + facet normal -0.275093 -0.481557 0.832122 + outer loop + vertex -1.677769 -0.439566 0.374299 + vertex -1.578235 -0.235411 0.525351 + vertex -1.459397 -0.306618 0.523429 + endloop + endfacet + facet normal -0.234952 -0.528877 0.815528 + outer loop + vertex -1.677769 -0.439566 0.374299 + vertex -1.459397 -0.306618 0.523429 + vertex -1.610792 -0.497384 0.356099 + endloop + endfacet + facet normal 0.000000 0.000000 0.000000 + outer loop + vertex -2.042185 -0.773436 0.148903 + vertex -2.042185 -0.773436 0.148903 + vertex -2.042185 -0.773436 0.148903 + endloop + endfacet + facet normal -0.417209 -0.680007 -0.602932 + outer loop + vertex -1.459397 -0.306618 0.523429 + vertex -1.568903 -0.326897 0.622075 + vertex -1.423018 -0.393096 0.595789 + endloop + endfacet + facet normal -0.577505 0.348286 0.738367 + outer loop + vertex -2.042185 -0.773436 0.148903 + vertex -1.610792 -0.497384 0.356099 + vertex -1.600651 -0.565468 0.396146 + endloop + endfacet + facet normal 0.000000 0.000000 0.000000 + outer loop + vertex -2.042185 -0.773436 0.148903 + vertex -1.600651 -0.565468 0.396146 + vertex -2.042185 -0.773436 0.148903 + endloop + endfacet + facet normal -0.825805 0.189440 0.531186 + outer loop + vertex -1.610792 -0.497384 0.356099 + vertex -1.459397 -0.306618 0.523429 + vertex -1.600651 -0.565468 0.396146 + endloop + endfacet + facet normal -0.799487 0.150301 0.581575 + outer loop + vertex -1.459397 -0.306618 0.523429 + vertex -1.423018 -0.393096 0.595789 + vertex -1.600651 -0.565468 0.396146 + endloop + endfacet + facet normal 0.000000 0.000000 0.000000 + outer loop + vertex -2.042185 -0.773436 0.148903 + vertex -2.042185 -0.773436 0.148903 + vertex -2.042185 -0.773436 0.148903 + endloop + endfacet + facet normal -0.417208 -0.680003 -0.602937 + outer loop + vertex -1.423018 -0.393096 0.595789 + vertex -1.568903 -0.326897 0.622075 + vertex -1.496495 -0.429726 0.687944 + endloop + endfacet + facet normal 0.000000 0.000000 0.000000 + outer loop + vertex -2.042185 -0.773436 0.148903 + vertex -1.600651 -0.565468 0.396146 + vertex -2.042185 -0.773436 0.148903 + endloop + endfacet + facet normal -0.432328 0.901613 0.013672 + outer loop + vertex -1.600651 -0.565468 0.396146 + vertex -1.654973 -0.592549 0.464281 + vertex -2.042185 -0.773436 0.148903 + endloop + endfacet + facet normal -0.591238 0.791076 -0.156961 + outer loop + vertex -1.600651 -0.565468 0.396146 + vertex -1.423018 -0.393096 0.595789 + vertex -1.496495 -0.429726 0.687944 + endloop + endfacet + facet normal -0.591241 0.791074 -0.156958 + outer loop + vertex -1.600651 -0.565468 0.396146 + vertex -1.496495 -0.429726 0.687944 + vertex -1.654973 -0.592549 0.464281 + endloop + endfacet + facet normal 0.000000 0.000000 0.000000 + outer loop + vertex -2.042185 -0.773436 0.148903 + vertex -2.042185 -0.773436 0.148903 + vertex -2.042185 -0.773436 0.148903 + endloop + endfacet + facet normal -0.417217 -0.680005 -0.602929 + outer loop + vertex -1.496495 -0.429726 0.687944 + vertex -1.568903 -0.326897 0.622075 + vertex -1.624494 -0.388922 0.730498 + endloop + endfacet + facet normal 0.053748 0.836287 -0.545650 + outer loop + vertex -2.042185 -0.773436 0.148903 + vertex -1.654973 -0.592549 0.464281 + vertex -1.732860 -0.558236 0.509198 + endloop + endfacet + facet normal 0.000000 0.000000 0.000000 + outer loop + vertex -2.042185 -0.773436 0.148903 + vertex -1.732860 -0.558236 0.509198 + vertex -2.042185 -0.773436 0.148903 + endloop + endfacet + facet normal 0.011833 0.804398 -0.593973 + outer loop + vertex -1.654973 -0.592549 0.464281 + vertex -1.496495 -0.429726 0.687944 + vertex -1.732860 -0.558236 0.509198 + endloop + endfacet + facet normal 0.043387 0.783097 -0.620384 + outer loop + vertex -1.496495 -0.429726 0.687944 + vertex -1.624494 -0.388922 0.730498 + vertex -1.732860 -0.558236 0.509198 + endloop + endfacet + facet normal 0.000000 0.000000 0.000000 + outer loop + vertex -2.042185 -0.773436 0.148903 + vertex -2.042185 -0.773436 0.148903 + vertex -2.042185 -0.773436 0.148903 + endloop + endfacet + facet normal -0.417210 -0.680010 -0.602928 + outer loop + vertex -1.624494 -0.388922 0.730498 + vertex -1.568903 -0.326897 0.622075 + vertex -1.710631 -0.301414 0.691406 + endloop + endfacet + facet normal 0.000000 0.000000 0.000000 + outer loop + vertex -2.042185 -0.773436 0.148903 + vertex -1.732860 -0.558236 0.509198 + vertex -2.042185 -0.773436 0.148903 + endloop + endfacet + facet normal 0.644526 0.270723 -0.715049 + outer loop + vertex -1.732860 -0.558236 0.509198 + vertex -1.775658 -0.488364 0.497074 + vertex -2.042185 -0.773436 0.148903 + endloop + endfacet + facet normal 0.676753 0.386138 -0.626819 + outer loop + vertex -1.732860 -0.558236 0.509198 + vertex -1.624494 -0.388922 0.730498 + vertex -1.710631 -0.301414 0.691406 + endloop + endfacet + facet normal 0.734698 0.349097 -0.581678 + outer loop + vertex -1.732860 -0.558236 0.509198 + vertex -1.710631 -0.301414 0.691406 + vertex -1.775658 -0.488364 0.497074 + endloop + endfacet + facet normal 0.000000 0.000000 0.000000 + outer loop + vertex -2.042185 -0.773436 0.148903 + vertex -2.042185 -0.773436 0.148903 + vertex -2.042185 -0.773436 0.148903 + endloop + endfacet + facet normal -0.417210 -0.680010 -0.602929 + outer loop + vertex -1.710631 -0.301414 0.691406 + vertex -1.568903 -0.326897 0.622075 + vertex -1.690046 -0.233094 0.600108 + endloop + endfacet + facet normal 0.811765 -0.561055 -0.162035 + outer loop + vertex -2.042185 -0.773436 0.148903 + vertex -1.775658 -0.488364 0.497074 + vertex -1.751140 -0.435551 0.437038 + endloop + endfacet + facet normal 0.000000 0.000000 0.000000 + outer loop + vertex -2.042185 -0.773436 0.148903 + vertex -1.751140 -0.435551 0.437038 + vertex -2.042185 -0.773436 0.148903 + endloop + endfacet + facet normal 0.926234 -0.373678 0.049547 + outer loop + vertex -1.775658 -0.488364 0.497074 + vertex -1.710631 -0.301414 0.691406 + vertex -1.751140 -0.435551 0.437038 + endloop + endfacet + facet normal 0.957406 -0.288746 -0.000204 + outer loop + vertex -1.710631 -0.301414 0.691406 + vertex -1.690046 -0.233094 0.600108 + vertex -1.751140 -0.435551 0.437038 + endloop + endfacet + facet normal -0.416389 -0.719636 -0.555648 + outer loop + vertex -1.741939 0.308654 0.859300 + vertex -1.712011 0.319710 0.822553 + vertex -1.750357 0.337030 0.828857 + endloop + endfacet + facet normal 0.054302 -0.722882 -0.688835 + outer loop + vertex -1.790363 0.316971 0.846754 + vertex -1.741939 0.308654 0.859300 + vertex -1.750357 0.337030 0.828857 + endloop + endfacet + facet normal 0.418187 -0.411097 -0.810012 + outer loop + vertex -1.787783 0.271717 0.871053 + vertex -1.790363 0.316971 0.846754 + vertex -1.828352 0.274189 0.848854 + endloop + endfacet + facet normal 0.147421 -0.461365 -0.874877 + outer loop + vertex -1.787783 0.271717 0.871053 + vertex -1.741939 0.308654 0.859300 + vertex -1.790363 0.316971 0.846754 + endloop + endfacet + facet normal 0.471918 -0.110360 -0.874708 + outer loop + vertex -1.832032 0.223009 0.853326 + vertex -1.787783 0.271717 0.871053 + vertex -1.828352 0.274189 0.848854 + endloop + endfacet + facet normal 0.488866 0.668645 -0.560290 + outer loop + vertex -1.857784 0.181133 0.812886 + vertex -1.825276 0.146936 0.800439 + vertex -1.821248 0.177171 0.840037 + endloop + endfacet + facet normal 0.901277 0.416942 -0.117724 + outer loop + vertex -1.855204 0.162086 0.765183 + vertex -1.857784 0.181133 0.812886 + vertex -1.872164 0.202947 0.780055 + endloop + endfacet + facet normal 0.416388 0.908437 0.036928 + outer loop + vertex -1.825276 0.146936 0.800439 + vertex -1.855204 0.162086 0.765183 + vertex -1.816858 0.144767 0.758879 + endloop + endfacet + facet normal 0.654929 0.713351 -0.249396 + outer loop + vertex -1.855204 0.162086 0.765183 + vertex -1.825276 0.146936 0.800439 + vertex -1.857784 0.181133 0.812886 + endloop + endfacet + facet normal 0.901277 0.243724 0.358188 + outer loop + vertex -1.857784 0.207340 0.740883 + vertex -1.855204 0.162086 0.765183 + vertex -1.872164 0.202947 0.780055 + endloop + endfacet + facet normal 0.488877 0.152067 0.858996 + outer loop + vertex -1.825276 0.173143 0.728435 + vertex -1.857784 0.207340 0.740883 + vertex -1.821248 0.221758 0.717537 + endloop + endfacet + facet normal 0.416391 0.719641 0.555640 + outer loop + vertex -1.855204 0.162086 0.765183 + vertex -1.825276 0.173143 0.728435 + vertex -1.816858 0.144767 0.758879 + endloop + endfacet + facet normal 0.654935 0.386148 0.649577 + outer loop + vertex -1.825276 0.173143 0.728435 + vertex -1.855204 0.162086 0.765183 + vertex -1.857784 0.207340 0.740883 + endloop + endfacet + facet normal 0.289382 -0.326073 0.899964 + outer loop + vertex -1.832032 0.265413 0.736821 + vertex -1.783608 0.267106 0.721864 + vertex -1.821248 0.221758 0.717537 + endloop + endfacet + facet normal 0.471929 -0.646786 0.599125 + outer loop + vertex -1.787783 0.314121 0.754550 + vertex -1.832032 0.265413 0.736821 + vertex -1.828352 0.301745 0.773145 + endloop + endfacet + facet normal 0.005013 -0.570512 0.821274 + outer loop + vertex -1.783608 0.267106 0.721864 + vertex -1.787783 0.314121 0.754550 + vertex -1.745967 0.304626 0.747698 + endloop + endfacet + facet normal 0.266493 -0.534111 0.802313 + outer loop + vertex -1.787783 0.314121 0.754550 + vertex -1.783608 0.267106 0.721864 + vertex -1.832032 0.265413 0.736821 + endloop + endfacet + facet normal 0.418194 -0.835585 0.356246 + outer loop + vertex -1.790363 0.333168 0.802253 + vertex -1.787783 0.314121 0.754550 + vertex -1.828352 0.301745 0.773145 + endloop + endfacet + facet normal 0.054304 -0.996534 0.063015 + outer loop + vertex -1.741939 0.334861 0.787296 + vertex -1.790363 0.333168 0.802253 + vertex -1.750357 0.337030 0.828857 + endloop + endfacet + facet normal -0.079078 -0.788413 0.610042 + outer loop + vertex -1.787783 0.314121 0.754550 + vertex -1.741939 0.334861 0.787296 + vertex -1.745967 0.304626 0.747698 + endloop + endfacet + facet normal 0.147422 -0.915790 0.373625 + outer loop + vertex -1.741939 0.334861 0.787296 + vertex -1.787783 0.314121 0.754550 + vertex -1.790363 0.333168 0.802253 + endloop + endfacet + facet normal -0.416386 -0.908438 -0.036925 + outer loop + vertex -1.712011 0.319710 0.822553 + vertex -1.741939 0.334861 0.787296 + vertex -1.750357 0.337030 0.828857 + endloop + endfacet + facet normal 0.629848 -0.584399 -0.511634 + outer loop + vertex -1.790363 0.316971 0.846754 + vertex -1.836207 0.296231 0.814007 + vertex -1.828352 0.274189 0.848854 + endloop + endfacet + facet normal 0.303187 -0.895462 -0.325923 + outer loop + vertex -1.790363 0.333168 0.802253 + vertex -1.790363 0.316971 0.846754 + vertex -1.750357 0.337030 0.828857 + endloop + endfacet + facet normal 0.629848 -0.776548 0.016290 + outer loop + vertex -1.836207 0.296231 0.814007 + vertex -1.790363 0.333168 0.802253 + vertex -1.828352 0.301745 0.773145 + endloop + endfacet + facet normal 0.556288 -0.780874 -0.284216 + outer loop + vertex -1.790363 0.333168 0.802253 + vertex -1.836207 0.296231 0.814007 + vertex -1.790363 0.316971 0.846754 + endloop + endfacet + facet normal 0.813501 -0.390871 -0.430623 + outer loop + vertex -1.836207 0.296231 0.814007 + vertex -1.861960 0.238159 0.818069 + vertex -1.828352 0.274189 0.848854 + endloop + endfacet + facet normal 0.813501 -0.576223 0.078630 + outer loop + vertex -1.861960 0.254356 0.773568 + vertex -1.836207 0.296231 0.814007 + vertex -1.828352 0.301745 0.773145 + endloop + endfacet + facet normal 0.976356 -0.203134 -0.073935 + outer loop + vertex -1.861960 0.238159 0.818069 + vertex -1.861960 0.254356 0.773568 + vertex -1.872164 0.202947 0.780055 + endloop + endfacet + facet normal 0.900027 -0.409551 -0.149064 + outer loop + vertex -1.861960 0.254356 0.773568 + vertex -1.861960 0.238159 0.818069 + vertex -1.836207 0.296231 0.814007 + endloop + endfacet + facet normal 0.733525 -0.111329 -0.670483 + outer loop + vertex -1.861960 0.238159 0.818069 + vertex -1.832032 0.223009 0.853326 + vertex -1.828352 0.274189 0.848854 + endloop + endfacet + facet normal 0.934059 0.099558 -0.342961 + outer loop + vertex -1.857784 0.181133 0.812886 + vertex -1.861960 0.238159 0.818069 + vertex -1.872164 0.202947 0.780055 + endloop + endfacet + facet normal 0.582926 0.349761 -0.733393 + outer loop + vertex -1.832032 0.223009 0.853326 + vertex -1.857784 0.181133 0.812886 + vertex -1.821248 0.177171 0.840037 + endloop + endfacet + facet normal 0.780924 0.113006 -0.614318 + outer loop + vertex -1.857784 0.181133 0.812886 + vertex -1.832032 0.223009 0.853326 + vertex -1.861960 0.238159 0.818069 + endloop + endfacet + facet normal 0.582938 -0.203490 0.786623 + outer loop + vertex -1.857784 0.207340 0.740883 + vertex -1.832032 0.265413 0.736821 + vertex -1.821248 0.221758 0.717537 + endloop + endfacet + facet normal 0.934059 -0.144185 0.326719 + outer loop + vertex -1.861960 0.254356 0.773568 + vertex -1.857784 0.207340 0.740883 + vertex -1.872164 0.202947 0.780055 + endloop + endfacet + facet normal 0.733523 -0.516261 0.442062 + outer loop + vertex -1.832032 0.265413 0.736821 + vertex -1.861960 0.254356 0.773568 + vertex -1.828352 0.301745 0.773145 + endloop + endfacet + facet normal 0.780922 -0.308308 0.543237 + outer loop + vertex -1.861960 0.254356 0.773568 + vertex -1.832032 0.265413 0.736821 + vertex -1.857784 0.207340 0.740883 + endloop + endfacet + facet normal -0.416389 0.719636 -0.555647 + outer loop + vertex -1.750357 -0.325999 0.817825 + vertex -1.712011 -0.308679 0.811521 + vertex -1.741939 -0.297622 0.848268 + endloop + endfacet + facet normal 0.054303 0.722881 -0.688835 + outer loop + vertex -1.750357 -0.325999 0.817825 + vertex -1.741939 -0.297622 0.848268 + vertex -1.790363 -0.305939 0.835722 + endloop + endfacet + facet normal 0.418187 0.411097 -0.810012 + outer loop + vertex -1.828352 -0.263158 0.837822 + vertex -1.790363 -0.305939 0.835722 + vertex -1.787783 -0.260685 0.860022 + endloop + endfacet + facet normal 0.147422 0.461364 -0.874877 + outer loop + vertex -1.790363 -0.305939 0.835722 + vertex -1.741939 -0.297622 0.848268 + vertex -1.787783 -0.260685 0.860022 + endloop + endfacet + facet normal 0.471918 0.110360 -0.874708 + outer loop + vertex -1.828352 -0.263158 0.837822 + vertex -1.787783 -0.260685 0.860022 + vertex -1.832032 -0.211977 0.842294 + endloop + endfacet + facet normal 0.488865 -0.668645 -0.560290 + outer loop + vertex -1.821248 -0.166140 0.829005 + vertex -1.825276 -0.135904 0.789408 + vertex -1.857784 -0.170101 0.801854 + endloop + endfacet + facet normal 0.901277 -0.416941 -0.117724 + outer loop + vertex -1.872164 -0.191915 0.769023 + vertex -1.857784 -0.170101 0.801854 + vertex -1.855204 -0.151055 0.754151 + endloop + endfacet + facet normal 0.416387 -0.908437 0.036928 + outer loop + vertex -1.816858 -0.133735 0.747847 + vertex -1.855204 -0.151055 0.754151 + vertex -1.825276 -0.135904 0.789408 + endloop + endfacet + facet normal 0.654929 -0.713351 -0.249396 + outer loop + vertex -1.857784 -0.170101 0.801854 + vertex -1.825276 -0.135904 0.789408 + vertex -1.855204 -0.151055 0.754151 + endloop + endfacet + facet normal 0.901277 -0.243725 0.358188 + outer loop + vertex -1.872164 -0.191915 0.769023 + vertex -1.855204 -0.151055 0.754151 + vertex -1.857784 -0.196308 0.729851 + endloop + endfacet + facet normal 0.488876 -0.152067 0.858997 + outer loop + vertex -1.821248 -0.210726 0.706505 + vertex -1.857784 -0.196308 0.729851 + vertex -1.825276 -0.162111 0.717404 + endloop + endfacet + facet normal 0.416390 -0.719640 0.555641 + outer loop + vertex -1.816858 -0.133735 0.747847 + vertex -1.825276 -0.162111 0.717404 + vertex -1.855204 -0.151055 0.754151 + endloop + endfacet + facet normal 0.654934 -0.386148 0.649578 + outer loop + vertex -1.857784 -0.196308 0.729851 + vertex -1.855204 -0.151055 0.754151 + vertex -1.825276 -0.162111 0.717404 + endloop + endfacet + facet normal 0.289382 0.326073 0.899964 + outer loop + vertex -1.821248 -0.210726 0.706505 + vertex -1.783608 -0.256074 0.710832 + vertex -1.832032 -0.254381 0.725790 + endloop + endfacet + facet normal 0.471929 0.646786 0.599125 + outer loop + vertex -1.828352 -0.290714 0.762114 + vertex -1.832032 -0.254381 0.725790 + vertex -1.787783 -0.303089 0.743518 + endloop + endfacet + facet normal 0.005013 0.570513 0.821273 + outer loop + vertex -1.745967 -0.293594 0.736666 + vertex -1.787783 -0.303089 0.743518 + vertex -1.783608 -0.256074 0.710832 + endloop + endfacet + facet normal 0.266493 0.534112 0.802313 + outer loop + vertex -1.832032 -0.254381 0.725790 + vertex -1.783608 -0.256074 0.710832 + vertex -1.787783 -0.303089 0.743518 + endloop + endfacet + facet normal 0.418193 0.835586 0.356245 + outer loop + vertex -1.828352 -0.290714 0.762114 + vertex -1.787783 -0.303089 0.743518 + vertex -1.790363 -0.322136 0.791222 + endloop + endfacet + facet normal 0.054307 0.996534 0.063016 + outer loop + vertex -1.750357 -0.325999 0.817825 + vertex -1.790363 -0.322136 0.791222 + vertex -1.741939 -0.323829 0.776265 + endloop + endfacet + facet normal -0.079078 0.788413 0.610042 + outer loop + vertex -1.745967 -0.293594 0.736666 + vertex -1.741939 -0.323829 0.776265 + vertex -1.787783 -0.303089 0.743518 + endloop + endfacet + facet normal 0.147423 0.915791 0.373623 + outer loop + vertex -1.790363 -0.322136 0.791222 + vertex -1.787783 -0.303089 0.743518 + vertex -1.741939 -0.323829 0.776265 + endloop + endfacet + facet normal -0.416386 0.908438 -0.036925 + outer loop + vertex -1.750357 -0.325999 0.817825 + vertex -1.741939 -0.323829 0.776265 + vertex -1.712011 -0.308679 0.811521 + endloop + endfacet + facet normal 0.629849 0.584398 -0.511634 + outer loop + vertex -1.828352 -0.263158 0.837822 + vertex -1.836207 -0.285199 0.802975 + vertex -1.790363 -0.305939 0.835722 + endloop + endfacet + facet normal 0.303189 0.895462 -0.325921 + outer loop + vertex -1.750357 -0.325999 0.817825 + vertex -1.790363 -0.305939 0.835722 + vertex -1.790363 -0.322136 0.791222 + endloop + endfacet + facet normal 0.629847 0.776549 0.016289 + outer loop + vertex -1.828352 -0.290714 0.762114 + vertex -1.790363 -0.322136 0.791222 + vertex -1.836207 -0.285199 0.802975 + endloop + endfacet + facet normal 0.556288 0.780875 -0.284214 + outer loop + vertex -1.790363 -0.305939 0.835722 + vertex -1.836207 -0.285199 0.802975 + vertex -1.790363 -0.322136 0.791222 + endloop + endfacet + facet normal 0.813501 0.390872 -0.430623 + outer loop + vertex -1.828352 -0.263158 0.837822 + vertex -1.861960 -0.227127 0.807037 + vertex -1.836207 -0.285199 0.802975 + endloop + endfacet + facet normal 0.813501 0.576223 0.078629 + outer loop + vertex -1.828352 -0.290714 0.762114 + vertex -1.836207 -0.285199 0.802975 + vertex -1.861960 -0.243324 0.762536 + endloop + endfacet + facet normal 0.976356 0.203133 -0.073935 + outer loop + vertex -1.872164 -0.191915 0.769023 + vertex -1.861960 -0.243324 0.762536 + vertex -1.861960 -0.227127 0.807037 + endloop + endfacet + facet normal 0.900027 0.409551 -0.149064 + outer loop + vertex -1.836207 -0.285199 0.802975 + vertex -1.861960 -0.227127 0.807037 + vertex -1.861960 -0.243324 0.762536 + endloop + endfacet + facet normal 0.733525 0.111329 -0.670483 + outer loop + vertex -1.828352 -0.263158 0.837822 + vertex -1.832032 -0.211977 0.842294 + vertex -1.861960 -0.227127 0.807037 + endloop + endfacet + facet normal 0.934059 -0.099557 -0.342961 + outer loop + vertex -1.872164 -0.191915 0.769023 + vertex -1.861960 -0.227127 0.807037 + vertex -1.857784 -0.170101 0.801854 + endloop + endfacet + facet normal 0.582925 -0.349761 -0.733393 + outer loop + vertex -1.821248 -0.166140 0.829005 + vertex -1.857784 -0.170101 0.801854 + vertex -1.832032 -0.211977 0.842294 + endloop + endfacet + facet normal 0.780924 -0.113006 -0.614318 + outer loop + vertex -1.861960 -0.227127 0.807037 + vertex -1.832032 -0.211977 0.842294 + vertex -1.857784 -0.170101 0.801854 + endloop + endfacet + facet normal 0.582937 0.203490 0.786623 + outer loop + vertex -1.821248 -0.210726 0.706505 + vertex -1.832032 -0.254381 0.725790 + vertex -1.857784 -0.196308 0.729851 + endloop + endfacet + facet normal 0.934059 0.144185 0.326718 + outer loop + vertex -1.872164 -0.191915 0.769023 + vertex -1.857784 -0.196308 0.729851 + vertex -1.861960 -0.243324 0.762536 + endloop + endfacet + facet normal 0.733523 0.516261 0.442062 + outer loop + vertex -1.828352 -0.290714 0.762114 + vertex -1.861960 -0.243324 0.762536 + vertex -1.832032 -0.254381 0.725790 + endloop + endfacet + facet normal 0.780923 0.308308 0.543237 + outer loop + vertex -1.857784 -0.196308 0.729851 + vertex -1.832032 -0.254381 0.725790 + vertex -1.861960 -0.243324 0.762536 + endloop + endfacet +endsolid NoName_1 diff --git a/test/models/STL/Spider_binary.stl b/test/models/STL/Spider_binary.stl new file mode 100644 index 0000000000000000000000000000000000000000..3f7daa24ddd24a6146fd30120c37a0f4514e3828 GIT binary patch literal 68484 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 = 1000; + mesh->mFaces = new aiFace[1000]; + + mesh->mNumVertices = 5000*2; + mesh->mVertices = new aiVector3D[5000*2]; + + for (unsigned int i = 0; i < 5000; ++i) { + mesh->mVertices[i] = mesh->mVertices[i+5000] = aiVector3D((float)i); + } + + mesh->mPrimitiveTypes = aiPrimitiveType_LINE | aiPrimitiveType_POINT | + aiPrimitiveType_POLYGON | aiPrimitiveType_TRIANGLE; + + unsigned int numOut = 0, numFaces = 0; + for (unsigned int i = 0; i < 1000; ++i) { + aiFace& f = mesh->mFaces[i]; + f.mNumIndices = (i % 5)+1; // between 1 and 5 + f.mIndices = new unsigned int[f.mNumIndices]; + bool had = false; + for (unsigned int n = 0; n < f.mNumIndices;++n) { + + // FIXME +#if 0 + // some duplicate indices + if ( n && n == (i / 200)+1) { + f.mIndices[n] = f.mIndices[n-1]; + had = true; + } + // and some duplicate vertices +#endif + if (n && i % 2 && 0 == n % 2) { + f.mIndices[n] = f.mIndices[n-1]+5000; + had = true; + } + else { + f.mIndices[n] = numOut++; + } + } + if (!had) + ++numFaces; + } + mesh->mNumUVComponents[0] = numOut; + mesh->mNumUVComponents[1] = numFaces; +} + +// ------------------------------------------------------------------------------------------------ +void FindDegeneratesProcessTest :: tearDown (void) +{ + delete mesh; + delete process; +} + +// ------------------------------------------------------------------------------------------------ +void FindDegeneratesProcessTest :: testDegeneratesDetection( void ) +{ + process->EnableInstantRemoval(false); + process->ExecuteOnMesh(mesh); + + unsigned int out = 0; + for (unsigned int i = 0; i < 1000; ++i) { + aiFace& f = mesh->mFaces[i]; + out += f.mNumIndices; + } + + CPPUNIT_ASSERT(mesh->mNumFaces == 1000 && mesh->mNumVertices == 10000); + CPPUNIT_ASSERT(mesh->mNumUVComponents[0] == out); + CPPUNIT_ASSERT(mesh->mPrimitiveTypes == (aiPrimitiveType_LINE | aiPrimitiveType_POINT | + aiPrimitiveType_POLYGON | aiPrimitiveType_TRIANGLE)); +} + +// ------------------------------------------------------------------------------------------------ +void FindDegeneratesProcessTest :: testDegeneratesRemoval( void ) +{ + process->EnableInstantRemoval(true); + process->ExecuteOnMesh(mesh); + + CPPUNIT_ASSERT(mesh->mNumUVComponents[1] == mesh->mNumFaces); +} + diff --git a/test/unit/utFindDegenerates.h b/test/unit/utFindDegenerates.h new file mode 100644 index 000000000..a1d05c5fa --- /dev/null +++ b/test/unit/utFindDegenerates.h @@ -0,0 +1,33 @@ +#ifndef TESTDEGENERATES_H +#define TESTDEGENERATES_H + + +#include + +using namespace std; +using namespace Assimp; + +class FindDegeneratesProcessTest : public CPPUNIT_NS :: TestFixture +{ + CPPUNIT_TEST_SUITE (FindDegeneratesProcessTest); + CPPUNIT_TEST (testDegeneratesDetection); + CPPUNIT_TEST (testDegeneratesRemoval); + CPPUNIT_TEST_SUITE_END (); + + public: + void setUp (void); + void tearDown (void); + + protected: + + void testDegeneratesDetection (void); + void testDegeneratesRemoval (void); + + private: + + aiMesh* mesh; + FindDegeneratesProcess* process; + +}; + +#endif diff --git a/test/unit/utImporter.cpp b/test/unit/utImporter.cpp index a54e09d1e..7d819ad83 100644 --- a/test/unit/utImporter.cpp +++ b/test/unit/utImporter.cpp @@ -9,7 +9,7 @@ CPPUNIT_TEST_SUITE_REGISTRATION (ImporterTest); bool TestPlugin :: CanRead( const std::string& pFile, - IOSystem* pIOHandler) const + IOSystem* pIOHandler, bool test) const { std::string::size_type pos = pFile.find_last_of('.'); // no file extension - can't read diff --git a/test/unit/utImporter.h b/test/unit/utImporter.h index c935cfe20..57ec0efeb 100644 --- a/test/unit/utImporter.h +++ b/test/unit/utImporter.h @@ -44,7 +44,7 @@ public: // overriden bool CanRead( const std::string& pFile, - IOSystem* pIOHandler) const; + IOSystem* pIOHandler, bool test) const; // overriden void GetExtensionList(std::string& append); diff --git a/test/unit/utPretransformVertices.cpp b/test/unit/utPretransformVertices.cpp index 3e9e49b91..8369f60af 100644 --- a/test/unit/utPretransformVertices.cpp +++ b/test/unit/utPretransformVertices.cpp @@ -1,2 +1,97 @@ -#include "UnitTestPCH.h" \ No newline at end of file +#include "UnitTestPCH.h" +#include "utPretransformVertices.h" + +CPPUNIT_TEST_SUITE_REGISTRATION (PretransformVerticesTest); + +// ------------------------------------------------------------------------------------------------ +void AddNodes(unsigned int num, aiNode* father, unsigned int depth) +{ + father->mChildren = new aiNode*[father->mNumChildren = 5]; + for (unsigned int i = 0; i < 5; ++i) { + aiNode* nd = father->mChildren[i] = new aiNode(); + + nd->mName.length = sprintf(nd->mName.data,"%i%i",depth,i); + + // spawn two meshes + nd->mMeshes = new unsigned int[nd->mNumMeshes = 2]; + nd->mMeshes[0] = num*5+i; + nd->mMeshes[1] = 24-(num*5+i); // mesh 12 is special ... it references the same mesh twice + + // setup an unique transformation matrix + nd->mTransformation.a1 = num*5.f+i + 1; + } + + if (depth > 1) { + for (unsigned int i = 0; i < 5; ++i) + AddNodes(i, father->mChildren[i],depth-1); + } +} + +// ------------------------------------------------------------------------------------------------ +void PretransformVerticesTest :: setUp (void) +{ + scene = new aiScene(); + + // add 5 empty materials + scene->mMaterials = new aiMaterial*[scene->mNumMaterials = 5]; + for (unsigned int i = 0; i < 5;++i) + scene->mMaterials[i] = new MaterialHelper(); + + // add 25 test meshes + scene->mMeshes = new aiMesh*[scene->mNumMeshes = 25]; + for (unsigned int i = 0; i < 25;++i) { + aiMesh* mesh = scene->mMeshes[i] = new aiMesh(); + + mesh->mPrimitiveTypes = aiPrimitiveType_POINT; + mesh->mFaces = new aiFace[ mesh->mNumFaces = 10+i ]; + mesh->mVertices = new aiVector3D[mesh->mNumVertices = mesh->mNumFaces]; + for (unsigned int a = 0; a < mesh->mNumFaces; ++a ) { + aiFace& f = mesh->mFaces[a]; + f.mIndices = new unsigned int [f.mNumIndices = 1]; + f.mIndices[0] = a*3; + + mesh->mVertices[a] = aiVector3D((float)i,(float)a,0.f); + } + mesh->mMaterialIndex = i%5; + + if (i % 2) + mesh->mNormals = new aiVector3D[mesh->mNumVertices]; + } + + // construct some nodes (1+25) + scene->mRootNode = new aiNode(); + scene->mRootNode->mName.Set("Root"); + AddNodes(0,scene->mRootNode,2); + + process = new PretransformVertices(); +} + +// ------------------------------------------------------------------------------------------------ +void PretransformVerticesTest :: tearDown (void) +{ + delete scene; + delete process; +} + + // ------------------------------------------------------------------------------------------------ +void PretransformVerticesTest :: testProcess_CollapseHierarchy (void) +{ + process->KeepHierarchy(false); + process->Execute(scene); + + CPPUNIT_ASSERT(scene->mNumMaterials == 5); + CPPUNIT_ASSERT(scene->mNumMeshes == 10); // every second mesh has normals +} + +// ------------------------------------------------------------------------------------------------ +void PretransformVerticesTest :: testProcess_KeepHierarchy (void) +{ + + process->KeepHierarchy(true); + process->Execute(scene); + + CPPUNIT_ASSERT(scene->mNumMaterials == 5); + CPPUNIT_ASSERT(scene->mNumMeshes == 49); // see note on mesh 12 above + +} \ No newline at end of file diff --git a/test/unit/utPretransformVertices.h b/test/unit/utPretransformVertices.h index e69de29bb..edb95cae9 100644 --- a/test/unit/utPretransformVertices.h +++ b/test/unit/utPretransformVertices.h @@ -0,0 +1,37 @@ +#ifndef TESTLBW_H +#define TESTLBW_H + +#include +#include + +#include +#include + + +using namespace std; +using namespace Assimp; + +class PretransformVerticesTest : public CPPUNIT_NS :: TestFixture +{ + CPPUNIT_TEST_SUITE (PretransformVerticesTest); + CPPUNIT_TEST (testProcess_CollapseHierarchy); + CPPUNIT_TEST (testProcess_KeepHierarchy); + CPPUNIT_TEST_SUITE_END (); + + public: + void setUp (void); + void tearDown (void); + + protected: + + void testProcess_CollapseHierarchy (void); + void testProcess_KeepHierarchy (void); + + + private: + + aiScene* scene; + PretransformVertices* process; +}; + +#endif diff --git a/test/unit/utRemoveRedundantMaterials.cpp b/test/unit/utRemoveRedundantMaterials.cpp index 1c6e7cdf8..e6a10229b 100644 --- a/test/unit/utRemoveRedundantMaterials.cpp +++ b/test/unit/utRemoveRedundantMaterials.cpp @@ -25,7 +25,7 @@ aiMaterial* getUniqueMaterial2() { // setup an unique name for each material - this shouldn't care aiString mTemp; - mTemp.Set("UniqueMat2"); + mTemp.Set("Unique Mat2"); MaterialHelper* pcMat = new MaterialHelper(); pcMat->AddProperty(&mTemp,AI_MATKEY_NAME); @@ -40,7 +40,7 @@ aiMaterial* getUniqueMaterial3() { // setup an unique name for each material - this shouldn't care aiString mTemp; - mTemp.Set("UniqueMat3"); + mTemp.Set("Complex material name"); MaterialHelper* pcMat = new MaterialHelper(); pcMat->AddProperty(&mTemp,AI_MATKEY_NAME); @@ -51,24 +51,23 @@ aiMaterial* getUniqueMaterial3() void RemoveRedundantMatsTest :: setUp (void) { // construct the process - this->piProcess = new RemoveRedundantMatsProcess(); + piProcess = new RemoveRedundantMatsProcess(); // create a scene with 5 materials (2 is a duplicate of 0, 3 of 1) - this->pcScene1 = new aiScene(); - this->pcScene1->mNumMaterials = 5; - this->pcScene1->mMaterials = new aiMaterial*[5]; + pcScene1 = new aiScene(); + pcScene1->mNumMaterials = 5; + pcScene1->mMaterials = new aiMaterial*[5]; - this->pcScene1->mMaterials[0] = getUniqueMaterial1(); - this->pcScene1->mMaterials[1] = getUniqueMaterial2(); - this->pcScene1->mMaterials[4] = getUniqueMaterial3(); + pcScene1->mMaterials[0] = getUniqueMaterial1(); + pcScene1->mMaterials[1] = getUniqueMaterial2(); + pcScene1->mMaterials[4] = getUniqueMaterial3(); // all materials must be referenced - this->pcScene1->mNumMeshes = 5; - this->pcScene1->mMeshes = new aiMesh*[5]; - for (unsigned int i = 0; i < 5;++i) - { - this->pcScene1->mMeshes[i] = new aiMesh(); - this->pcScene1->mMeshes[i]->mMaterialIndex = i; + pcScene1->mNumMeshes = 5; + pcScene1->mMeshes = new aiMesh*[5]; + for (unsigned int i = 0; i < 5;++i) { + pcScene1->mMeshes[i] = new aiMesh(); + pcScene1->mMeshes[i]->mMaterialIndex = i; } // setup an unique name for each material - this shouldn't care @@ -78,13 +77,13 @@ void RemoveRedundantMatsTest :: setUp (void) mTemp.data[1] = 0; MaterialHelper* pcMat; - this->pcScene1->mMaterials[2] = pcMat = new MaterialHelper(); - MaterialHelper::CopyPropertyList(pcMat,(const MaterialHelper*)this->pcScene1->mMaterials[0]); + pcScene1->mMaterials[2] = pcMat = new MaterialHelper(); + MaterialHelper::CopyPropertyList(pcMat,(const MaterialHelper*)pcScene1->mMaterials[0]); pcMat->AddProperty(&mTemp,AI_MATKEY_NAME); mTemp.data[0]++; - this->pcScene1->mMaterials[3] = pcMat = new MaterialHelper(); - MaterialHelper::CopyPropertyList(pcMat,(const MaterialHelper*)this->pcScene1->mMaterials[1]); + pcScene1->mMaterials[3] = pcMat = new MaterialHelper(); + MaterialHelper::CopyPropertyList(pcMat,(const MaterialHelper*)pcScene1->mMaterials[1]); pcMat->AddProperty(&mTemp,AI_MATKEY_NAME); mTemp.data[0]++; } @@ -92,24 +91,42 @@ void RemoveRedundantMatsTest :: setUp (void) // ------------------------------------------------------------------------------------------------ void RemoveRedundantMatsTest :: tearDown (void) { - delete this->piProcess; - delete this->pcScene1; + delete piProcess; + delete pcScene1; } // ------------------------------------------------------------------------------------------------ void RemoveRedundantMatsTest :: testRedundantMaterials (void) { - this->piProcess->Execute(this->pcScene1); - CPPUNIT_ASSERT_EQUAL(this->pcScene1->mNumMaterials,3u); - CPPUNIT_ASSERT(0 != this->pcScene1->mMaterials && - 0 != this->pcScene1->mMaterials[0] && - 0 != this->pcScene1->mMaterials[1] && - 0 != this->pcScene1->mMaterials[2]); + piProcess->SetFixedMaterialsString(); + + piProcess->Execute(pcScene1); + CPPUNIT_ASSERT_EQUAL(pcScene1->mNumMaterials,3u); + CPPUNIT_ASSERT(0 != pcScene1->mMaterials && + 0 != pcScene1->mMaterials[0] && + 0 != pcScene1->mMaterials[1] && + 0 != pcScene1->mMaterials[2]); aiString sName; - CPPUNIT_ASSERT(AI_SUCCESS == aiGetMaterialString(this->pcScene1->mMaterials[2], - AI_MATKEY_NAME,&sName)); - - CPPUNIT_ASSERT(!::strcmp( sName.data, "UniqueMat3" )); + CPPUNIT_ASSERT(AI_SUCCESS == aiGetMaterialString(pcScene1->mMaterials[2],AI_MATKEY_NAME,&sName)); + CPPUNIT_ASSERT(!::strcmp( sName.data, "Complex material name" )); } + +// ------------------------------------------------------------------------------------------------ +void RemoveRedundantMatsTest :: testRedundantMaterialsWithExcludeList (void) +{ + piProcess->SetFixedMaterialsString("\'Unique Mat2\'\t\'Complex material name\' and_another_one_which_we_wont_use"); + + piProcess->Execute(pcScene1); + CPPUNIT_ASSERT_EQUAL(pcScene1->mNumMaterials,4u); + CPPUNIT_ASSERT(0 != pcScene1->mMaterials && + 0 != pcScene1->mMaterials[0] && + 0 != pcScene1->mMaterials[1] && + 0 != pcScene1->mMaterials[2] && + 0 != pcScene1->mMaterials[3]); + + aiString sName; + CPPUNIT_ASSERT(AI_SUCCESS == aiGetMaterialString(pcScene1->mMaterials[3],AI_MATKEY_NAME,&sName)); + CPPUNIT_ASSERT(!::strcmp( sName.data, "Complex material name" )); +} diff --git a/test/unit/utRemoveRedundantMaterials.h b/test/unit/utRemoveRedundantMaterials.h index fb9e508af..b0b310669 100644 --- a/test/unit/utRemoveRedundantMaterials.h +++ b/test/unit/utRemoveRedundantMaterials.h @@ -17,6 +17,7 @@ class RemoveRedundantMatsTest : public CPPUNIT_NS :: TestFixture { CPPUNIT_TEST_SUITE (RemoveRedundantMatsTest); CPPUNIT_TEST (testRedundantMaterials); + CPPUNIT_TEST (testRedundantMaterialsWithExcludeList); CPPUNIT_TEST_SUITE_END (); public: @@ -26,7 +27,7 @@ class RemoveRedundantMatsTest : public CPPUNIT_NS :: TestFixture protected: void testRedundantMaterials (void); - + void testRedundantMaterialsWithExcludeList (void); private: diff --git a/tools/assimp_cmd/CompareDump.cpp b/tools/assimp_cmd/CompareDump.cpp new file mode 100644 index 000000000..e69de29bb diff --git a/tools/assimp_cmd/ImageExtractor.cpp b/tools/assimp_cmd/ImageExtractor.cpp new file mode 100644 index 000000000..464098e33 --- /dev/null +++ b/tools/assimp_cmd/ImageExtractor.cpp @@ -0,0 +1,360 @@ +/* +--------------------------------------------------------------------------- +Open Asset Import Library (ASSIMP) +--------------------------------------------------------------------------- + +Copyright (c) 2006-2008, ASSIMP Development Team + +All rights reserved. + +Redistribution and use of this software in source and binary forms, +with or without modification, are permitted provided that the following +conditions are met: + +* Redistributions of source code must retain the above + copyright notice, this list of conditions and the + following disclaimer. + +* Redistributions in binary form must reproduce the above + copyright notice, this list of conditions and the + following disclaimer in the documentation and/or other + materials provided with the distribution. + +* Neither the name of the ASSIMP team, nor the names of its + contributors may be used to endorse or promote products + derived from this software without specific prior + written permission of the ASSIMP Development Team. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +--------------------------------------------------------------------------- +*/ + +/** @file ImageExtractor.cpp + * @brief Implementation of the 'assimp extract' utility + */ + +#include "Main.h" + +const char* AICMD_MSG_DUMP_HELP_E = +"todo assimp extract help"; + + +#define AI_EXTRACT_WRITE_BMP_ALPHA 0x1 + +#include "Compiler/pushpack1.h" + +// ----------------------------------------------------------------------------------- +// Data structure for the first header of a BMP +struct BITMAPFILEHEADER +{ + uint16_t bfType ; + uint32_t bfSize; + uint16_t bfReserved1 ; + uint16_t bfReserved2; + uint32_t bfOffBits; +} PACK_STRUCT; + +// ----------------------------------------------------------------------------------- +// Data structure for the second header of a BMP +struct BITMAPINFOHEADER +{ + int32_t biSize; + int32_t biWidth; + int32_t biHeight; + int16_t biPlanes; + int16_t biBitCount; + uint32_t biCompression; + int32_t biSizeImage; + int32_t biXPelsPerMeter; + int32_t biYPelsPerMeter; + int32_t biClrUsed; + int32_t biClrImportant; + + // pixel data follows header +} PACK_STRUCT; + +// ----------------------------------------------------------------------------------- +// Data structure for the header of a TGA +struct TGA_HEADER +{ + uint8_t identsize; // size of ID field that follows 18 byte header (0 usually) + uint8_t colourmaptype; // type of colour map 0=none, 1=has palette + uint8_t imagetype; // type of image 0=none,1=indexed,2=rgb,3=grey,+8=rle packed + + uint16_t colourmapstart; // first colour map entry in palette + uint16_t colourmaplength; // number of colours in palette + uint8_t colourmapbits; // number of bits per palette entry 15,16,24,32 + + uint16_t xstart; // image x origin + uint16_t ystart; // image y origin + uint16_t width; // image width in pixels + uint16_t height; // image height in pixels + uint8_t bits; // image bits per pixel 8,16,24,32 + uint8_t descriptor; // image descriptor bits (vh flip bits) + + // pixel data follows header +} PACK_STRUCT; + + +#include "Compiler/poppack1.h" + +// ----------------------------------------------------------------------------------- +// Save a texture as bitmap +int SaveAsBMP (FILE* file, const aiTexel* data, unsigned int width, unsigned int height, bool SaveAlpha = false) +{ + if (!file || !data)return 1; + + const unsigned int numc = (SaveAlpha ? 4 : 3); + unsigned char* buffer = new unsigned char[width*height*numc]; + + for (unsigned int y = 0; y < height; ++y) { + for (unsigned int x = 0; x < width; ++x) { + + unsigned char* s = &buffer[(y*width+x) * numc]; + const aiTexel* t = &data [ y*width+x]; + s[0] = t->b; + s[1] = t->g; + s[2] = t->r; + if (4 == numc) + s[3] = t->a; + } + } + + BITMAPFILEHEADER header; + header.bfType = 'MB'; + header.bfOffBits = sizeof(BITMAPFILEHEADER)+sizeof(BITMAPINFOHEADER); + header.bfSize = header.bfOffBits+width*height*numc; + header.bfReserved1 = header.bfReserved2 = 0; + + ::fwrite(&header,sizeof(BITMAPFILEHEADER),1,file); + + BITMAPINFOHEADER info; + info.biSize = 40; + info.biWidth = width; + info.biHeight = height; + info.biPlanes = 1; + info.biBitCount = numc<<3; + info.biCompression = 0; + info.biSizeImage = width*height*numc; + info.biXPelsPerMeter = 1; // dummy + info.biYPelsPerMeter = 1; // dummy + info.biClrUsed = 0; + info.biClrImportant = 0; + + ::fwrite(&info,sizeof(BITMAPINFOHEADER),1,file); + + unsigned char* temp = buffer+info.biSizeImage; + const unsigned int row = width*numc; + + for (int y = 0; temp -= row,y < info.biHeight;++y) { + ::fwrite(temp,row,1,file); + } + + // delete the buffer + delete[] buffer; + return 0; +} + +// ----------------------------------------------------------------------------------- +// Save a texture as tga +int SaveAsTGA (FILE* file, const aiTexel* data, unsigned int width, unsigned int height) +{ + if (!file || !data)return 1; + + + TGA_HEADER head = {0}; + head.bits = 32; + head.height = (uint16_t)height; + head.width = (uint16_t)width; + head.descriptor |= (1u<<5); + + head.imagetype = 2; // actually it's RGBA + ::fwrite(&head,sizeof(TGA_HEADER),1,file); + + for (unsigned int y = 0; y < height; ++y) { + for (unsigned int x = 0; x < width; ++x) { + ::fwrite(data + y*width+x,4,1,file); + } + } + + return 0; +} + +// ----------------------------------------------------------------------------------- +// Do the texture import for a given aiTexture +int DoExport(const aiTexture* tx, FILE* p, const std::string& extension, + unsigned int flags) +{ + // export the image to the appropriate decoder + if (extension == "bmp") { + SaveAsBMP(p,tx->pcData,tx->mWidth,tx->mHeight, + (0 != (flags & AI_EXTRACT_WRITE_BMP_ALPHA))); + } + else if (extension == "tga") { + SaveAsTGA(p,tx->pcData,tx->mWidth,tx->mHeight); + } + else { + printf("assimp extract: No available texture encoder found for %s\n", extension.c_str()); + return 1; + } + return 0; +} + +// ----------------------------------------------------------------------------------- +// Implementation of the assimp extract utility +int Assimp_Extract (const char** params, unsigned int num) +{ + if (num < 1) { + printf("assimp extract: Invalid number of arguments. See \'assimp extract --help\'\n"); + return 1; + } + + // --help + if (!::strcmp( params[0], "-h") || !::strcmp( params[0], "--help") || !::strcmp( params[0], "-?") ) { + printf(AICMD_MSG_DUMP_HELP_E); + return 0; + } + + // asssimp extract in out [options] + if (num < 1) { + printf("assimp extract: Invalid number of arguments. See \'assimp dump --help\'\n"); + return 1; + } + + std::string in = std::string(params[0]); + std::string out = (num > 1 ? std::string(params[1]) : "-"); + + // get import flags + ImportData import; + ProcessStandardArguments(import,params+1,num-1); + + bool nosuffix = false; + unsigned int texIdx = 0xffffffff, flags = 0; + + // process other flags + std::string extension = "bmp"; + for (unsigned int i = (out[0] == '-' ? 1 : 2); i < num;++i) { + if (!params[i])continue; + + if (!::strncmp( params[i], "-f",2)) { + extension = std::string(params[i]+2); + } + else if ( !::strncmp( params[i], "--format=",9)) { + extension = std::string(params[i]+9); + } + else if ( !::strcmp( params[i], "--nosuffix") || !::strcmp(params[i],"-s")) { + nosuffix = true; + } + else if ( !::strncmp( params[i], "--texture=",10)) { + texIdx = ::strtol10(params[i]+10); + } + else if ( !::strncmp( params[i], "-t",2)) { + texIdx = ::strtol10(params[i]+2); + } + else if ( !::strcmp( params[i], "-ba") || !::strcmp( params[i], "--bmp-with-alpha")) { + flags |= AI_EXTRACT_WRITE_BMP_ALPHA; + } + else { + printf("Unknown parameter: %s\n",params[i]); + return 10; + } + } + for (std::string::iterator it = extension.begin();it != extension.end();++it) + *it = ::tolower(*it); + + if (out[0] == '-') { + // take file name from input file + std::string::size_type s = in.find_last_of('.'); + if (s == std::string::npos) + s = in.length(); + + out = in.substr(0,s); + } + + // take file extension from file name, if given + std::string::size_type s = out.find_last_of('.'); + if (s != std::string::npos) { + extension = out.substr(s+1,in.length()-(s+1)); + out = out.substr(0,s); + } + + // import the main model + const aiScene* scene = ImportModel(import,in); + if (!scene) { + printf("assimp extract: Unable to load input file %s\n",in.c_str()); + return 5; + } + + // get the texture(s) to be exported + if (texIdx != 0xffffffff) { + + // check whether the requested texture is existing + if (texIdx >= scene->mNumTextures) { + ::printf("assimp extract: Texture %i requested, but there are just %i textures\n", + texIdx, scene->mNumTextures); + return 6; + } + } + else { + ::printf("assimp extract: Exporting %i textures\n",scene->mNumTextures); + } + + // now write all output textures + for (unsigned int i = 0; i < scene->mNumTextures;++i) + { + if (texIdx != 0xffffffff && texIdx != i) + continue; + + const aiTexture* tex = scene->mTextures[i]; + std::string out_cpy = out, out_ext = extension; + + // append suffix if necessary - always if all textures are exported + if (!nosuffix || (texIdx == 0xffffffff)) { + out_cpy.append ("_img"); + char tmp[10]; + ASSIMP_itoa10(tmp,i); + + out_cpy.append(std::string(tmp)); + } + + // if the texture is a compressed one, we'll export + // it to its native file format + if (!tex->mHeight) { + printf("assimp extract: Texture %i is compressed (%s). Writing native file format.\n", + i,tex->achFormatHint); + + // modify file extension + out_ext = std::string(tex->achFormatHint); + } + out_cpy.append("."+out_ext); + + // open output file + FILE* p = ::fopen(out_cpy.c_str(),"wb"); + if (!p) { + printf("assimp extract: Unable to open output file %s\n",out_cpy.c_str()); + return 7; + } + int m; + + if (!tex->mHeight) { + m = (1 != ::fwrite(tex->pcData,tex->mWidth,1,p)); + } + else m = DoExport(tex,p,extension,flags); + ::fclose(p); + + printf("assimp extract: Wrote texture %i to %s\n",i, out_cpy.c_str()); + if (texIdx != 0xffffffff) + return m; + } + return 0; +} \ No newline at end of file diff --git a/tools/assimp_cmd/Main.cpp b/tools/assimp_cmd/Main.cpp new file mode 100644 index 000000000..ede8945dd --- /dev/null +++ b/tools/assimp_cmd/Main.cpp @@ -0,0 +1,308 @@ +/* +--------------------------------------------------------------------------- +Open Asset Import Library (ASSIMP) +--------------------------------------------------------------------------- + +Copyright (c) 2006-2008, ASSIMP Development Team + +All rights reserved. + +Redistribution and use of this software in source and binary forms, +with or without modification, are permitted provided that the following +conditions are met: + +* Redistributions of source code must retain the above + copyright notice, this list of conditions and the + following disclaimer. + +* Redistributions in binary form must reproduce the above + copyright notice, this list of conditions and the + following disclaimer in the documentation and/or other + materials provided with the distribution. + +* Neither the name of the ASSIMP team, nor the names of its + contributors may be used to endorse or promote products + derived from this software without specific prior + written permission of the ASSIMP Development Team. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +--------------------------------------------------------------------------- +*/ + +/** @file Main.cpp + * @brief main() function of assimp_cmd + */ + +#include "Main.h" + +const char* AICMD_MSG_ABOUT = +"------------------------------------------------------ \n" +"Open Asset Import Library (Assimp) \n" +"Command-line tools \n" +"------------------------------------------------------ \n\n" + +"Major version: %i\n" +"Minor version: %i\n" +"SVN revision : %i\n" +"Build flags : %s %s %s %s %s\n\n"; + + +const char* AICMD_MSG_HELP = +"todo help"; + + +/*extern*/ Assimp::Importer* globalImporter = NULL; + +// ------------------------------------------------------------------------------ +// Application entry point +int main (int argc, char* argv[]) +{ + if (argc <= 1) { + + printf("assimp: No command specified. Use \'assimp help\' for a detailed command list\n"); + return 0; + } + + // assimp version + // Display a version string + if (! ::strcmp(argv[1], "version")) { + + const unsigned int flags = aiGetCompileFlags(); + printf(AICMD_MSG_ABOUT, + aiGetVersionMajor(), + aiGetVersionMinor(), + aiGetVersionRevision(), + (flags & ASSIMP_CFLAGS_DEBUG ? "-debug" : ""), + (flags & ASSIMP_CFLAGS_NOBOOST ? "-noboost" : ""), + (flags & ASSIMP_CFLAGS_SHARED ? "-shared" : ""), + (flags & ASSIMP_CFLAGS_SINGLETHREADED ? "-st" : ""), + (flags & ASSIMP_CFLAGS_STLPORT ? "-stlport" : "")); + + return 0; + } + + // assimp help + // Display some basic help + if (! ::strcmp(argv[1], "help")) { + + printf(AICMD_MSG_HELP); + return 0; + } + + // construct a global Assimp::Importer instance + Assimp::Importer imp; + globalImporter = &imp; + + // assimp dump + // Dump a model to a file + if (! ::strcmp(argv[1], "dump")) { + return Assimp_Dump ((const char**)&argv[2],argc-2); + } + + // assimp extract + // Extract an embedded texture from a file + if (! ::strcmp(argv[1], "extract")) { + return Assimp_Extract ((const char**)&argv[2],argc-2); + } + + ::printf("Unrecognized command. Use \'assimp help\' for a detailed command list\n"); + return 1; +} + +// ------------------------------------------------------------------------------ +// Import a specific file +const aiScene* ImportModel(const ImportData& imp, const std::string& path) +{ + // Attach log streams + if (imp.log) { + ::printf("\nAttaching log stream ... OK\n"); + + unsigned int flags = 0; + if (imp.logFile.length()) + flags |= DLS_FILE; + if (imp.showLog) + flags |= DLS_CERR; + + DefaultLogger::create(imp.logFile.c_str(),imp.verbose ? Logger::VERBOSE : Logger::NORMAL,flags); + } + ::printf("Launching model import ... OK\n"); + + // Now validate this flag combination + if(!globalImporter->ValidateFlags(imp.ppFlags)) { + ::printf("ERROR: Unsupported post-processing flags \n"); + return NULL; + } + ::printf("Validating postprocessing flags ... OK\n"); + if (imp.showLog) + ::printf("-----------------------------------------------------------------\n"); + + // do the actual import, measure time + const clock_t first = ::clock(); + const aiScene* scene = globalImporter->ReadFile(path,imp.ppFlags); + + if (imp.showLog) + ::printf("-----------------------------------------------------------------\n"); + + if (!scene) { + printf("ERROR: Failed to load file\n"); + return NULL; + } + + const clock_t second = ::clock(); + const float seconds = (float)(second-first) / CLOCKS_PER_SEC; + + ::printf("Importing file ... OK \n import took approx. %.5f seconds\n" + "\n",seconds); + + if (imp.log) { + DefaultLogger::kill(); + } + return scene; +} + +// ------------------------------------------------------------------------------ +// Process standard arguments +int ProcessStandardArguments(ImportData& fill, const char** params, + unsigned int num) +{ + // -ptv --pretransform-vertices + // -gsn --gen-smooth-normals + // -gn --gen-normals + // -cts --calc-tangent-space + // -jiv --join-identical-vertices + // -rrm --remove-redundant-materials + // -fd --find-degenerates + // -slm --split-large-meshes + // -lbw --limit-bone-weights + // -vds --validate-data-structure + // -icl --improve-cache-locality + // -sbpt --sort-by-ptype + // -lh --convert-to-lh + // -fuv --flip-uv + // -fwo --flip-winding-order + // -ett --evaluate-texture-transform + // -guv --gen-uvcoords + // -fid --find-invalid-data + // -fixn --fix normals + // -tri --triangulate + // -fi --find-instances + // + // -c --config-file= + + for (unsigned int i = 0; i < num;++i) + { + if (!params[i]) { // could happen if some args have already been processed + continue; + } + + bool has = true; + if (! ::strcmp(params[i], "-ptv") || ! ::strcmp(params[i], "--pretransform-vertices")) { + fill.ppFlags |= aiProcess_PreTransformVertices; + } + else if (! ::strcmp(params[i], "-gsn") || ! ::strcmp(params[i], "--gen-smooth-normals")) { + fill.ppFlags |= aiProcess_GenSmoothNormals; + } + else if (! ::strcmp(params[i], "-gn") || ! ::strcmp(params[i], "--gen-normals")) { + fill.ppFlags |= aiProcess_GenNormals; + } + else if (! ::strcmp(params[i], "-jiv") || ! ::strcmp(params[i], "--join-identical-vertices")) { + fill.ppFlags |= aiProcess_JoinIdenticalVertices; + } + else if (! ::strcmp(params[i], "-rrm") || ! ::strcmp(params[i], "--remove-redundant-materials")) { + fill.ppFlags |= aiProcess_RemoveRedundantMaterials; + } + else if (! ::strcmp(params[i], "-fd") || ! ::strcmp(params[i], "--find-degenerates")) { + fill.ppFlags |= aiProcess_FindDegenerates; + } + else if (! ::strcmp(params[i], "-slm") || ! ::strcmp(params[i], "--split-large-meshes")) { + fill.ppFlags |= aiProcess_SplitLargeMeshes; + } + else if (! ::strcmp(params[i], "-lbw") || ! ::strcmp(params[i], "--limit-bone-weights")) { + fill.ppFlags |= aiProcess_LimitBoneWeights; + } + else if (! ::strcmp(params[i], "-vds") || ! ::strcmp(params[i], "--validate-data-structure")) { + fill.ppFlags |= aiProcess_ValidateDataStructure; + } + else if (! ::strcmp(params[i], "-icl") || ! ::strcmp(params[i], "--improve-cache-locality")) { + fill.ppFlags |= aiProcess_ImproveCacheLocality; + } + else if (! ::strcmp(params[i], "-sbpt") || ! ::strcmp(params[i], "--sort-by-ptype")) { + fill.ppFlags |= aiProcess_SortByPType; + } + else if (! ::strcmp(params[i], "-lh") || ! ::strcmp(params[i], "--left-handed")) { + fill.ppFlags |= aiProcess_ConvertToLeftHanded; + } + else if (! ::strcmp(params[i], "-fuv") || ! ::strcmp(params[i], "--flip-uv")) { + fill.ppFlags |= aiProcess_ConvertToLeftHanded; + } + else if (! ::strcmp(params[i], "-fwo") || ! ::strcmp(params[i], "--flip-winding-order")) { + fill.ppFlags |= aiProcess_ConvertToLeftHanded; + } + else if (! ::strcmp(params[i], "-ett") || ! ::strcmp(params[i], "--evaluate-texture-transform")) { + fill.ppFlags |= aiProcess_TransformUVCoords; + } + else if (! ::strcmp(params[i], "-guv") || ! ::strcmp(params[i], "--gen-uvcoords")) { + fill.ppFlags |= aiProcess_GenUVCoords; + } + else if (! ::strcmp(params[i], "-fid") || ! ::strcmp(params[i], "--find-invalid-data")) { + fill.ppFlags |= aiProcess_FindInvalidData; + } + else if (! ::strcmp(params[i], "-fixn") || ! ::strcmp(params[i], "--fix-normals")) { + fill.ppFlags |= aiProcess_FixInfacingNormals; + } + else if (! ::strcmp(params[i], "-tri") || ! ::strcmp(params[i], "--triangulate")) { + fill.ppFlags |= aiProcess_Triangulate; + } + else if (! ::strcmp(params[i], "-cts") || ! ::strcmp(params[i], "--calc-tangent-space")) { + fill.ppFlags |= aiProcess_CalcTangentSpace; + } + else if (! ::strcmp(params[i], "-fi") || ! ::strcmp(params[i], "--find-instances")) { + fill.ppFlags |= aiProcess_FindInstances; + } + else if (! ::strncmp(params[i], "-c",2) || ! ::strncmp(params[i], "--config=",9)) { + + const unsigned int ofs = (params[i][1] == '-' ? 9 : 2); + + // use default configurations + if (! ::strncmp(params[i]+ofs,"full",4)) + fill.ppFlags |= aiProcessPreset_TargetRealtime_MaxQuality; + + else if (! ::strncmp(params[i]+ofs,"default",7)) + fill.ppFlags |= aiProcessPreset_TargetRealtime_Quality; + + else if (! ::strncmp(params[i]+ofs,"fast",4)) + fill.ppFlags |= aiProcessPreset_TargetRealtime_Fast; + } + else if (! ::strcmp(params[i], "-l") || ! ::strcmp(params[i], "--show-log")) { + fill.showLog = true; + } + else if (! ::strcmp(params[i], "-v") || ! ::strcmp(params[i], "--verbose")) { + fill.verbose = true; + } + else if (! ::strncmp(params[i], "--log-out=",10) || ! ::strncmp(params[i], "-lo",3)) { + fill.logFile = std::string(params[i]+(params[i][1] == '-' ? 10 : 3)); + if (!fill.logFile.length()) + fill.logFile = "assimp-log.txt"; + } + + else has = false; + if (has) { + params[i] = NULL; + } + } + + if (fill.logFile.length() || fill.showLog || fill.verbose) + fill.log = true; + + return 0; +} \ No newline at end of file diff --git a/tools/assimp_cmd/Main.h b/tools/assimp_cmd/Main.h new file mode 100644 index 000000000..b749e81ab --- /dev/null +++ b/tools/assimp_cmd/Main.h @@ -0,0 +1,137 @@ +/* +--------------------------------------------------------------------------- +Open Asset Import Library (ASSIMP) +--------------------------------------------------------------------------- + +Copyright (c) 2006-2008, ASSIMP Development Team + +All rights reserved. + +Redistribution and use of this software in source and binary forms, +with or without modification, are permitted provided that the following +conditions are met: + +* Redistributions of source code must retain the above + copyright notice, this list of conditions and the + following disclaimer. + +* Redistributions in binary form must reproduce the above + copyright notice, this list of conditions and the + following disclaimer in the documentation and/or other + materials provided with the distribution. + +* Neither the name of the ASSIMP team, nor the names of its + contributors may be used to endorse or promote products + derived from this software without specific prior + written permission of the ASSIMP Development Team. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +--------------------------------------------------------------------------- +*/ + +/** @file Main.h + * @brief Utility declarations for assimp_cmd + */ + +#ifndef AICMD_MAIN_INCLUDED +#define AICMD_MAIN_INCLUDED + +#define _CRT_SECURE_NO_WARNINGS + +#include +#include +#include + +#include +#include +#include +#include +#include + +#include <../code/fast_atof.h> +#include <../code/StringComparison.h> +#include <../code/Hash.h> + +#include <../contrib/zlib/zlib.h> + +using namespace Assimp; + +// Global assimp importer instance +extern Assimp::Importer* globalImporter; + +// ------------------------------------------------------------------------------ +/** @brief Defines common import parameters + */ +struct ImportData +{ + ImportData() + : ppFlags (0) + , showLog (false) + , verbose (false) + , log (false) + {} + + /** Postprocessing flags + */ + unsigned int ppFlags; + + + // Log to std::err? + bool showLog; + + // Log file + std::string logFile; + + // Verbose log mode? + bool verbose; + + // Need to log? + bool log; +}; + +// ------------------------------------------------------------------------------ +/** @brief Process standard arguments + * + * @param fill Filled by function + * @param params Command line parameters to be processed + * @param num NUmber of params + * @return 0 for success + */ +int ProcessStandardArguments(ImportData& fill, const char** params, + unsigned int num); + +// ------------------------------------------------------------------------------ +/** @brief Import a specific model file + * @param imp Import configuration to be used + * @param path Path to the file to be opened + */ +const aiScene* ImportModel(const ImportData& imp, const std::string& path); + + +// ------------------------------------------------------------------------------ +/** @brief assimp_dump utility + * @param params Command line parameters to 'assimp dumb' + * @param Number of params + * @return 0 for success + */ +int Assimp_Dump (const char** params, unsigned int num); + +// ------------------------------------------------------------------------------ +/** @brief assimp_extract utility + * @param params Command line parameters to 'assimp extract' + * @param Number of params + * @return 0 for success + */ +int Assimp_Extract (const char** params, unsigned int num); + +#endif // !! AICMD_MAIN_INCLUDED \ No newline at end of file diff --git a/tools/assimp_cmd/WriteDumb.cpp b/tools/assimp_cmd/WriteDumb.cpp new file mode 100644 index 000000000..78b674efd --- /dev/null +++ b/tools/assimp_cmd/WriteDumb.cpp @@ -0,0 +1,1024 @@ +/* +--------------------------------------------------------------------------- +Open Asset Import Library (ASSIMP) +--------------------------------------------------------------------------- + +Copyright (c) 2006-2008, ASSIMP Development Team + +All rights reserved. + +Redistribution and use of this software in source and binary forms, +with or without modification, are permitted provided that the following +conditions are met: + +* Redistributions of source code must retain the above + copyright notice, this list of conditions and the + following disclaimer. + +* Redistributions in binary form must reproduce the above + copyright notice, this list of conditions and the + following disclaimer in the documentation and/or other + materials provided with the distribution. + +* Neither the name of the ASSIMP team, nor the names of its + contributors may be used to endorse or promote products + derived from this software without specific prior + written permission of the ASSIMP Development Team. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +--------------------------------------------------------------------------- +*/ + +/** @file WriteTextDumb.cpp + * @brief Implementation of the 'assimp dump' utility + */ + +#include "Main.h" +#include "../code/ProcessHelper.h" + +const char* AICMD_MSG_DUMP_HELP = +"todo assimp dumb help"; + +// ----------------------------------------------------------------------------------- +// Compress a binary dump file (beginning at offset head_size) +void CompressBinaryDump(const char* file, unsigned int head_size) +{ + // for simplicity ... copy the file into memory again and compress it there + FILE* p = ::fopen(file,"r"); + ::fseek(p,0,SEEK_END); + const unsigned int size = (unsigned int)::ftell(p); + ::fseek(p,0,SEEK_SET); + + if (sizemName,out); + WriteMat4x4(node->mTransformation,out); + + WriteInteger(node->mNumMeshes,out); + for (unsigned int i = 0; i < node->mNumMeshes;++i) + WriteInteger(node->mMeshes[i],out); + + WriteInteger(node->mNumChildren,out); + for (unsigned int i = 0; i < node->mNumChildren;++i) + WriteBinaryNode(node->mChildren[i],out); +} + +// ----------------------------------------------------------------------------------- +// Write the min/max values of an array of Ts to the file +template +inline void WriteBounds(const T* in, unsigned int size, FILE* out) +{ + T minc,maxc; + ArrayBounds(in,size,minc,maxc); + ::fwrite(&minc,sizeof(T),1,out); + ::fwrite(&maxc,sizeof(T),1,out); +} + +// ----------------------------------------------------------------------------------- +// Write a binary model dump +void WriteBinaryDump(const aiScene* scene, FILE* out, const char* src, const char* cmd, + bool shortened, bool compressed, ImportData& imp) +{ + time_t tt = ::time(NULL); + tm* p = ::gmtime(&tt); + + // header + ::fprintf(out,"ASSIMP.binary-dump.%s.",::asctime(p)); + // == 45 bytes + + WriteInteger(aiGetVersionMajor(),out); + WriteInteger(aiGetVersionMinor(),out); + WriteInteger(aiGetVersionRevision(),out); + WriteInteger(aiGetCompileFlags(),out); + WriteShort(shortened,out); + WriteShort(compressed,out); + // == 20 bytes + + char buff[256]; + ::strncpy(buff,src,256); + ::fwrite(buff,256,1,out); + + ::strncpy(buff,cmd,128); + ::fwrite(buff,128,1,out); + + // leave 41 bytes free for future extensions + ::memset(buff,0xcd,41); + ::fwrite(buff,32,1,out); + // == 435 bytes + + // ==== total header size: 500 bytes + // Up to here the data is uncompressed. For compressed files, the rest + // is compressed using standard DEFLATE from zlib. + + // basic scene information + WriteInteger(scene->mFlags,out); + WriteInteger(scene->mNumAnimations,out); + WriteInteger(scene->mNumTextures,out); + WriteInteger(scene->mNumMaterials,out); + WriteInteger(scene->mNumCameras,out); + WriteInteger(scene->mNumLights,out); + WriteInteger(scene->mNumMeshes,out); + + // write node graph + WriteBinaryNode(scene->mRootNode,out); + + // write materials + for (unsigned int i = 0; i< scene->mNumMaterials; ++i) { + const aiMaterial* mat = scene->mMaterials[i]; + + WriteMagic("#MA",out); + WriteInteger(mat->mNumProperties,out); + + for (unsigned int a = 0; a < mat->mNumProperties;++a) { + const aiMaterialProperty* prop = mat->mProperties[a]; + + WriteMagic("#MP",out); + WriteAiString(prop->mKey,out); + WriteInteger(prop->mSemantic,out); + WriteInteger(prop->mIndex,out); + + WriteInteger(prop->mDataLength,out); + ::fwrite(prop->mData,prop->mDataLength,1,out); + } + } + + // write cameras + for (unsigned int i = 0; i < scene->mNumCameras;++i) { + const aiCamera* cam = scene->mCameras[i]; + + WriteMagic("#CA",out); + WriteAiString(cam->mName,out); + WriteVec3(cam->mPosition,out); + WriteVec3(cam->mLookAt,out); + WriteVec3(cam->mUp,out); + WriteFloat(cam->mClipPlaneNear,out); + WriteFloat(cam->mClipPlaneFar,out); + WriteFloat(cam->mHorizontalFOV,out); + WriteFloat(cam->mAspect,out); + } + + // write lights + for (unsigned int i = 0; i < scene->mNumLights;++i) { + const aiLight* l = scene->mLights[i]; + + WriteMagic("#LI",out); + WriteAiString(l->mName,out); + WriteInteger(l->mType,out); + + WriteVec3((const aiVector3D&)l->mColorDiffuse,out); + WriteVec3((const aiVector3D&)l->mColorSpecular,out); + WriteVec3((const aiVector3D&)l->mColorAmbient,out); + + if (l->mType != aiLightSource_DIRECTIONAL) { + WriteVec3(l->mPosition,out); + WriteFloat(l->mAttenuationLinear,out); + WriteFloat(l->mAttenuationConstant,out); + WriteFloat(l->mAttenuationQuadratic,out); + } + + if (l->mType != aiLightSource_POINT) { + WriteVec3(l->mDirection,out); + } + + if (l->mType == aiLightSource_SPOT) { + WriteFloat(l->mAttenuationConstant,out); + WriteFloat(l->mAttenuationQuadratic,out); + } + } + + // write all animations + for (unsigned int i = 0; i < scene->mNumAnimations;++i) { + const aiAnimation* anim = scene->mAnimations[i]; + + WriteMagic("#AN",out); + WriteAiString (anim->mName,out); + WriteDouble (anim->mTicksPerSecond,out); + WriteDouble (anim->mDuration,out); + WriteInteger(anim->mNumChannels,out); + + for (unsigned int a = 0; a < anim->mNumChannels;++a) { + const aiNodeAnim* nd = anim->mChannels[a]; + + WriteMagic("#NA",out); + WriteAiString(nd->mNodeName,out); + WriteInteger(nd->mPreState,out); + WriteInteger(nd->mPostState,out); + WriteInteger(nd->mNumPositionKeys,out); + WriteInteger(nd->mNumRotationKeys,out); + WriteInteger(nd->mNumScalingKeys,out); + + if (nd->mPositionKeys) { + if (shortened) { + WriteBounds(nd->mPositionKeys,nd->mNumPositionKeys,out); + + } // else write as usual + else ::fwrite(nd->mPositionKeys,sizeof(aiVectorKey),nd->mNumPositionKeys,out); + } + if (nd->mRotationKeys) { + if (shortened) { + WriteBounds(nd->mRotationKeys,nd->mNumRotationKeys,out); + + } // else write as usual + else ::fwrite(nd->mRotationKeys,sizeof(aiQuatKey),nd->mNumRotationKeys,out); + } + if (nd->mScalingKeys) { + if (shortened) { + WriteBounds(nd->mScalingKeys,nd->mNumScalingKeys,out); + + } // else write as usual + else ::fwrite(nd->mScalingKeys,sizeof(aiVectorKey),nd->mNumScalingKeys,out); + } + } + } + + // write all meshes + for (unsigned int i = 0; i < scene->mNumMeshes;++i) { + const aiMesh* mesh = scene->mMeshes[i]; + + WriteMagic("#ME",out); + WriteInteger(mesh->mPrimitiveTypes,out); + WriteInteger(mesh->mNumBones,out); + WriteInteger(mesh->mNumFaces,out); + WriteInteger(mesh->mNumVertices,out); + + // write bones + if (mesh->mNumBones) { + for (unsigned int a = 0; a < mesh->mNumBones;++a) { + const aiBone* b = mesh->mBones[a]; + + WriteMagic("#BN",out); + WriteAiString(b->mName,out); + WriteMat4x4(b->mOffsetMatrix,out); + WriteInteger(b->mNumWeights,out); + + // for the moment we write dumb min/max values for the bones, too. + // maybe I'll add a better, hash-like solution later + if (shortened) { + WriteBounds(b->mWeights,b->mNumWeights,out); + } // else write as usual + else ::fwrite(b->mWeights,sizeof(aiVertexWeight),b->mNumWeights,out); + } + } + + // write faces. There are no floating-point calculations involved + // in these, so we can write a simple hash over the face data + // to the dump file. We generate a single 32 Bit hash for 512 faces + // using Assimp's standard hashing function. + if (shortened) { + unsigned int processed = 0; + for (unsigned int job;job = std::min(mesh->mNumFaces-processed,512u);processed += job) { + + unsigned int hash = 0; + for (unsigned int a = 0; a < job;++a) { + + const aiFace& f = mesh->mFaces[processed+a]; + hash = SuperFastHash((const char*)&f.mNumIndices,sizeof(unsigned int),hash); + hash = SuperFastHash((const char*) f.mIndices,f.mNumIndices*sizeof(unsigned int),hash); + } + WriteInteger(hash,out); + } + } + else // else write as usual + { + for (unsigned int i = 0; i < mesh->mNumFaces;++i) { + const aiFace& f = mesh->mFaces[i]; + + WriteInteger(f.mNumIndices,out); + for (unsigned int a = 0; a < f.mNumIndices;++a) + WriteInteger(f.mIndices[a],out); + } + } + + // first of all, write bits for all existent vertex components + unsigned int c = 0; + if (mesh->mVertices) + c |= 1; + if (mesh->mNormals) + c |= 2; + if (mesh->mTangents && mesh->mBitangents) + c |= 4; + for (unsigned int n = 0; n < AI_MAX_NUMBER_OF_TEXTURECOORDS;++n) { + if (!mesh->mTextureCoords[n])break; + c |= (8 << n); + } + for (unsigned int n = 0; n < AI_MAX_NUMBER_OF_COLOR_SETS;++n) { + if (!mesh->mColors[n])break; + c |= (16 << n); + } + WriteInteger(c,out); + + aiVector3D minVec, maxVec; + if (mesh->mVertices) { + if (shortened) { + WriteBounds(mesh->mVertices,mesh->mNumVertices,out); + } // else write as usual + else ::fwrite(mesh->mVertices,12*mesh->mNumVertices,1,out); + } + if (mesh->mNormals) { + if (shortened) { + WriteBounds(mesh->mNormals,mesh->mNumVertices,out); + } // else write as usual + else ::fwrite(mesh->mNormals,12*mesh->mNumVertices,1,out); + } + if (mesh->mTangents && mesh->mBitangents) { + if (shortened) { + WriteBounds(mesh->mTangents,mesh->mNumVertices,out); + WriteBounds(mesh->mBitangents,mesh->mNumVertices,out); + } // else write as usual + else { + ::fwrite(mesh->mTangents,12*mesh->mNumVertices,1,out); + ::fwrite(mesh->mBitangents,12*mesh->mNumVertices,1,out); + } + } + for (unsigned int n = 0; n < AI_MAX_NUMBER_OF_TEXTURECOORDS;++n) { + if (!mesh->mTextureCoords[n])break; + + // write number of UV components + WriteInteger(mesh->mNumUVComponents[n],out); + + if (shortened) { + WriteBounds(mesh->mTextureCoords[n],mesh->mNumVertices,out); + } // else write as usual + else ::fwrite(mesh->mTextureCoords[n],12*mesh->mNumVertices,1,out); + } + for (unsigned int n = 0; n < AI_MAX_NUMBER_OF_COLOR_SETS;++n) { + if (!mesh->mColors[n]) + break; + + if (shortened) { + WriteBounds(mesh->mColors[n],mesh->mNumVertices,out); + } // else write as usual + else ::fwrite(mesh->mColors[n],16*mesh->mNumVertices,1,out); + } + } +} + +// ----------------------------------------------------------------------------------- +// Convert a name to standard XML format +void ConvertName(aiString& out, const aiString& in) +{ + out.length = 0; + for (unsigned int i = 0; i < in.length; ++i) { + switch (in.data[i]) { + case '<': + out.Append("<");break; + case '>': + out.Append(">");break; + case '&': + out.Append("&");break; + case '\"': + out.Append(""");break; + case '\'': + out.Append("'");break; + default: + out.data[out.length++] = in.data[i]; + } + } + out.data[out.length] = 0; +} + +// ----------------------------------------------------------------------------------- +// Write a single node as text dump +void WriteNode(const aiNode* node, FILE* out, unsigned int depth) +{ + char prefix[512]; + for (unsigned int i = 0; i < depth;++i) + prefix[i] = '\t'; + prefix[depth] = '\0'; + + const aiMatrix4x4& m = node->mTransformation; + + aiString name; + ConvertName(name,node->mName); + ::fprintf(out,"%s \n" + "%s\t \n" + "%s\t\t%0 6f %0 6f %0 6f %0 6f\n" + "%s\t\t%0 6f %0 6f %0 6f %0 6f\n" + "%s\t\t%0 6f %0 6f %0 6f %0 6f\n" + "%s\t\t%0 6f %0 6f %0 6f %0 6f\n" + "%s\t \n", + prefix,name.data,prefix, + prefix,m.a1,m.a2,m.a3,m.a4, + prefix,m.b1,m.b2,m.b3,m.b4, + prefix,m.c1,m.c2,m.c3,m.c4, + prefix,m.d1,m.d2,m.d3,m.d4,prefix); + + if (node->mNumMeshes) { + ::fprintf(out, "%s\t\n%s\t", + prefix,node->mNumMeshes,prefix); + + for (unsigned int i = 0; i < node->mNumMeshes;++i) { + ::fprintf(out,"%i ",node->mMeshes[i]); + } + ::fprintf(out,"\n%s\t\n",prefix); + } + + ::fprintf(out,"%s\t%i\n", + prefix,node->mNumChildren); + + for (unsigned int i = 0; i < node->mNumChildren;++i) + WriteNode(node->mChildren[i],out,depth+1); + + ::fprintf(out,"%s\n",prefix); +} + +// ----------------------------------------------------------------------------------- +// Write a text model dump +void WriteDump(const aiScene* scene, FILE* out, const char* src, const char* cmd, bool shortened) +{ + time_t tt = ::time(NULL); + tm* p = ::gmtime(&tt); + + aiString name; + + // write header + ::fprintf(out, + "\n" + "\n\n" + + "" + " \n\n" + "\n", + + aiGetVersionMajor(),aiGetVersionMinor(),aiGetVersionRevision(),src,cmd,::asctime(p), + scene->mNumMeshes, scene->mNumMaterials,scene->mNumTextures, + scene->mNumCameras,scene->mNumLights,scene->mNumAnimations); + + // write the node graph + WriteNode(scene->mRootNode, out, 1); + + // write cameras + for (unsigned int i = 0; i < scene->mNumCameras;++i) { + aiCamera* cam = scene->mCameras[i]; + ConvertName(name,cam->mName); + + // camera header + ::fprintf(out,"\t\n" + "\t\t %0 8f %0 8f %0 8f \n" + "\t\t %0 8f %0 8f %0 8f \n" + "\t\t %0 8f %0 8f %0 8f \n" + "\t\t %f \n" + "\t\t %f \n" + "\t\t %f \n" + "\t\t %f \n" + "\t\n", + name.data, + cam->mUp.x,cam->mUp.y,cam->mUp.z, + cam->mLookAt.x,cam->mLookAt.y,cam->mLookAt.z, + cam->mPosition.x,cam->mPosition.y,cam->mPosition.z, + cam->mHorizontalFOV,cam->mAspect,cam->mClipPlaneNear,cam->mClipPlaneFar,i); + } + + // write lights + for (unsigned int i = 0; i < scene->mNumLights;++i) { + aiLight* l = scene->mLights[i]; + ConvertName(name,l->mName); + + // light header + ::fprintf(out,"\t type=\"%s\"\n" + "\t\t %0 8f %0 8f %0 8f \n" + "\t\t %0 8f %0 8f %0 8f \n" + "\t\t %0 8f %0 8f %0 8f \n", + name.data, + (l->mType == aiLightSource_DIRECTIONAL ? "directional" : + (l->mType == aiLightSource_POINT ? "point" : "spot" )), + l->mColorDiffuse.r, l->mColorDiffuse.g, l->mColorDiffuse.b, + l->mColorSpecular.r,l->mColorSpecular.g,l->mColorSpecular.b, + l->mColorAmbient.r, l->mColorAmbient.g, l->mColorAmbient.b); + + if (l->mType != aiLightSource_DIRECTIONAL) { + ::fprintf(out, + "\t\t %0 8f %0 8f %0 8f \n" + "\t\t %f \n" + "\t\t %f \n" + "\t\t %f \n", + l->mPosition.x,l->mPosition.y,l->mPosition.z, + l->mAttenuationConstant,l->mAttenuationLinear,l->mAttenuationQuadratic); + } + + if (l->mType != aiLightSource_POINT) { + ::fprintf(out, + "\t\t %0 8f %0 8f %0 8f \n", + l->mDirection.x,l->mDirection.y,l->mDirection.z); + } + + if (l->mType == aiLightSource_SPOT) { + ::fprintf(out, + "\t\t %f \n" + "\t\t %f \n", + l->mAngleOuterCone,l->mAngleInnerCone); + } + ::fprintf(out,"\t\n"); + } + + // write textures + for (unsigned int i = 0; i < scene->mNumTextures;++i) { + aiTexture* tex = scene->mTextures[i]; + bool compressed = (tex->mHeight == 0); + + // mesh header + ::fprintf(out,"\t \n" + "\t\t %i \n", + "\t\t %i \n", + "\t\t %s \n", + (compressed ? -1 : tex->mWidth),(compressed ? -1 : tex->mHeight), + (compressed ? "true" : "false")); + + if (compressed) { + ::fprintf(out,"\t\t %i \n",tex->mWidth); + + if (!shortened) { + for (unsigned int n = 0; n < tex->mWidth;++n) { + ::fprintf(out,"\t\t\t%2x",tex->pcData[n]); + if (n && !(n % 50)) + ::fprintf(out,"\n"); + } + } + } + else if (!shortened){ + ::fprintf(out,"\t\t %i \n",tex->mWidth*tex->mHeight*4); + + const unsigned int width = (unsigned int)log10((double)std::max(tex->mHeight,tex->mWidth))+1; + for (unsigned int y = 0; y < tex->mHeight;++y) { + for (unsigned int x = 0; x < tex->mWidth;++x) { + aiTexel* tx = tex->pcData + y*tex->mWidth+x; + unsigned int r = tx->r,g=tx->g,b=tx->b,a=tx->a; + ::fprintf(out,"\t\t\t%2x %2x %2x %2x",r,g,b,a); + + // group by four for readibility + if (0 == (x+y*tex->mWidth) % 4) + ::fprintf(out,"\n"); + } + } + } + ::fprintf(out,"\t\t\n\t\n"); + } + + // write materials + for (unsigned int i = 0; i< scene->mNumMaterials; ++i) { + const aiMaterial* mat = scene->mMaterials[i]; + + ::fprintf(out, + "\t\n",mat->mNumProperties); + + for (unsigned int n = 0; n < mat->mNumProperties;++n) { + const aiMaterialProperty* prop = mat->mProperties[n]; + + const char* sz = ""; + if (prop->mType == aiPTI_Float) + sz = "float"; + else if (prop->mType == aiPTI_Integer) + sz = "integer"; + else if (prop->mType == aiPTI_String) + sz = "string"; + else if (prop->mType == aiPTI_Buffer) + sz = "binary_buffer"; + + ::fprintf(out, + "\t\tmKey.data, sz, + TextureTypeToString((aiTextureType)prop->mSemantic),prop->mIndex); + + if (prop->mType == aiPTI_Float) { + ::fprintf(out, + " size=\"%i\">\n\t\t\t", + prop->mDataLength/sizeof(float)); + + for (unsigned int p = 0; p < prop->mDataLength/sizeof(float);++p) + ::fprintf(out,"%f ",*((float*)(prop->mData+p*sizeof(float)))); + } + else if (prop->mType == aiPTI_Integer) { + ::fprintf(out, + " size=\"%i\">\n\t\t\t", + prop->mDataLength/sizeof(int)); + + for (unsigned int p = 0; p < prop->mDataLength/sizeof(int);++p) + ::fprintf(out,"%i ",*((int*)(prop->mData+p*sizeof(int)))); + } + else if (prop->mType == aiPTI_Buffer) { + ::fprintf(out, + " size=\"%i\">\n\t\t\t", + prop->mDataLength); + + for (unsigned int p = 0; p < prop->mDataLength;++p) { + ::fprintf(out,"%2x ",prop->mData[p]); + if (p && 0 == p%30) + ::fprintf(out,"\n\t\t\t"); + } + } + else if (prop->mType == aiPTI_String) { + ::fprintf(out,">\n\t\t\t\"%s\"",prop->mData+4 /* skip length */); + } + ::fprintf(out,"\n\t\t\n"); + } + ::fprintf(out,"\t\n"); + } + + // write animations + for (unsigned int i = 0; i < scene->mNumAnimations;++i) { + aiAnimation* anim = scene->mAnimations[i]; + + // anim header + ConvertName(name,anim->mName); + ::fprintf(out,"\t\n" + "\t\t %i \n" + "\t\t %e \n" + "\t\t %e \n", + name.data, anim->mNumChannels,anim->mDuration, anim->mTicksPerSecond); + + // write bone animation channels + for (unsigned int n = 0; n < anim->mNumChannels;++n) { + aiNodeAnim* nd = anim->mChannels[n]; + + // node anim header + ConvertName(name,nd->mNodeName); + ::fprintf(out,"\t\t\n" + "\t\t\t %i \n" + "\t\t\t %i \n" + "\t\t\t %i \n", + name.data,nd->mNumPositionKeys,nd->mNumScalingKeys,nd->mNumRotationKeys); + + if (!shortened) { + // write position keys + for (unsigned int a = 0; a < nd->mNumPositionKeys;++a) { + aiVectorKey* vc = nd->mPositionKeys+a; + ::fprintf(out,"\t\t\t\n" + "\t\t\t\t%0 8f %0 8f %0 8f\n\t\t\t\n", + vc->mTime,vc->mValue.x,vc->mValue.y,vc->mValue.z,a); + } + + // write scaling keys + for (unsigned int a = 0; a < nd->mNumScalingKeys;++a) { + aiVectorKey* vc = nd->mScalingKeys+a; + ::fprintf(out,"\t\t\t\n" + "\t\t\t\t%0 8f %0 8f %0 8f\n\t\t\t\n", + vc->mTime,vc->mValue.x,vc->mValue.y,vc->mValue.z,a); + } + + // write rotation keys + for (unsigned int a = 0; a < nd->mNumRotationKeys;++a) { + aiQuatKey* vc = nd->mRotationKeys+a; + ::fprintf(out,"\t\t\t\n" + "\t\t\t\t%0 8f %0 8f %0 8f %0 8f\n\t\t\t\n", + vc->mTime,vc->mValue.x,vc->mValue.y,vc->mValue.z,vc->mValue.w,a); + } + } + ::fprintf(out,"\t\t\n",n); + } + ::fprintf(out,"\t\n",i); + } + + // write meshes + for (unsigned int i = 0; i < scene->mNumMeshes;++i) { + aiMesh* mesh = scene->mMeshes[i]; + const unsigned int width = (unsigned int)log10((double)mesh->mNumVertices)+1; + + // mesh header + ::fprintf(out,"\t\n" + "\t\t %i \n" + "\t\t %i \n", + (mesh->mPrimitiveTypes & aiPrimitiveType_POINT ? "points" : ""), + (mesh->mPrimitiveTypes & aiPrimitiveType_LINE ? "lines" : ""), + (mesh->mPrimitiveTypes & aiPrimitiveType_TRIANGLE ? "triangles" : ""), + (mesh->mPrimitiveTypes & aiPrimitiveType_POLYGON ? "polygons" : ""), + mesh->mNumVertices,mesh->mNumFaces); + + // bones + for (unsigned int n = 0; n < mesh->mNumBones;++n) { + aiBone* bone = mesh->mBones[n]; + + ConvertName(name,bone->mName); + // bone header + ::fprintf(out,"\t\t\n" + "\t\t\t \n" + "\t\t\t\t%0 6f %0 6f %0 6f %0 6f\n" + "\t\t\t\t%0 6f %0 6f %0 6f %0 6f\n" + "\t\t\t\t%0 6f %0 6f %0 6f %0 6f\n" + "\t\t\t\t%0 6f %0 6f %0 6f %0 6f\n" + "\t\t\t \n" + "\t\t\t %i \n", + name.data, + bone->mOffsetMatrix.a1,bone->mOffsetMatrix.a2,bone->mOffsetMatrix.a3,bone->mOffsetMatrix.a4, + bone->mOffsetMatrix.b1,bone->mOffsetMatrix.b2,bone->mOffsetMatrix.b3,bone->mOffsetMatrix.b4, + bone->mOffsetMatrix.c1,bone->mOffsetMatrix.c2,bone->mOffsetMatrix.c3,bone->mOffsetMatrix.c4, + bone->mOffsetMatrix.d1,bone->mOffsetMatrix.d2,bone->mOffsetMatrix.d3,bone->mOffsetMatrix.d4, + bone->mNumWeights); + + if (!shortened) { + // bone weights + for (unsigned int a = 0; a < bone->mNumWeights;++a) { + aiVertexWeight* wght = bone->mWeights+a; + + ::fprintf(out,"\t\t\t\n\t\t\t\t%f\n\t\t\t\n", + wght->mVertexId,wght->mWeight); + } + } + ::fprintf(out,"\t\t\n",n); + } + + // faces + if (!shortened) { + for (unsigned int n = 0; n < mesh->mNumFaces; ++n) { + aiFace& f = mesh->mFaces[n]; + ::fprintf(out,"\t\t\n" + "\t\t\t",f.mNumIndices); + + for (unsigned int j = 0; j < f.mNumIndices;++j) + ::fprintf(out,"%i ",f.mIndices[j]); + + ::fprintf(out,"\n\t\t\n"); + } + } + + // vertex positions + if (mesh->HasPositions()) { + ::fprintf(out,"\t\t \n"); + if (!shortened) { + for (unsigned int n = 0; n < mesh->mNumVertices; ++n) { + ::fprintf(out,"\t\t%0 8f %0 8f %0 8f\n", + mesh->mVertices[n].x, + mesh->mVertices[n].y, + mesh->mVertices[n].z); + } + } + else { + } + ::fprintf(out,"\t\t\n"); + } + + // vertex normals + if (mesh->HasNormals()) { + ::fprintf(out,"\t\t \n"); + if (!shortened) { + for (unsigned int n = 0; n < mesh->mNumVertices; ++n) { + ::fprintf(out,"\t\t%0 8f %0 8f %0 8f\n", + mesh->mNormals[n].x, + mesh->mNormals[n].y, + mesh->mNormals[n].z); + } + } + else { + } + ::fprintf(out,"\t\t\n"); + } + + // vertex tangents and bitangents + if (mesh->HasTangentsAndBitangents()) { + ::fprintf(out,"\t\t \n"); + if (!shortened) { + for (unsigned int n = 0; n < mesh->mNumVertices; ++n) { + ::fprintf(out,"\t\t%0 8f %0 8f %0 8f \t %0 8f %0 8f %0 8f\n", + mesh->mTangents[n].x, + mesh->mTangents[n].y, + mesh->mTangents[n].z, + mesh->mBitangents[n].x, + mesh->mBitangents[n].y, + mesh->mBitangents[n].z); + } + } + else { + } + ::fprintf(out,"\t\t\n"); + } + + // texture coordinates + for (unsigned int a = 0; a < AI_MAX_NUMBER_OF_TEXTURECOORDS; ++a) { + if (!mesh->mTextureCoords[a]) + break; + + ::fprintf(out,"\t\t \n",mesh->mNumUVComponents[a]); + if (!shortened) { + for (unsigned int n = 0; n < mesh->mNumVertices; ++n) { + ::fprintf(out,"\t\t%0 8f %0 8f %0 8f\n", + mesh->mTextureCoords[a][n].x, + mesh->mTextureCoords[a][n].y, + mesh->mTextureCoords[a][n].z); + } + } + else { + } + ::fprintf(out,"\t\t\n"); + } + + // vertex colors + for (unsigned int a = 0; a < AI_MAX_NUMBER_OF_COLOR_SETS; ++a) { + if (!mesh->mColors[a]) + break; + ::fprintf(out,"\t\t \n"); + if (!shortened) { + for (unsigned int n = 0; n < mesh->mNumVertices; ++n) { + ::fprintf(out,"\t\t%0 8f %0 8f %0 8f %0 8f\n", + mesh->mColors[a][n].r, + mesh->mColors[a][n].g, + mesh->mColors[a][n].b, + mesh->mColors[a][n].a); + } + } + else { + } + ::fprintf(out,"\t\t\n"); + } + ::fprintf(out,"\t\n"); + } + ::fprintf(out,"\n"); +} + + +// ----------------------------------------------------------------------------------- +int Assimp_Dump (const char** params, unsigned int num) +{ + if (num < 1) { + ::printf("assimp dump: Invalid number of arguments. See \'assimp extract --help\'\r\n"); + return 1; + } + + // --help + if (!::strcmp( params[0], "-h") || !::strcmp( params[0], "--help") || !::strcmp( params[0], "-?") ) { + printf(AICMD_MSG_DUMP_HELP); + return 0; + } + + // asssimp dump in out [options] + if (num < 1) { + ::printf("assimp dump: Invalid number of arguments. See \'assimp dump --help\'\r\n"); + return 1; + } + + std::string in = std::string(params[0]); + std::string out = (num > 1 ? std::string(params[1]) : std::string("-")); + + // store full command line + std::string cmd; + for (unsigned int i = (out[0] == '-' ? 1 : 2); i < num;++i) { + if (!params[i])continue; + cmd.append(params[i]); + cmd.append(" "); + } + + // get import flags + ImportData import; + ProcessStandardArguments(import,params+1,num-1); + + bool binary = false, shortened = false,compressed=false; + + // process other flags + for (unsigned int i = 1; i < num;++i) { + if (!params[i])continue; + if (!::strcmp( params[i], "-b") || !::strcmp( params[i], "--binary")) { + binary = true; + } + else if (!::strcmp( params[i], "-s") || !::strcmp( params[i], "--short")) { + shortened = true; + } + else if (!::strcmp( params[i], "-z") || !::strcmp( params[i], "--compressed")) { + compressed = true; + } + else if (i > 2 || params[i][0] == '-') { + ::printf("Unknown parameter: %s\n",params[i]); + return 10; + } + } + + if (out[0] == '-') { + + // take file name from input file + std::string::size_type s = in.find_last_of('.'); + if (s == std::string::npos) + s = in.length(); + + out = in.substr(0,s); + out.append((binary ? ".assfile" : ".xml")); + if (shortened && binary) + out.append(".regress"); + } + + // import the main model + const aiScene* scene = ImportModel(import,in); + if (!scene) { + ::printf("assimp dump: Unable to load input file %s\n",in.c_str()); + return 5; + } + + // open the output file and build the dump + FILE* o = ::fopen(out.c_str(),(binary ? "wb" : "wt")); + if (!o) { + ::printf("assimp dump: Unable to open output file %s\n",out.c_str()); + return 12; + } + + if (binary) + WriteBinaryDump (scene,o,in.c_str(),cmd.c_str(),shortened,compressed,import); + else WriteDump (scene,o,in.c_str(),cmd.c_str(),shortened); + ::fclose(o); + + if (compressed && binary) + CompressBinaryDump(out.c_str(),500); + + ::printf("assimp dump: Wrote output dump %s\n",out.c_str()); + return 0; +} + diff --git a/tools/assimp_cmd/assimp_cmd.rc b/tools/assimp_cmd/assimp_cmd.rc new file mode 100644 index 000000000..96f18afff --- /dev/null +++ b/tools/assimp_cmd/assimp_cmd.rc @@ -0,0 +1,88 @@ +// Microsoft Visual C++ generated resource script. +// +#include "resource.h" +#include "../../mkutil/revision.h" + +#define APSTUDIO_READONLY_SYMBOLS +///////////////////////////////////////////////////////////////////////////// +// +// Generated from the TEXTINCLUDE 2 resource. +// +#define APSTUDIO_HIDDEN_SYMBOLS +#include "windows.h" +#undef APSTUDIO_HIDDEN_SYMBOLS + +///////////////////////////////////////////////////////////////////////////// +#undef APSTUDIO_READONLY_SYMBOLS + +///////////////////////////////////////////////////////////////////////////// +// Deutsch (Deutschland) resources + +#if !defined(AFX_RESOURCE_DLL) || defined(AFX_TARG_DEU) +#ifdef _WIN32 +LANGUAGE LANG_GERMAN, SUBLANG_GERMAN +#pragma code_page(1252) +#endif //_WIN32 + +///////////////////////////////////////////////////////////////////////////// +// +// Icon +// + +// Icon with lowest ID value placed first to ensure application icon +// remains consistent on all systems. +IDI_ASSIMP_VIEW ICON "../shared/assimp_tools_icon.ico" + + + + +///////////////////////////////////////////////////////////////////////////// +// +// Version +// + +VS_VERSION_INFO VERSIONINFO + FILEVERSION 1,0,SVNRevision,0 + PRODUCTVERSION 1,0,SVNRevision,1 + FILEFLAGSMASK 0x17L +#ifdef _DEBUG + FILEFLAGS 0x1L +#else + FILEFLAGS 0x0L +#endif + FILEOS 0x4L + FILETYPE 0x0L + FILESUBTYPE 0x0L +BEGIN + BLOCK "StringFileInfo" + BEGIN + BLOCK "040704b0" + BEGIN + VALUE "CompanyName", "ASSIMP Development Team" + VALUE "FileDescription", "ASSIMP Command-line Tools" + VALUE "FileVersion", "1, 0, SVNRevision, 0" + VALUE "InternalName", "assimp_view" + VALUE "LegalCopyright", "Licensed under the LGPL" + VALUE "OriginalFilename", "assimp_cmd32.exe" + VALUE "ProductName", "ASSIMP Command-line Tools" + VALUE "ProductVersion", "1, 0, SVNRevision, 0" + END + END + BLOCK "VarFileInfo" + BEGIN + VALUE "Translation", 0x407, 1200 + END +END + + + +#ifndef APSTUDIO_INVOKED +///////////////////////////////////////////////////////////////////////////// +// +// Generated from the TEXTINCLUDE 3 resource. +// + + +///////////////////////////////////////////////////////////////////////////// +#endif // not APSTUDIO_INVOKED +#endif diff --git a/tools/assimp_cmd/makefile b/tools/assimp_cmd/makefile new file mode 100644 index 000000000..413f6859d --- /dev/null +++ b/tools/assimp_cmd/makefile @@ -0,0 +1,63 @@ + +# --------------------------------------------------------------------------- +# Makefile for assimp_cmd +# aramis_acg@users.sourceforge.net +# +# Usage: make + +# TARGETS: +# all Build assimp_cmd tool and assimp if necessary +# clean Cleanup all object files, including those from core +# cleanme Cleanup only my object files + +# MACROS: (make clean before you change one) +# NOBOOST=1 Build Assimp against boost workaround +# SINGLETHREADED=1 Build Assimp single-threaded library +# DEBUG=1 Build debug build of Assimp library +# --------------------------------------------------------------------------- + + +# C++ object files +OBJECTS := $(patsubst %.cpp,%.o, $(wildcard *.cpp)) + + +# Include flags for gcc +INCLUDEFLAGS = -I../../include + +# Library flags for gcc +LIBRARYFLAGS = -L../../bin/gcc/ + +# Preprocessor defines for gcc +DEFINEFLAGS = + +# GCC compiler flags +CPPFLAGS=-Wall + + +# Setup environment for debug build +ifeq ($(DEBUG),1) + DEFINEFLAGS += -D_DEBUG -DDEBUG +else + CPPFLAGS += -o3 + DEFINEFLAGS += -DNDEBUG -D_NDEBUG +endif + +# Output path of executable +OUTPUT = ../../bin/gcc/assimp + + +all: $(OBJECTS) + cd ../../code/ && $(MAKE) static + gcc -s -o$(OUTPUT) $(OBJECTS) $(LIBRARYFLAGS) -lassimp -lstdc++ + +%.o:%.cpp + $(CXX) -g -c $(CPPFLAGS) $? -o $@ $(INCLUDEFLAGS) $(DEFINEFLAGS) + +.PHONY: clean +clean: + -del *.o + cd ../../code/ && $(MAKE) clean + +.PHONY: cleanme +cleanme: + -del *.o \ No newline at end of file diff --git a/tools/assimp_cmd/makefile.mingw b/tools/assimp_cmd/makefile.mingw new file mode 100644 index 000000000..6252ea568 --- /dev/null +++ b/tools/assimp_cmd/makefile.mingw @@ -0,0 +1,61 @@ + +# --------------------------------------------------------------------------- +# Makefile for assimp_cmd (MinGW32-make) +# aramis_acg@users.sourceforge.net +# +# Usage: mingw32-make -f makefile.mingw + +# TARGETS: +# all Build assimp_cmd tool and assimp if necessary +# clean Cleanup all object files, including those from core +# cleanme Cleanup only my object files + +# MACROS: (make clean before you change one) +# NOBOOST=1 Build Assimp against boost workaround +# SINGLETHREADED=1 Build Assimp single-threaded library +# DEBUG=1 Build debug build of Assimp library +# --------------------------------------------------------------------------- + + +# C++ object files +OBJECTS := $(patsubst %.cpp,%.o, $(wildcard *.cpp)) + +# Include flags for gcc +INCLUDEFLAGS = -I../../include + +# Library flags for gcc +LIBRARYFLAGS = -L../../bin/mingw/ + +# Preprocessor defines for gcc +DEFINEFLAGS = + +# GCC compiler flags +CPPFLAGS=-Wall + + +# Setup environment for debug build +ifeq ($(DEBUG),1) + DEFINEFLAGS += -D_DEBUG -DDEBUG +else + CPPFLAGS += -o3 + DEFINEFLAGS += -DNDEBUG -D_NDEBUG +endif + +# Output path of executable +OUTPUT = ../../bin/mingw/assimp + +all: $(OBJECTS) + cd ../../code/ && $(MAKE) -fmakefile.mingw static + gcc -s -o$(OUTPUT) $(OBJECTS) $(LIBRARYFLAGS) -lassimp -lstdc++ + +%.o:%.cpp + $(CXX) -g -c $(CPPFLAGS) $? -o $@ $(INCLUDEFLAGS) $(DEFINEFLAGS) + +.PHONY: clean +clean: + -del *.o + cd ../../code/ && $(MAKE) -fmakefile.mingw clean + +.PHONY: cleanme +cleanme: + -del *.o \ No newline at end of file diff --git a/tools/assimp_cmd/resource.h b/tools/assimp_cmd/resource.h new file mode 100644 index 000000000..e5af4f18e --- /dev/null +++ b/tools/assimp_cmd/resource.h @@ -0,0 +1,21 @@ +//{{NO_DEPENDENCIES}} +// Microsoft Visual C++ generated include file. +// Used by assimp_view.rc +// +#define IDC_MYICON 2 +#define IDD_ASSIMP_VIEW_DIALOG 102 +#define IDD_ABOUTBOX 103 +#define IDI_ASSIMP_VIEW 107 + + +// Next default values for new objects +// +#ifdef APSTUDIO_INVOKED +#ifndef APSTUDIO_READONLY_SYMBOLS +#define _APS_NO_MFC 1 +#define _APS_NEXT_RESOURCE_VALUE 159 +#define _APS_NEXT_COMMAND_VALUE 32831 +#define _APS_NEXT_CONTROL_VALUE 1052 +#define _APS_NEXT_SYMED_VALUE 110 +#endif +#endif diff --git a/tools/assimp_view/Background.cpp b/tools/assimp_view/Background.cpp index 02219022e..c852280fb 100644 --- a/tools/assimp_view/Background.cpp +++ b/tools/assimp_view/Background.cpp @@ -440,7 +440,7 @@ void CBackgroundPainter::RecreateNativeResource() (UINT)g_szSkyboxShader.length(), NULL, NULL, - D3DXSHADER_USE_LEGACY_D3DX9_31_DLL, + AI_SHADER_COMPILE_FLAGS, NULL, &piSkyBoxEffect,&piBuffer))) { diff --git a/tools/assimp_view/Material.cpp b/tools/assimp_view/Material.cpp index 9e3ce7dc5..9d7bef816 100644 --- a/tools/assimp_view/Material.cpp +++ b/tools/assimp_view/Material.cpp @@ -280,10 +280,6 @@ int CMaterialManager::FindValidPath(aiString* p_szString) if (!pFile) { if(TryLongerPath(szTemp, p_szString))return 1; - - // still unable to load ... however, don't spew - // an error message here, simply let it and wait for - // D3DXCreateTextureFromFileEx() to fail ;-) } return 0; } @@ -1354,4 +1350,4 @@ int CMaterialManager::EndMaterial (AssetHelper::MeshHelper* pcMesh) return 1; } -}; // end namespace AssimpView \ No newline at end of file +}; // end namespace AssimpView diff --git a/tools/assimp_view/MessageProc.cpp b/tools/assimp_view/MessageProc.cpp index 2c30d7264..ae448d95e 100644 --- a/tools/assimp_view/MessageProc.cpp +++ b/tools/assimp_view/MessageProc.cpp @@ -1571,7 +1571,69 @@ INT_PTR CALLBACK MessageProc(HWND hwndDlg,UINT uMsg, DragQueryFile(hDrop,0,szFile,sizeof(szFile)); const char* sz = strrchr(szFile,'.'); - if (sz && 0 != aiIsExtensionSupported(sz)) + if (!sz) + sz = szFile; + + if (CDisplay::VIEWMODE_TEXTURE == CDisplay::Instance().GetViewMode()) + { + // replace the selected texture with the new one ... + CDisplay::Instance().ReplaceCurrentTexture(szFile); + } + else + { + // check whether it is a typical texture file format ... + ++sz; + if (0 == ASSIMP_stricmp(sz,"png") || + 0 == ASSIMP_stricmp(sz,"bmp") || + 0 == ASSIMP_stricmp(sz,"jpg") || + 0 == ASSIMP_stricmp(sz,"tga") || + 0 == ASSIMP_stricmp(sz,"tif") || + 0 == ASSIMP_stricmp(sz,"hdr") || + 0 == ASSIMP_stricmp(sz,"ppm") || + 0 == ASSIMP_stricmp(sz,"pfm")) + { + CBackgroundPainter::Instance().SetTextureBG(szFile); + } + else if (0 == Assimp::ASSIMP_stricmp(sz,"dds")) + { + // DDS files could contain skyboxes, but they could also + // contain normal 2D textures. The easiest way to find this + // out is to open the file and check the header ... + FILE* pFile = fopen(szFile,"rb"); + if (!pFile) + return TRUE; + + // header of a dds file (begin) + /* + DWORD dwMagic + DWORD dwSize + DWORD dwFlags + DWORD dwHeight + DWORD dwWidth + DWORD dwPitchOrLinearSize + DWORD dwDepth + DWORD dwMipMapCount -> total with this: 32 + DWORD dwReserved1[11] -> total with this: 76 + DDPIXELFORMAT ddpfPixelFormat -> total with this: 108 + DWORD dwCaps1; -> total with this: 112 + DWORD dwCaps2; ---< here we are! + */ + DWORD dwCaps = 0; + fseek(pFile,112,SEEK_SET); + fread(&dwCaps,4,1,pFile); + + if (dwCaps & 0x00000400L /* DDSCAPS2_CUBEMAP_POSITIVEX */) + { + CLogDisplay::Instance().AddEntry( + "[INFO] Assuming this dds file is a skybox ...", + D3DCOLOR_ARGB(0xFF,0xFF,0xFF,0)); + + CBackgroundPainter::Instance().SetCubeMapBG(szFile); + } + else CBackgroundPainter::Instance().SetTextureBG(szFile); + fclose(pFile); + } + else { strcpy(g_szFileName,szFile); @@ -1580,75 +1642,8 @@ INT_PTR CALLBACK MessageProc(HWND hwndDlg,UINT uMsg, UpdateHistory(); SaveHistory(); } - else if (CDisplay::VIEWMODE_TEXTURE == CDisplay::Instance().GetViewMode()) - { - // replace the selected texture with the new one ... - CDisplay::Instance().ReplaceCurrentTexture(szFile); - } - else - { - if (!sz) goto __DRUNKEN_ALIEN_FROM_MARS; - - // check whether it is a typical texture file format ... - ++sz; - if (0 == ASSIMP_stricmp(sz,"png") || - 0 == ASSIMP_stricmp(sz,"bmp") || - 0 == ASSIMP_stricmp(sz,"jpg") || - 0 == ASSIMP_stricmp(sz,"tga") || - 0 == ASSIMP_stricmp(sz,"tif") || - 0 == ASSIMP_stricmp(sz,"hdr") || - 0 == ASSIMP_stricmp(sz,"ppm") || - 0 == ASSIMP_stricmp(sz,"pfm")) - { - CBackgroundPainter::Instance().SetTextureBG(szFile); - } - else if (0 == Assimp::ASSIMP_stricmp(sz,"dds")) - { - // DDS files could contain skyboxes, but they could also - // contain normal 2D textures. The easiest way to find this - // out is to open the file and check the header ... - FILE* pFile = fopen(szFile,"rb"); - if (!pFile)goto __DRUNKEN_ALIEN_FROM_MARS; - - // header of a dds file (begin) - /* - DWORD dwMagic - DWORD dwSize - DWORD dwFlags - DWORD dwHeight - DWORD dwWidth - DWORD dwPitchOrLinearSize - DWORD dwDepth - DWORD dwMipMapCount -> total with this: 32 - DWORD dwReserved1[11] -> total with this: 76 - DDPIXELFORMAT ddpfPixelFormat -> total with this: 108 - DWORD dwCaps1; -> total with this: 112 - DWORD dwCaps2; ---< here we are! - */ - DWORD dwCaps = 0; - fseek(pFile,112,SEEK_SET); - fread(&dwCaps,4,1,pFile); - - if (dwCaps & 0x00000400L /* DDSCAPS2_CUBEMAP_POSITIVEX */) - { - CLogDisplay::Instance().AddEntry( - "[INFO] Assuming this dds file is a skybox ...", - D3DCOLOR_ARGB(0xFF,0xFF,0xFF,0)); - - CBackgroundPainter::Instance().SetCubeMapBG(szFile); - } - else CBackgroundPainter::Instance().SetTextureBG(szFile); - fclose(pFile); - } - else - { -__DRUNKEN_ALIEN_FROM_MARS: - CLogDisplay::Instance().AddEntry( - "[ERROR] File extension is not supported. E.T. can read this.", - D3DCOLOR_ARGB(0xFF,0xFF,0,0)); - } - } - DragFinish(hDrop); + } + DragFinish(hDrop); } return TRUE; diff --git a/tools/assimp_view/assimp_view.cpp b/tools/assimp_view/assimp_view.cpp index cc3b99eda..cd3be8595 100644 --- a/tools/assimp_view/assimp_view.cpp +++ b/tools/assimp_view/assimp_view.cpp @@ -128,6 +128,9 @@ DWORD WINAPI LoadThreadProc(LPVOID lpParameter) // get current time double fCur = (double)timeGetTime(); + aiSetImportPropertyInteger(AI_CONFIG_IMPORT_TER_MAKE_UVS,1); + //aiSetImportPropertyInteger(AI_CONFIG_PP_PTV_KEEP_HIERARCHY,1); + // Call ASSIMPs C-API to load the file g_pcAsset->pcScene = (aiScene*)aiImportFile(g_szFileName, aiProcess_CalcTangentSpace | // calculate tangents and bitangents if possible @@ -145,6 +148,7 @@ DWORD WINAPI LoadThreadProc(LPVOID lpParameter) aiProcess_GenUVCoords | // convert spherical, cylindrical, box and planar mapping to proper UVs aiProcess_TransformUVCoords | // preprocess UV transformations (scaling, translation ...) aiProcess_FindInstances | // search for instanced meshes and remove them by references to one master +// aiProcess_PreTransformVertices | 0); // get the end time of zje operation, calculate delta t @@ -1012,7 +1016,7 @@ int CreateDevice (bool p_bMultiSample,bool p_bSuperSample,bool bHW /*= true*/) (UINT)g_szDefaultShader.length(), NULL, NULL, - D3DXSHADER_USE_LEGACY_D3DX9_31_DLL, + AI_SHADER_COMPILE_FLAGS, NULL, &g_piDefaultEffect,&piBuffer))) { @@ -1036,7 +1040,7 @@ int CreateDevice (bool p_bMultiSample,bool p_bSuperSample,bool bHW /*= true*/) // create the shader used to draw the HUD if(FAILED( D3DXCreateEffect(g_piDevice, g_szPassThroughShader.c_str(),(UINT)g_szPassThroughShader.length(), - NULL,NULL,D3DXSHADER_USE_LEGACY_D3DX9_31_DLL,NULL,&g_piPassThroughEffect,&piBuffer))) + NULL,NULL,AI_SHADER_COMPILE_FLAGS,NULL,&g_piPassThroughEffect,&piBuffer))) { if( piBuffer) { @@ -1058,7 +1062,7 @@ int CreateDevice (bool p_bMultiSample,bool p_bSuperSample,bool bHW /*= true*/) // create the shader used to visualize normal vectors if(FAILED( D3DXCreateEffect(g_piDevice, g_szNormalsShader.c_str(),(UINT)g_szNormalsShader.length(), - NULL,NULL,D3DXSHADER_USE_LEGACY_D3DX9_31_DLL,NULL,&g_piNormalsEffect, &piBuffer))) + NULL,NULL,AI_SHADER_COMPILE_FLAGS,NULL,&g_piNormalsEffect, &piBuffer))) { if( piBuffer) { @@ -1073,6 +1077,8 @@ int CreateDevice (bool p_bMultiSample,bool p_bSuperSample,bool bHW /*= true*/) piBuffer = NULL; } + //MessageBox( g_hDlg, "Failed to create vertex declaration", "Init", MB_OK); + // use Fixed Function effect when working with shaderless cards if( g_sCaps.PixelShaderVersion < D3DPS_VERSION(2,0)) g_piNormalsEffect->SetTechnique( "RenderNormals_FF"); diff --git a/tools/assimp_view/assimp_view.h b/tools/assimp_view/assimp_view.h index 882bca05f..b2b02a83c 100644 --- a/tools/assimp_view/assimp_view.h +++ b/tools/assimp_view/assimp_view.h @@ -42,6 +42,8 @@ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. #if (!defined AV_MAIN_H_INCLUDED) #define AV_MAIN_H_INCLUDED +#define AI_SHADER_COMPILE_FLAGS D3DXSHADER_USE_LEGACY_D3DX9_31_DLL + // include resource definitions #include "resource.h" diff --git a/tools/assimp_view/assimp_view.ico b/tools/assimp_view/assimp_view.ico deleted file mode 100644 index d551aa3aaf80adf9b7760e2eb8de95a5c3e53df6..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 23558 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 k6|*8*&p-5^yH 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
-K^84=9WDO|2HP^1`I~Z;39^(T3y> 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%0A#pM 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 Kx~I~Pl=?q^>)(t3 literal 0 HcmV?d00001 diff --git a/tools/shared/assimp_tools_icon.svg b/tools/shared/assimp_tools_icon.svg new file mode 100644 index 000000000..0ebbaf968 --- /dev/null +++ b/tools/shared/assimp_tools_icon.svg @@ -0,0 +1,195 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + image/svg+xml + + + + + + + + + + + diff --git a/workspaces/vc8/UnitTest.vcproj b/workspaces/vc8/UnitTest.vcproj index 5b2dde2e3..6cb864c33 100644 --- a/workspaces/vc8/UnitTest.vcproj +++ b/workspaces/vc8/UnitTest.vcproj @@ -1331,6 +1331,14 @@ Filter="cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx" UniqueIdentifier="{4FC737F1-C7A5-4376-A066-2A32D752A2FF}" > + + + + diff --git a/workspaces/vc8/assimp.sln b/workspaces/vc8/assimp.sln index 9c7569c4f..f5f312aab 100644 --- a/workspaces/vc8/assimp.sln +++ b/workspaces/vc8/assimp.sln @@ -25,6 +25,15 @@ Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "unit", "UnitTest.vcproj", " {5691E159-2D9B-407F-971F-EA5C592DC524} = {5691E159-2D9B-407F-971F-EA5C592DC524} EndProjectSection EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "assimp_cmd", "assimp_cmd.vcproj", "{7C8F7B44-C990-4EA8-A2A5-9028472E0AD3}" + ProjectSection(WebsiteProperties) = preProject + Debug.AspNetCompiler.Debug = "True" + Release.AspNetCompiler.Debug = "False" + EndProjectSection + ProjectSection(ProjectDependencies) = postProject + {5691E159-2D9B-407F-971F-EA5C592DC524} = {5691E159-2D9B-407F-971F-EA5C592DC524} + EndProjectSection +EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution debug|Win32 = debug|Win32 @@ -141,6 +150,37 @@ Global {9B9D1C90-8A03-409A-B547-AE7B48B90F1A}.release-st|Win32.Build.0 = release-st|Win32 {9B9D1C90-8A03-409A-B547-AE7B48B90F1A}.release-st|x64.ActiveCfg = release-st|x64 {9B9D1C90-8A03-409A-B547-AE7B48B90F1A}.release-st|x64.Build.0 = release-st|x64 + {7C8F7B44-C990-4EA8-A2A5-9028472E0AD3}.debug|Win32.ActiveCfg = Debug|Win32 + {7C8F7B44-C990-4EA8-A2A5-9028472E0AD3}.debug|Win32.Build.0 = Debug|Win32 + {7C8F7B44-C990-4EA8-A2A5-9028472E0AD3}.debug|x64.ActiveCfg = Debug|x64 + {7C8F7B44-C990-4EA8-A2A5-9028472E0AD3}.debug|x64.Build.0 = Debug|x64 + {7C8F7B44-C990-4EA8-A2A5-9028472E0AD3}.debug-dll|Win32.ActiveCfg = debug-dll|Win32 + {7C8F7B44-C990-4EA8-A2A5-9028472E0AD3}.debug-dll|Win32.Build.0 = debug-dll|Win32 + {7C8F7B44-C990-4EA8-A2A5-9028472E0AD3}.debug-dll|x64.ActiveCfg = debug-dll|x64 + {7C8F7B44-C990-4EA8-A2A5-9028472E0AD3}.debug-dll|x64.Build.0 = debug-dll|x64 + {7C8F7B44-C990-4EA8-A2A5-9028472E0AD3}.debug-noboost-st|Win32.ActiveCfg = debug-noboost-st|Win32 + {7C8F7B44-C990-4EA8-A2A5-9028472E0AD3}.debug-noboost-st|Win32.Build.0 = debug-noboost-st|Win32 + {7C8F7B44-C990-4EA8-A2A5-9028472E0AD3}.debug-noboost-st|x64.ActiveCfg = debug-noboost-st|Win32 + {7C8F7B44-C990-4EA8-A2A5-9028472E0AD3}.debug-st|Win32.ActiveCfg = debug-st|Win32 + {7C8F7B44-C990-4EA8-A2A5-9028472E0AD3}.debug-st|Win32.Build.0 = debug-st|Win32 + {7C8F7B44-C990-4EA8-A2A5-9028472E0AD3}.debug-st|x64.ActiveCfg = debug-st|x64 + {7C8F7B44-C990-4EA8-A2A5-9028472E0AD3}.debug-st|x64.Build.0 = debug-st|x64 + {7C8F7B44-C990-4EA8-A2A5-9028472E0AD3}.release|Win32.ActiveCfg = Release|Win32 + {7C8F7B44-C990-4EA8-A2A5-9028472E0AD3}.release|Win32.Build.0 = Release|Win32 + {7C8F7B44-C990-4EA8-A2A5-9028472E0AD3}.release|x64.ActiveCfg = Release|x64 + {7C8F7B44-C990-4EA8-A2A5-9028472E0AD3}.release|x64.Build.0 = Release|x64 + {7C8F7B44-C990-4EA8-A2A5-9028472E0AD3}.release-dll|Win32.ActiveCfg = release-dll|Win32 + {7C8F7B44-C990-4EA8-A2A5-9028472E0AD3}.release-dll|Win32.Build.0 = release-dll|Win32 + {7C8F7B44-C990-4EA8-A2A5-9028472E0AD3}.release-dll|x64.ActiveCfg = release-dll|x64 + {7C8F7B44-C990-4EA8-A2A5-9028472E0AD3}.release-dll|x64.Build.0 = release-dll|x64 + {7C8F7B44-C990-4EA8-A2A5-9028472E0AD3}.release-noboost-st|Win32.ActiveCfg = release-noboost-st|Win32 + {7C8F7B44-C990-4EA8-A2A5-9028472E0AD3}.release-noboost-st|Win32.Build.0 = release-noboost-st|Win32 + {7C8F7B44-C990-4EA8-A2A5-9028472E0AD3}.release-noboost-st|x64.ActiveCfg = release-noboost-st|x64 + {7C8F7B44-C990-4EA8-A2A5-9028472E0AD3}.release-noboost-st|x64.Build.0 = release-noboost-st|x64 + {7C8F7B44-C990-4EA8-A2A5-9028472E0AD3}.release-st|Win32.ActiveCfg = release-st|Win32 + {7C8F7B44-C990-4EA8-A2A5-9028472E0AD3}.release-st|Win32.Build.0 = release-st|Win32 + {7C8F7B44-C990-4EA8-A2A5-9028472E0AD3}.release-st|x64.ActiveCfg = release-st|x64 + {7C8F7B44-C990-4EA8-A2A5-9028472E0AD3}.release-st|x64.Build.0 = release-st|x64 EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE diff --git a/workspaces/vc8/assimp.vcproj b/workspaces/vc8/assimp.vcproj index 5ff938073..c315d5b2c 100644 --- a/workspaces/vc8/assimp.vcproj +++ b/workspaces/vc8/assimp.vcproj @@ -21,6 +21,7 @@ Name="debug|Win32" ConfigurationType="4" InheritedPropertySheets=".\shared\LibShared.vsprops;.\shared\FastSTL.vsprops" + WholeProgramOptimization="0" > @@ -166,9 +172,11 @@ /> @@ -235,13 +245,14 @@ Name="VCCLCompilerTool" InlineFunctionExpansion="2" EnableIntrinsicFunctions="true" - FavorSizeOrSpeed="1" + FavorSizeOrSpeed="0" AdditionalIncludeDirectories="" PreprocessorDefinitions="NDEBUG, _SCL_SECURE_NO_WARNINGS, _CRT_SECURE_NO_WARNINGS,WIN32" StringPooling="true" RuntimeLibrary="2" BufferSecurityCheck="false" EnableEnhancedInstructionSet="0" + FloatingPointModel="2" UsePrecompiledHeader="2" PrecompiledHeaderThrough="AssimpPCH.h" WarningLevel="3" @@ -299,13 +310,16 @@ Name="VCCLCompilerTool" InlineFunctionExpansion="2" EnableIntrinsicFunctions="true" - FavorSizeOrSpeed="1" + FavorSizeOrSpeed="0" + OmitFramePointers="true" + WholeProgramOptimization="false" AdditionalIncludeDirectories="" PreprocessorDefinitions="NDEBUG;_SCL_SECURE_NO_WARNINGS;_CRT_SECURE_NO_WARNINGS;WIN32;ASSIMP_BUILD_DLL_EXPORT" StringPooling="true" RuntimeLibrary="2" BufferSecurityCheck="false" EnableEnhancedInstructionSet="2" + FloatingPointModel="2" UsePrecompiledHeader="2" PrecompiledHeaderThrough="AssimpPCH.h" WarningLevel="3" @@ -348,7 +362,7 @@ /> @@ -573,7 +594,7 @@ /> @@ -834,6 +865,7 @@ Name="debug-st|Win32" ConfigurationType="4" InheritedPropertySheets=".\shared\LibShared.vsprops;.\shared\SingleThreadedShared.vsprops;.\shared\FastSTL.vsprops" + WholeProgramOptimization="0" > @@ -979,13 +1016,16 @@ Name="VCCLCompilerTool" InlineFunctionExpansion="2" EnableIntrinsicFunctions="true" - FavorSizeOrSpeed="1" + FavorSizeOrSpeed="0" + OmitFramePointers="true" + WholeProgramOptimization="false" AdditionalIncludeDirectories="" PreprocessorDefinitions="NDEBUG;_SCL_SECURE_NO_WARNINGS;_CRT_SECURE_NO_WARNINGS;WIN32" StringPooling="true" RuntimeLibrary="2" BufferSecurityCheck="false" EnableEnhancedInstructionSet="2" + FloatingPointModel="2" UsePrecompiledHeader="2" PrecompiledHeaderThrough="AssimpPCH.h" WarningLevel="3" @@ -1045,13 +1085,14 @@ Name="VCCLCompilerTool" InlineFunctionExpansion="2" EnableIntrinsicFunctions="true" - FavorSizeOrSpeed="1" + FavorSizeOrSpeed="0" AdditionalIncludeDirectories="" PreprocessorDefinitions="NDEBUG, _SCL_SECURE_NO_WARNINGS, _CRT_SECURE_NO_WARNINGS,WIN32" StringPooling="true" RuntimeLibrary="2" BufferSecurityCheck="false" EnableEnhancedInstructionSet="0" + FloatingPointModel="2" UsePrecompiledHeader="2" PrecompiledHeaderThrough="AssimpPCH.h" WarningLevel="3" @@ -1322,6 +1363,22 @@ + + + + + + + + + + @@ -1970,6 +2035,30 @@ > + + + + + + + + + + + + @@ -1994,30 +2083,10 @@ > - - - - - - - - - - @@ -2101,6 +2170,14 @@ + + + - - + +
+ + @@ -3383,6 +3464,10 @@ RelativePath="..\..\doc\dox.h" > + + diff --git a/workspaces/vc8/assimp_cmd.vcproj b/workspaces/vc8/assimp_cmd.vcproj new file mode 100644 index 000000000..5b449ae6b --- /dev/null +++ b/workspaces/vc8/assimp_cmd.vcproj @@ -0,0 +1,1508 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/workspaces/vc8/assimp_view.vcproj b/workspaces/vc8/assimp_view.vcproj index b5c792185..94c167e2e 100644 --- a/workspaces/vc8/assimp_view.vcproj +++ b/workspaces/vc8/assimp_view.vcproj @@ -25,6 +25,7 @@ ConfigurationType="1" InheritedPropertySheets=".\shared\FastSTL.vsprops" CharacterSet="2" + WholeProgramOptimization="0" > + + + + diff --git a/workspaces/vc9/assimp.vcproj b/workspaces/vc9/assimp.vcproj index 6b7da22a6..914d37200 100644 --- a/workspaces/vc9/assimp.vcproj +++ b/workspaces/vc9/assimp.vcproj @@ -1902,6 +1902,14 @@ + + + + @@ -2019,6 +2027,18 @@ Name="CSM" > + + + + + +