From f95ba69047a949b85603fa89e2a6e4b274f7cf7c Mon Sep 17 00:00:00 2001 From: Dane Johnson Date: Wed, 20 Jan 2021 12:53:51 -0600 Subject: [PATCH] Pare down assimp thirdparty library --- .../packaging/windows-innosetup/LICENSE.rtf | Bin 2260 -> 0 bytes .../assimp/packaging/windows-innosetup/WEB | 8 - .../windows-innosetup/howto-build-setup.txt | 16 - .../windows-innosetup/readme_installer.txt | 23 - .../readme_installer_vieweronly.txt | 32 - .../windows-innosetup/script_vieweronly.iss | 60 - .../windows-innosetup/script_x64.iss | 74 - .../windows-innosetup/script_x86.iss | 75 - .../packaging/windows-mkzip/bin_readme.txt | 29 - .../packaging/windows-mkzip/mkfinal.bat | 169 - .../assimp/packaging/windows-mkzip/mkrev.bat | 27 - .../port/AndroidJNI/AndroidJNIIOSystem.cpp | 207 - .../assimp/port/AndroidJNI/CMakeLists.txt | 6 - thirdparty/assimp/port/AndroidJNI/README.md | 27 - .../assimp/port/AssimpDelphi/Readme.txt | 6 - .../assimp/port/AssimpDelphi/aiColor4D.pas | 17 - .../assimp/port/AssimpDelphi/aiMaterial.pas | 153 - .../assimp/port/AssimpDelphi/aiMatrix3x3.pas | 16 - .../assimp/port/AssimpDelphi/aiMatrix4x4.pas | 16 - .../assimp/port/AssimpDelphi/aiMesh.pas | 71 - .../assimp/port/AssimpDelphi/aiQuaternion.pas | 12 - .../assimp/port/AssimpDelphi/aiScene.pas | 46 - .../assimp/port/AssimpDelphi/aiTexture.pas | 26 - .../assimp/port/AssimpDelphi/aiTypes.pas | 53 - .../assimp/port/AssimpDelphi/aiVector2D.pas | 13 - .../assimp/port/AssimpDelphi/aiVector3D.pas | 16 - .../assimp/port/AssimpDelphi/assimp.pas | 58 - thirdparty/assimp/port/AssimpNET/Readme.md | 1 - thirdparty/assimp/port/AssimpPascal/Readme.md | 1 - .../port/PyAssimp/3d_viewer_screenshot.png | Bin 51610 -> 0 bytes thirdparty/assimp/port/PyAssimp/README.md | 91 - thirdparty/assimp/port/PyAssimp/README.rst | 96 - .../assimp/port/PyAssimp/gen/materialgen.py | 96 - .../assimp/port/PyAssimp/gen/structsgen.py | 290 - .../assimp/port/PyAssimp/pyassimp/__init__.py | 1 - .../assimp/port/PyAssimp/pyassimp/core.py | 546 - .../assimp/port/PyAssimp/pyassimp/errors.py | 11 - .../assimp/port/PyAssimp/pyassimp/formats.py | 41 - .../assimp/port/PyAssimp/pyassimp/helper.py | 281 - .../assimp/port/PyAssimp/pyassimp/material.py | 89 - .../port/PyAssimp/pyassimp/postprocess.py | 530 - .../assimp/port/PyAssimp/pyassimp/structs.py | 1132 -- .../assimp/port/PyAssimp/scripts/3d_viewer.py | 1318 -- .../port/PyAssimp/scripts/3d_viewer_py3.py | 1316 -- .../assimp/port/PyAssimp/scripts/README.md | 13 - .../scripts/fixed_pipeline_3d_viewer.py | 372 - .../assimp/port/PyAssimp/scripts/quicktest.py | 53 - .../assimp/port/PyAssimp/scripts/sample.py | 89 - .../port/PyAssimp/scripts/transformations.py | 1705 -- thirdparty/assimp/port/PyAssimp/setup.py | 26 - thirdparty/assimp/port/dAssimp/README | 13 - .../assimp/port/dAssimp/assimp/animation.d | 240 - thirdparty/assimp/port/dAssimp/assimp/api.d | 686 - .../assimp/port/dAssimp/assimp/assimp.d | 63 - .../assimp/port/dAssimp/assimp/camera.d | 182 - .../assimp/port/dAssimp/assimp/config.d | 705 - .../assimp/port/dAssimp/assimp/fileIO.d | 140 - thirdparty/assimp/port/dAssimp/assimp/light.d | 215 - .../assimp/port/dAssimp/assimp/loader.d | 193 - .../assimp/port/dAssimp/assimp/material.d | 641 - thirdparty/assimp/port/dAssimp/assimp/math.d | 155 - thirdparty/assimp/port/dAssimp/assimp/mesh.d | 465 - .../assimp/port/dAssimp/assimp/postprocess.d | 597 - thirdparty/assimp/port/dAssimp/assimp/scene.d | 306 - .../assimp/port/dAssimp/assimp/texture.d | 122 - thirdparty/assimp/port/dAssimp/assimp/types.d | 249 - .../assimp/port/dAssimp/assimp/versionInfo.d | 72 - .../port/iOS/IPHONEOS_ARM64E_TOOLCHAIN.cmake | 17 - .../port/iOS/IPHONEOS_ARM64_TOOLCHAIN.cmake | 17 - .../port/iOS/IPHONEOS_ARMV6_TOOLCHAIN.cmake | 17 - .../port/iOS/IPHONEOS_ARMV7S_TOOLCHAIN.cmake | 17 - .../port/iOS/IPHONEOS_ARMV7_TOOLCHAIN.cmake | 17 - .../port/iOS/IPHONEOS_I386_TOOLCHAIN.cmake | 17 - .../port/iOS/IPHONEOS_X86_64_TOOLCHAIN.cmake | 17 - thirdparty/assimp/port/iOS/README.md | 39 - thirdparty/assimp/port/iOS/build.sh | 205 - thirdparty/assimp/port/jassimp/README | 56 - thirdparty/assimp/port/jassimp/build.xml | 54 - .../port/jassimp/jassimp-native/Android.mk | 13 - .../jassimp/jassimp-native/src/jassimp.cpp | 1995 -- .../port/jassimp/jassimp-native/src/jassimp.h | 47 - .../jassimp/src/jassimp/AiAnimBehavior.java | 112 - .../jassimp/src/jassimp/AiAnimation.java | 175 - .../jassimp/src/jassimp/AiBlendMode.java | 117 - .../jassimp/jassimp/src/jassimp/AiBone.java | 136 - .../jassimp/src/jassimp/AiBoneWeight.java | 88 - .../src/jassimp/AiBuiltInWrapperProvider.java | 84 - .../jassimp/jassimp/src/jassimp/AiCamera.java | 303 - .../src/jassimp/AiClassLoaderIOSystem.java | 153 - .../jassimp/jassimp/src/jassimp/AiColor.java | 160 - .../jassimp/jassimp/src/jassimp/AiConfig.java | 15 - .../jassimp/src/jassimp/AiConfigOptions.java | 663 - .../jassimp/src/jassimp/AiIOStream.java | 80 - .../jassimp/src/jassimp/AiIOSystem.java | 79 - .../src/jassimp/AiInputStreamIOStream.java | 127 - .../jassimp/jassimp/src/jassimp/AiLight.java | 387 - .../jassimp/src/jassimp/AiLightType.java | 123 - .../jassimp/src/jassimp/AiMaterial.java | 1199 -- .../jassimp/src/jassimp/AiMatrix4f.java | 133 - .../jassimp/jassimp/src/jassimp/AiMesh.java | 1421 -- .../jassimp/src/jassimp/AiMeshAnim.java | 49 - .../jassimp/src/jassimp/AiMetadataEntry.java | 118 - .../jassimp/jassimp/src/jassimp/AiNode.java | 246 - .../jassimp/src/jassimp/AiNodeAnim.java | 501 - .../src/jassimp/AiPostProcessSteps.java | 571 - .../jassimp/src/jassimp/AiPrimitiveType.java | 113 - .../src/jassimp/AiProgressHandler.java | 46 - .../jassimp/src/jassimp/AiQuaternion.java | 165 - .../jassimp/jassimp/src/jassimp/AiScene.java | 251 - .../jassimp/src/jassimp/AiSceneFlag.java | 151 - .../jassimp/src/jassimp/AiShadingMode.java | 168 - .../jassimp/src/jassimp/AiTextureInfo.java | 224 - .../jassimp/src/jassimp/AiTextureMapMode.java | 113 - .../jassimp/src/jassimp/AiTextureMapping.java | 78 - .../jassimp/src/jassimp/AiTextureOp.java | 137 - .../jassimp/src/jassimp/AiTextureType.java | 212 - .../jassimp/jassimp/src/jassimp/AiVector.java | 195 - .../src/jassimp/AiWrapperProvider.java | 149 - .../jassimp/jassimp/src/jassimp/JaiDebug.java | 209 - .../jassimp/jassimp/src/jassimp/Jassimp.java | 402 - .../jassimp/src/jassimp/JassimpConfig.java | 66 - .../src/jassimp/JassimpLibraryLoader.java | 65 - .../jassimp/src/jassimp/package-info.java | 45 - thirdparty/assimp/port/swig/DONOTUSEYET | 1 - thirdparty/assimp/port/swig/assimp.i | 140 - thirdparty/assimp/port/swig/d/build.sh | 2 - thirdparty/assimp/port/swig/d/generate.sh | 4 - .../port/swig/interface/DefaultLogger.i | 5 - .../assimp/port/swig/interface/IOStream.i | 5 - .../assimp/port/swig/interface/IOSystem.i | 11 - .../assimp/port/swig/interface/LogStream.i | 5 - .../assimp/port/swig/interface/Logger.i | 5 - .../assimp/port/swig/interface/NullLogger.i | 5 - .../assimp/port/swig/interface/aiAnim.i | 8 - .../assimp/port/swig/interface/aiAssert.i | 5 - .../assimp/port/swig/interface/aiCamera.i | 5 - .../assimp/port/swig/interface/aiColor4D.i | 5 - .../assimp/port/swig/interface/aiConfig.i | 5 - .../assimp/port/swig/interface/aiDefines.i | 5 - .../assimp/port/swig/interface/aiFileIO.i | 5 - .../assimp/port/swig/interface/aiLight.i | 5 - .../assimp/port/swig/interface/aiMaterial.i | 33 - .../assimp/port/swig/interface/aiMatrix3x3.i | 5 - .../assimp/port/swig/interface/aiMatrix4x4.i | 5 - .../assimp/port/swig/interface/aiMesh.i | 29 - .../port/swig/interface/aiPostProcess.i | 7 - .../assimp/port/swig/interface/aiQuaternion.i | 5 - .../assimp/port/swig/interface/aiScene.i | 17 - .../assimp/port/swig/interface/aiTexture.i | 5 - .../assimp/port/swig/interface/aiTypes.i | 8 - .../assimp/port/swig/interface/aiVector2D.i | 5 - .../assimp/port/swig/interface/aiVector3D.i | 5 - .../assimp/port/swig/interface/aiVersion.i | 5 - .../assimp/port/swig/interface/assimp.i | 45 - .../assimp/scripts/AppVeyor/cacheglobs.txt | 4 - .../assimp/scripts/AppVeyor/mtime_cache | 177 - .../BlenderImporter/BlenderScene.cpp.template | 56 - .../BlenderSceneGen.h.template | 55 - .../scripts/BlenderImporter/genblenddna.py | 299 - .../assimp/scripts/OgreImporter/assimp.tpl | 10 - .../scripts/StepImporter/CppGenerator.py | 304 - .../scripts/StepImporter/ExpressReader.py | 123 - .../StepImporter/IFCReaderGen.cpp.template | 78 - .../StepImporter/IFCReaderGen.h.template | 91 - .../StepImporter/StepReaderGen.cpp.template | 78 - .../StepImporter/StepReaderGen.h.template | 90 - .../StepImporter/extract_step_token.py | 64 - .../scripts/StepImporter/genentitylist.sh | 3 - .../scripts/StepImporter/ifc_entitylist.txt | 111 - .../StepImporter/part403ts_wg3n2635mim_lf.exp | 16378 ---------------- .../StepImporter/schema_ap203e2_mim_lf.exp | 16378 ---------------- .../scripts/StepImporter/schema_ifc2x3.exp | 9571 --------- .../scripts/StepImporter/step_entitylist.txt | 1015 - .../assimp/scripts/adjust_header_paths.sh | 38 - .../android_crosscompile/make_android.bat | 28 - .../assimp/tools/assimp_cmd/CMakeLists.txt | 78 - .../assimp/tools/assimp_cmd/CompareDump.cpp | 952 - thirdparty/assimp/tools/assimp_cmd/Export.cpp | 174 - .../tools/assimp_cmd/ImageExtractor.cpp | 376 - thirdparty/assimp/tools/assimp_cmd/Info.cpp | 477 - thirdparty/assimp/tools/assimp_cmd/Main.cpp | 521 - thirdparty/assimp/tools/assimp_cmd/Main.h | 205 - .../assimp/tools/assimp_cmd/WriteDumb.cpp | 1430 -- .../assimp/tools/assimp_cmd/assimp_cmd.rc | 51 - .../tools/assimp_cmd/generic_inserter.hpp | 113 - thirdparty/assimp/tools/assimp_cmd/resource.h | 21 - .../tools/assimp_view/AnimEvaluator.cpp | 170 - .../assimp/tools/assimp_view/AnimEvaluator.h | 86 - .../assimp/tools/assimp_view/AssetHelper.h | 250 - .../assimp/tools/assimp_view/Background.cpp | 471 - .../assimp/tools/assimp_view/Background.h | 128 - .../assimp/tools/assimp_view/CMakeLists.txt | 107 - thirdparty/assimp/tools/assimp_view/Camera.h | 85 - .../assimp/tools/assimp_view/Display.cpp | 2302 --- thirdparty/assimp/tools/assimp_view/Display.h | 542 - thirdparty/assimp/tools/assimp_view/HUD.png | Bin 40474 -> 0 bytes .../assimp/tools/assimp_view/HUDMask.png | Bin 6460 -> 0 bytes .../assimp/tools/assimp_view/HelpDialog.cpp | 103 - thirdparty/assimp/tools/assimp_view/Input.cpp | 372 - .../assimp/tools/assimp_view/LogDisplay.cpp | 221 - .../assimp/tools/assimp_view/LogDisplay.h | 99 - .../assimp/tools/assimp_view/LogWindow.cpp | 246 - .../assimp/tools/assimp_view/LogWindow.h | 133 - .../assimp/tools/assimp_view/Material.cpp | 1493 -- .../tools/assimp_view/MaterialManager.h | 208 - .../assimp/tools/assimp_view/MeshRenderer.cpp | 164 - .../assimp/tools/assimp_view/MeshRenderer.h | 99 - .../assimp/tools/assimp_view/MessageProc.cpp | 2434 --- .../tools/assimp_view/NOTE@help.rtf.txt | 2 - .../assimp/tools/assimp_view/Normals.cpp | 155 - .../assimp/tools/assimp_view/RenderOptions.h | 113 - .../tools/assimp_view/SceneAnimator.cpp | 233 - .../assimp/tools/assimp_view/SceneAnimator.h | 249 - .../assimp/tools/assimp_view/Shaders.cpp | 1410 -- thirdparty/assimp/tools/assimp_view/Shaders.h | 63 - .../assimp/tools/assimp_view/assimp_view.cpp | 1178 -- .../assimp/tools/assimp_view/assimp_view.h | 282 - .../assimp/tools/assimp_view/assimp_view.rc | 468 - .../assimp/tools/assimp_view/banner.bmp | Bin 144054 -> 0 bytes .../assimp/tools/assimp_view/banner_pure.bmp | Bin 108054 -> 0 bytes thirdparty/assimp/tools/assimp_view/base.PNG | Bin 1600 -> 0 bytes .../assimp/tools/assimp_view/base_anim.bmp | Bin 9630 -> 0 bytes .../assimp/tools/assimp_view/base_display.bmp | Bin 9630 -> 0 bytes .../assimp/tools/assimp_view/base_inter.bmp | Bin 9630 -> 0 bytes .../tools/assimp_view/base_rendering.bmp | Bin 9630 -> 0 bytes .../assimp/tools/assimp_view/base_stats.bmp | Bin 9630 -> 0 bytes thirdparty/assimp/tools/assimp_view/fx.bmp | Bin 822 -> 0 bytes thirdparty/assimp/tools/assimp_view/help.rtf | 418 - thirdparty/assimp/tools/assimp_view/n.bmp | Bin 822 -> 0 bytes .../assimp/tools/assimp_view/resource.h | 235 - thirdparty/assimp/tools/assimp_view/root.bmp | Bin 822 -> 0 bytes .../assimp/tools/assimp_view/stdafx.cpp | 8 - thirdparty/assimp/tools/assimp_view/stdafx.h | 73 - thirdparty/assimp/tools/assimp_view/test.xcf | Bin 121875 -> 0 bytes thirdparty/assimp/tools/assimp_view/text1.bin | 373 - thirdparty/assimp/tools/assimp_view/tx.bmp | Bin 822 -> 0 bytes thirdparty/assimp/tools/assimp_view/txi.bmp | Bin 822 -> 0 bytes .../assimp/tools/coverity/assimp_modeling.cpp | 40 - .../assimp/tools/make/build_env_win32.bat | 57 - .../assimp/tools/make/make_all_win32_x64.bat | 18 - .../assimp/tools/shared/assimp_tools_icon.ico | Bin 17542 -> 0 bytes .../assimp/tools/shared/assimp_tools_icon.png | Bin 104295 -> 0 bytes .../assimp/tools/shared/assimp_tools_icon.svg | 184 - .../assimp/tools/shared/default_icon.xcf | Bin 13189 -> 0 bytes 244 files changed, 91776 deletions(-) delete mode 100644 thirdparty/assimp/packaging/windows-innosetup/LICENSE.rtf delete mode 100644 thirdparty/assimp/packaging/windows-innosetup/WEB delete mode 100644 thirdparty/assimp/packaging/windows-innosetup/howto-build-setup.txt delete mode 100644 thirdparty/assimp/packaging/windows-innosetup/readme_installer.txt delete mode 100644 thirdparty/assimp/packaging/windows-innosetup/readme_installer_vieweronly.txt delete mode 100644 thirdparty/assimp/packaging/windows-innosetup/script_vieweronly.iss delete mode 100644 thirdparty/assimp/packaging/windows-innosetup/script_x64.iss delete mode 100644 thirdparty/assimp/packaging/windows-innosetup/script_x86.iss delete mode 100644 thirdparty/assimp/packaging/windows-mkzip/bin_readme.txt delete mode 100644 thirdparty/assimp/packaging/windows-mkzip/mkfinal.bat delete mode 100644 thirdparty/assimp/packaging/windows-mkzip/mkrev.bat delete mode 100644 thirdparty/assimp/port/AndroidJNI/AndroidJNIIOSystem.cpp delete mode 100644 thirdparty/assimp/port/AndroidJNI/CMakeLists.txt delete mode 100644 thirdparty/assimp/port/AndroidJNI/README.md delete mode 100644 thirdparty/assimp/port/AssimpDelphi/Readme.txt delete mode 100644 thirdparty/assimp/port/AssimpDelphi/aiColor4D.pas delete mode 100644 thirdparty/assimp/port/AssimpDelphi/aiMaterial.pas delete mode 100644 thirdparty/assimp/port/AssimpDelphi/aiMatrix3x3.pas delete mode 100644 thirdparty/assimp/port/AssimpDelphi/aiMatrix4x4.pas delete mode 100644 thirdparty/assimp/port/AssimpDelphi/aiMesh.pas delete mode 100644 thirdparty/assimp/port/AssimpDelphi/aiQuaternion.pas delete mode 100644 thirdparty/assimp/port/AssimpDelphi/aiScene.pas delete mode 100644 thirdparty/assimp/port/AssimpDelphi/aiTexture.pas delete mode 100644 thirdparty/assimp/port/AssimpDelphi/aiTypes.pas delete mode 100644 thirdparty/assimp/port/AssimpDelphi/aiVector2D.pas delete mode 100644 thirdparty/assimp/port/AssimpDelphi/aiVector3D.pas delete mode 100644 thirdparty/assimp/port/AssimpDelphi/assimp.pas delete mode 100644 thirdparty/assimp/port/AssimpNET/Readme.md delete mode 100644 thirdparty/assimp/port/AssimpPascal/Readme.md delete mode 100644 thirdparty/assimp/port/PyAssimp/3d_viewer_screenshot.png delete mode 100644 thirdparty/assimp/port/PyAssimp/README.md delete mode 100644 thirdparty/assimp/port/PyAssimp/README.rst delete mode 100644 thirdparty/assimp/port/PyAssimp/gen/materialgen.py delete mode 100644 thirdparty/assimp/port/PyAssimp/gen/structsgen.py delete mode 100644 thirdparty/assimp/port/PyAssimp/pyassimp/__init__.py delete mode 100644 thirdparty/assimp/port/PyAssimp/pyassimp/core.py delete mode 100644 thirdparty/assimp/port/PyAssimp/pyassimp/errors.py delete mode 100644 thirdparty/assimp/port/PyAssimp/pyassimp/formats.py delete mode 100644 thirdparty/assimp/port/PyAssimp/pyassimp/helper.py delete mode 100644 thirdparty/assimp/port/PyAssimp/pyassimp/material.py delete mode 100644 thirdparty/assimp/port/PyAssimp/pyassimp/postprocess.py delete mode 100644 thirdparty/assimp/port/PyAssimp/pyassimp/structs.py delete mode 100755 thirdparty/assimp/port/PyAssimp/scripts/3d_viewer.py delete mode 100755 thirdparty/assimp/port/PyAssimp/scripts/3d_viewer_py3.py delete mode 100644 thirdparty/assimp/port/PyAssimp/scripts/README.md delete mode 100755 thirdparty/assimp/port/PyAssimp/scripts/fixed_pipeline_3d_viewer.py delete mode 100755 thirdparty/assimp/port/PyAssimp/scripts/quicktest.py delete mode 100755 thirdparty/assimp/port/PyAssimp/scripts/sample.py delete mode 100644 thirdparty/assimp/port/PyAssimp/scripts/transformations.py delete mode 100644 thirdparty/assimp/port/PyAssimp/setup.py delete mode 100644 thirdparty/assimp/port/dAssimp/README delete mode 100644 thirdparty/assimp/port/dAssimp/assimp/animation.d delete mode 100644 thirdparty/assimp/port/dAssimp/assimp/api.d delete mode 100644 thirdparty/assimp/port/dAssimp/assimp/assimp.d delete mode 100644 thirdparty/assimp/port/dAssimp/assimp/camera.d delete mode 100644 thirdparty/assimp/port/dAssimp/assimp/config.d delete mode 100644 thirdparty/assimp/port/dAssimp/assimp/fileIO.d delete mode 100644 thirdparty/assimp/port/dAssimp/assimp/light.d delete mode 100644 thirdparty/assimp/port/dAssimp/assimp/loader.d delete mode 100644 thirdparty/assimp/port/dAssimp/assimp/material.d delete mode 100644 thirdparty/assimp/port/dAssimp/assimp/math.d delete mode 100644 thirdparty/assimp/port/dAssimp/assimp/mesh.d delete mode 100644 thirdparty/assimp/port/dAssimp/assimp/postprocess.d delete mode 100644 thirdparty/assimp/port/dAssimp/assimp/scene.d delete mode 100644 thirdparty/assimp/port/dAssimp/assimp/texture.d delete mode 100644 thirdparty/assimp/port/dAssimp/assimp/types.d delete mode 100644 thirdparty/assimp/port/dAssimp/assimp/versionInfo.d delete mode 100644 thirdparty/assimp/port/iOS/IPHONEOS_ARM64E_TOOLCHAIN.cmake delete mode 100644 thirdparty/assimp/port/iOS/IPHONEOS_ARM64_TOOLCHAIN.cmake delete mode 100644 thirdparty/assimp/port/iOS/IPHONEOS_ARMV6_TOOLCHAIN.cmake delete mode 100644 thirdparty/assimp/port/iOS/IPHONEOS_ARMV7S_TOOLCHAIN.cmake delete mode 100644 thirdparty/assimp/port/iOS/IPHONEOS_ARMV7_TOOLCHAIN.cmake delete mode 100644 thirdparty/assimp/port/iOS/IPHONEOS_I386_TOOLCHAIN.cmake delete mode 100644 thirdparty/assimp/port/iOS/IPHONEOS_X86_64_TOOLCHAIN.cmake delete mode 100644 thirdparty/assimp/port/iOS/README.md delete mode 100755 thirdparty/assimp/port/iOS/build.sh delete mode 100644 thirdparty/assimp/port/jassimp/README delete mode 100644 thirdparty/assimp/port/jassimp/build.xml delete mode 100644 thirdparty/assimp/port/jassimp/jassimp-native/Android.mk delete mode 100644 thirdparty/assimp/port/jassimp/jassimp-native/src/jassimp.cpp delete mode 100644 thirdparty/assimp/port/jassimp/jassimp-native/src/jassimp.h delete mode 100644 thirdparty/assimp/port/jassimp/jassimp/src/jassimp/AiAnimBehavior.java delete mode 100644 thirdparty/assimp/port/jassimp/jassimp/src/jassimp/AiAnimation.java delete mode 100644 thirdparty/assimp/port/jassimp/jassimp/src/jassimp/AiBlendMode.java delete mode 100644 thirdparty/assimp/port/jassimp/jassimp/src/jassimp/AiBone.java delete mode 100644 thirdparty/assimp/port/jassimp/jassimp/src/jassimp/AiBoneWeight.java delete mode 100644 thirdparty/assimp/port/jassimp/jassimp/src/jassimp/AiBuiltInWrapperProvider.java delete mode 100644 thirdparty/assimp/port/jassimp/jassimp/src/jassimp/AiCamera.java delete mode 100644 thirdparty/assimp/port/jassimp/jassimp/src/jassimp/AiClassLoaderIOSystem.java delete mode 100644 thirdparty/assimp/port/jassimp/jassimp/src/jassimp/AiColor.java delete mode 100644 thirdparty/assimp/port/jassimp/jassimp/src/jassimp/AiConfig.java delete mode 100644 thirdparty/assimp/port/jassimp/jassimp/src/jassimp/AiConfigOptions.java delete mode 100644 thirdparty/assimp/port/jassimp/jassimp/src/jassimp/AiIOStream.java delete mode 100644 thirdparty/assimp/port/jassimp/jassimp/src/jassimp/AiIOSystem.java delete mode 100644 thirdparty/assimp/port/jassimp/jassimp/src/jassimp/AiInputStreamIOStream.java delete mode 100644 thirdparty/assimp/port/jassimp/jassimp/src/jassimp/AiLight.java delete mode 100644 thirdparty/assimp/port/jassimp/jassimp/src/jassimp/AiLightType.java delete mode 100644 thirdparty/assimp/port/jassimp/jassimp/src/jassimp/AiMaterial.java delete mode 100644 thirdparty/assimp/port/jassimp/jassimp/src/jassimp/AiMatrix4f.java delete mode 100644 thirdparty/assimp/port/jassimp/jassimp/src/jassimp/AiMesh.java delete mode 100644 thirdparty/assimp/port/jassimp/jassimp/src/jassimp/AiMeshAnim.java delete mode 100644 thirdparty/assimp/port/jassimp/jassimp/src/jassimp/AiMetadataEntry.java delete mode 100644 thirdparty/assimp/port/jassimp/jassimp/src/jassimp/AiNode.java delete mode 100644 thirdparty/assimp/port/jassimp/jassimp/src/jassimp/AiNodeAnim.java delete mode 100644 thirdparty/assimp/port/jassimp/jassimp/src/jassimp/AiPostProcessSteps.java delete mode 100644 thirdparty/assimp/port/jassimp/jassimp/src/jassimp/AiPrimitiveType.java delete mode 100644 thirdparty/assimp/port/jassimp/jassimp/src/jassimp/AiProgressHandler.java delete mode 100644 thirdparty/assimp/port/jassimp/jassimp/src/jassimp/AiQuaternion.java delete mode 100644 thirdparty/assimp/port/jassimp/jassimp/src/jassimp/AiScene.java delete mode 100644 thirdparty/assimp/port/jassimp/jassimp/src/jassimp/AiSceneFlag.java delete mode 100644 thirdparty/assimp/port/jassimp/jassimp/src/jassimp/AiShadingMode.java delete mode 100644 thirdparty/assimp/port/jassimp/jassimp/src/jassimp/AiTextureInfo.java delete mode 100644 thirdparty/assimp/port/jassimp/jassimp/src/jassimp/AiTextureMapMode.java delete mode 100644 thirdparty/assimp/port/jassimp/jassimp/src/jassimp/AiTextureMapping.java delete mode 100644 thirdparty/assimp/port/jassimp/jassimp/src/jassimp/AiTextureOp.java delete mode 100644 thirdparty/assimp/port/jassimp/jassimp/src/jassimp/AiTextureType.java delete mode 100644 thirdparty/assimp/port/jassimp/jassimp/src/jassimp/AiVector.java delete mode 100644 thirdparty/assimp/port/jassimp/jassimp/src/jassimp/AiWrapperProvider.java delete mode 100644 thirdparty/assimp/port/jassimp/jassimp/src/jassimp/JaiDebug.java delete mode 100644 thirdparty/assimp/port/jassimp/jassimp/src/jassimp/Jassimp.java delete mode 100644 thirdparty/assimp/port/jassimp/jassimp/src/jassimp/JassimpConfig.java delete mode 100644 thirdparty/assimp/port/jassimp/jassimp/src/jassimp/JassimpLibraryLoader.java delete mode 100644 thirdparty/assimp/port/jassimp/jassimp/src/jassimp/package-info.java delete mode 100644 thirdparty/assimp/port/swig/DONOTUSEYET delete mode 100644 thirdparty/assimp/port/swig/assimp.i delete mode 100755 thirdparty/assimp/port/swig/d/build.sh delete mode 100755 thirdparty/assimp/port/swig/d/generate.sh delete mode 100644 thirdparty/assimp/port/swig/interface/DefaultLogger.i delete mode 100644 thirdparty/assimp/port/swig/interface/IOStream.i delete mode 100644 thirdparty/assimp/port/swig/interface/IOSystem.i delete mode 100644 thirdparty/assimp/port/swig/interface/LogStream.i delete mode 100644 thirdparty/assimp/port/swig/interface/Logger.i delete mode 100644 thirdparty/assimp/port/swig/interface/NullLogger.i delete mode 100644 thirdparty/assimp/port/swig/interface/aiAnim.i delete mode 100644 thirdparty/assimp/port/swig/interface/aiAssert.i delete mode 100644 thirdparty/assimp/port/swig/interface/aiCamera.i delete mode 100644 thirdparty/assimp/port/swig/interface/aiColor4D.i delete mode 100644 thirdparty/assimp/port/swig/interface/aiConfig.i delete mode 100644 thirdparty/assimp/port/swig/interface/aiDefines.i delete mode 100644 thirdparty/assimp/port/swig/interface/aiFileIO.i delete mode 100644 thirdparty/assimp/port/swig/interface/aiLight.i delete mode 100644 thirdparty/assimp/port/swig/interface/aiMaterial.i delete mode 100644 thirdparty/assimp/port/swig/interface/aiMatrix3x3.i delete mode 100644 thirdparty/assimp/port/swig/interface/aiMatrix4x4.i delete mode 100644 thirdparty/assimp/port/swig/interface/aiMesh.i delete mode 100644 thirdparty/assimp/port/swig/interface/aiPostProcess.i delete mode 100644 thirdparty/assimp/port/swig/interface/aiQuaternion.i delete mode 100644 thirdparty/assimp/port/swig/interface/aiScene.i delete mode 100644 thirdparty/assimp/port/swig/interface/aiTexture.i delete mode 100644 thirdparty/assimp/port/swig/interface/aiTypes.i delete mode 100644 thirdparty/assimp/port/swig/interface/aiVector2D.i delete mode 100644 thirdparty/assimp/port/swig/interface/aiVector3D.i delete mode 100644 thirdparty/assimp/port/swig/interface/aiVersion.i delete mode 100644 thirdparty/assimp/port/swig/interface/assimp.i delete mode 100644 thirdparty/assimp/scripts/AppVeyor/cacheglobs.txt delete mode 100644 thirdparty/assimp/scripts/AppVeyor/mtime_cache delete mode 100644 thirdparty/assimp/scripts/BlenderImporter/BlenderScene.cpp.template delete mode 100644 thirdparty/assimp/scripts/BlenderImporter/BlenderSceneGen.h.template delete mode 100644 thirdparty/assimp/scripts/BlenderImporter/genblenddna.py delete mode 100644 thirdparty/assimp/scripts/OgreImporter/assimp.tpl delete mode 100644 thirdparty/assimp/scripts/StepImporter/CppGenerator.py delete mode 100644 thirdparty/assimp/scripts/StepImporter/ExpressReader.py delete mode 100644 thirdparty/assimp/scripts/StepImporter/IFCReaderGen.cpp.template delete mode 100644 thirdparty/assimp/scripts/StepImporter/IFCReaderGen.h.template delete mode 100644 thirdparty/assimp/scripts/StepImporter/StepReaderGen.cpp.template delete mode 100644 thirdparty/assimp/scripts/StepImporter/StepReaderGen.h.template delete mode 100644 thirdparty/assimp/scripts/StepImporter/extract_step_token.py delete mode 100644 thirdparty/assimp/scripts/StepImporter/genentitylist.sh delete mode 100644 thirdparty/assimp/scripts/StepImporter/ifc_entitylist.txt delete mode 100644 thirdparty/assimp/scripts/StepImporter/part403ts_wg3n2635mim_lf.exp delete mode 100644 thirdparty/assimp/scripts/StepImporter/schema_ap203e2_mim_lf.exp delete mode 100644 thirdparty/assimp/scripts/StepImporter/schema_ifc2x3.exp delete mode 100644 thirdparty/assimp/scripts/StepImporter/step_entitylist.txt delete mode 100644 thirdparty/assimp/scripts/adjust_header_paths.sh delete mode 100644 thirdparty/assimp/scripts/android_crosscompile/make_android.bat delete mode 100644 thirdparty/assimp/tools/assimp_cmd/CMakeLists.txt delete mode 100644 thirdparty/assimp/tools/assimp_cmd/CompareDump.cpp delete mode 100644 thirdparty/assimp/tools/assimp_cmd/Export.cpp delete mode 100644 thirdparty/assimp/tools/assimp_cmd/ImageExtractor.cpp delete mode 100644 thirdparty/assimp/tools/assimp_cmd/Info.cpp delete mode 100644 thirdparty/assimp/tools/assimp_cmd/Main.cpp delete mode 100644 thirdparty/assimp/tools/assimp_cmd/Main.h delete mode 100644 thirdparty/assimp/tools/assimp_cmd/WriteDumb.cpp delete mode 100644 thirdparty/assimp/tools/assimp_cmd/assimp_cmd.rc delete mode 100644 thirdparty/assimp/tools/assimp_cmd/generic_inserter.hpp delete mode 100644 thirdparty/assimp/tools/assimp_cmd/resource.h delete mode 100644 thirdparty/assimp/tools/assimp_view/AnimEvaluator.cpp delete mode 100644 thirdparty/assimp/tools/assimp_view/AnimEvaluator.h delete mode 100644 thirdparty/assimp/tools/assimp_view/AssetHelper.h delete mode 100644 thirdparty/assimp/tools/assimp_view/Background.cpp delete mode 100644 thirdparty/assimp/tools/assimp_view/Background.h delete mode 100644 thirdparty/assimp/tools/assimp_view/CMakeLists.txt delete mode 100644 thirdparty/assimp/tools/assimp_view/Camera.h delete mode 100644 thirdparty/assimp/tools/assimp_view/Display.cpp delete mode 100644 thirdparty/assimp/tools/assimp_view/Display.h delete mode 100644 thirdparty/assimp/tools/assimp_view/HUD.png delete mode 100644 thirdparty/assimp/tools/assimp_view/HUDMask.png delete mode 100644 thirdparty/assimp/tools/assimp_view/HelpDialog.cpp delete mode 100644 thirdparty/assimp/tools/assimp_view/Input.cpp delete mode 100644 thirdparty/assimp/tools/assimp_view/LogDisplay.cpp delete mode 100644 thirdparty/assimp/tools/assimp_view/LogDisplay.h delete mode 100644 thirdparty/assimp/tools/assimp_view/LogWindow.cpp delete mode 100644 thirdparty/assimp/tools/assimp_view/LogWindow.h delete mode 100644 thirdparty/assimp/tools/assimp_view/Material.cpp delete mode 100644 thirdparty/assimp/tools/assimp_view/MaterialManager.h delete mode 100644 thirdparty/assimp/tools/assimp_view/MeshRenderer.cpp delete mode 100644 thirdparty/assimp/tools/assimp_view/MeshRenderer.h delete mode 100644 thirdparty/assimp/tools/assimp_view/MessageProc.cpp delete mode 100644 thirdparty/assimp/tools/assimp_view/NOTE@help.rtf.txt delete mode 100644 thirdparty/assimp/tools/assimp_view/Normals.cpp delete mode 100644 thirdparty/assimp/tools/assimp_view/RenderOptions.h delete mode 100644 thirdparty/assimp/tools/assimp_view/SceneAnimator.cpp delete mode 100644 thirdparty/assimp/tools/assimp_view/SceneAnimator.h delete mode 100644 thirdparty/assimp/tools/assimp_view/Shaders.cpp delete mode 100644 thirdparty/assimp/tools/assimp_view/Shaders.h delete mode 100644 thirdparty/assimp/tools/assimp_view/assimp_view.cpp delete mode 100644 thirdparty/assimp/tools/assimp_view/assimp_view.h delete mode 100644 thirdparty/assimp/tools/assimp_view/assimp_view.rc delete mode 100644 thirdparty/assimp/tools/assimp_view/banner.bmp delete mode 100644 thirdparty/assimp/tools/assimp_view/banner_pure.bmp delete mode 100644 thirdparty/assimp/tools/assimp_view/base.PNG delete mode 100644 thirdparty/assimp/tools/assimp_view/base_anim.bmp delete mode 100644 thirdparty/assimp/tools/assimp_view/base_display.bmp delete mode 100644 thirdparty/assimp/tools/assimp_view/base_inter.bmp delete mode 100644 thirdparty/assimp/tools/assimp_view/base_rendering.bmp delete mode 100644 thirdparty/assimp/tools/assimp_view/base_stats.bmp delete mode 100644 thirdparty/assimp/tools/assimp_view/fx.bmp delete mode 100644 thirdparty/assimp/tools/assimp_view/help.rtf delete mode 100644 thirdparty/assimp/tools/assimp_view/n.bmp delete mode 100644 thirdparty/assimp/tools/assimp_view/resource.h delete mode 100644 thirdparty/assimp/tools/assimp_view/root.bmp delete mode 100644 thirdparty/assimp/tools/assimp_view/stdafx.cpp delete mode 100644 thirdparty/assimp/tools/assimp_view/stdafx.h delete mode 100644 thirdparty/assimp/tools/assimp_view/test.xcf delete mode 100644 thirdparty/assimp/tools/assimp_view/text1.bin delete mode 100644 thirdparty/assimp/tools/assimp_view/tx.bmp delete mode 100644 thirdparty/assimp/tools/assimp_view/txi.bmp delete mode 100644 thirdparty/assimp/tools/coverity/assimp_modeling.cpp delete mode 100644 thirdparty/assimp/tools/make/build_env_win32.bat delete mode 100644 thirdparty/assimp/tools/make/make_all_win32_x64.bat delete mode 100644 thirdparty/assimp/tools/shared/assimp_tools_icon.ico delete mode 100644 thirdparty/assimp/tools/shared/assimp_tools_icon.png delete mode 100644 thirdparty/assimp/tools/shared/assimp_tools_icon.svg delete mode 100644 thirdparty/assimp/tools/shared/default_icon.xcf diff --git a/thirdparty/assimp/packaging/windows-innosetup/LICENSE.rtf b/thirdparty/assimp/packaging/windows-innosetup/LICENSE.rtf deleted file mode 100644 index 48b00deab9270e1a426e86f6e5d6896301d1dcc3..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2260 zcmb_e+m72d5bbk-{=*`&v6p$s_CLl|$B=2Scy~q-^CMrt?Nv&%H`S%{u zcH&J@^rgVUOOu?LGiQcp{H0K)nG|KGWl@W!8Gk97zB6XiVlgh7PPRo;ZA+zv8B@>? zN(x1>IDGp0_2*|_ir2-1=!7awuV|?oBWh{r!|45Fbc4SS<6k~~Egq#f{3*NoeKAy% zVqdDdXv^+lGJZF4G4#!i-TnDlu_+oo`G_$4qmmC>LocgWbTb}*d~-9Nj6L$Rj4xLd zibv7*`<>_v<)Yl3to^nnXQfFAE!3l^M;E{2(;@{tZIs*$M)n<*T}^`))Hh_dQj_i* zb10P{*%CArX+Q<-RsSe! zEX=kv_z-Z?w*5hN4^;IXxPp;(Mmu4CJ)?D8yr!pMwMBUbRrR%?-JlH;H6_4W&*i3n z6!3bXuIr7ggm=oUMcUTEbxy72ZdND%RglM50gTMwY@{{~~LVSUzp zHQ16nrfp%~q6$4u6zxhQlq_5QopDztXLeQbAM%O?Y6x?Ctt)ruMi7@aGiWW3Iz+i# za7BU$t=I~Q$|>?(&UzhETri@4i9(iUclb)I13xu3!ExjXRVdt#qgDa$fSQo>`5IGn+I>c=@}nMXVh zqIJmQxkqq7agtNSmpsR{Jn>x6f0|J;qa{m&1-$rE9`XF%#hdXwwy|ai=F`ega~`ZC zKc&?=T_qVKn^wrPAoBT=g(E~qL}Irr&M8~?QS?KW$z9A+3;juoQwEIwG-9VfNHXLp z3v!#y_f-Jm059?=Td{!K1^diEfuG)cXP+7SV~tBVq|jgbbC%J||6l|q3DzlFTF9Uw zTTio`=j)u&JV`>wbH>tJ9OD(F93)Z(Ujj9P=LCEg1Gu-}uCnZ>h-85`it|w`&N84#}@F zq?pYkK4)>jESSW4x#Jmog+g%vn_HJQ?46I8Xb;4-Z3s}Ox55!$?k zvia?Mdo3^~DhR!(>=1Bo{jtPr9&lL+ zah7q2$w}B`2leWNaqf@K`x_cM;K3CuPzQ;i8o~!}Z>}W%Bm`2~c?Z=nkQS0wDyez;SR;FyVmN?#m7$h{@O;h5!Hn diff --git a/thirdparty/assimp/packaging/windows-innosetup/WEB b/thirdparty/assimp/packaging/windows-innosetup/WEB deleted file mode 100644 index 8840d23..0000000 --- a/thirdparty/assimp/packaging/windows-innosetup/WEB +++ /dev/null @@ -1,8 +0,0 @@ - -Project home page: -http://assimp.sourceforge.net - -Sourceforge.net project page: -http://www.sourceforge.net/projects/assimp - - diff --git a/thirdparty/assimp/packaging/windows-innosetup/howto-build-setup.txt b/thirdparty/assimp/packaging/windows-innosetup/howto-build-setup.txt deleted file mode 100644 index d089c0c..0000000 --- a/thirdparty/assimp/packaging/windows-innosetup/howto-build-setup.txt +++ /dev/null @@ -1,16 +0,0 @@ - -How to build the Assimp installer using Inno Setup - - -1) Get MS VC 2008 SP1 redist packages for x86 and amd64 and copy 'em right here. - -vcredist_x86.exe -vcredist_x64.exe - -2) Get D3DCompiler_NN.dll and D3DX9_NN.dll from a) your system32 folder and b) your SysWOW64 folder. Copy all 4 here. Rename the 64 bit files to _x64.dll. NN is the D3DX version targeted by your DX SDK. If it is not 42, you need to update the Inno setup script (script.iss) as well. If you don't have a 64 bit Windows, get the DLLs from somebody else. Please don't ask google because many DLL downloads are infected. - -3) Build assimp, assimpcmd and assimpview for the 'release-dll' target and both the Win32 and x64 architectures. - -4) Get Inno Setup -5) Compile, output is written to the 'out' folder. - diff --git a/thirdparty/assimp/packaging/windows-innosetup/readme_installer.txt b/thirdparty/assimp/packaging/windows-innosetup/readme_installer.txt deleted file mode 100644 index 6ea969d..0000000 --- a/thirdparty/assimp/packaging/windows-innosetup/readme_installer.txt +++ /dev/null @@ -1,23 +0,0 @@ - ------------------------------------------------------------------------------------- -Open Asset Import Library (Assimp) SDK Installer -Release Notes ------------------------------------------------------------------------------------- - -http://assimp.sf.net - - -Troubleshooting -=============== - -1. Missing d3dx9_(some-number).dll? -Install the latest DirectX runtime or grab the file from somewhere (that's evil but mostly fine). - -2. Application configuration not correct / missing msvcr***.dll? -Reinstall Microsoft Visual C++ 2005 SP1 Redistributable (x86 or x64, depending on your system) - -3. assimp.exe not in PATH -Add it to PATH. That's not a bug, the installer does not alter the PATH. - -4. Crashes immediately -You CPU lacks SSE2 support. Build Assimp from scratch to suit your CPU, sorry. diff --git a/thirdparty/assimp/packaging/windows-innosetup/readme_installer_vieweronly.txt b/thirdparty/assimp/packaging/windows-innosetup/readme_installer_vieweronly.txt deleted file mode 100644 index bfa4f8c..0000000 --- a/thirdparty/assimp/packaging/windows-innosetup/readme_installer_vieweronly.txt +++ /dev/null @@ -1,32 +0,0 @@ - ------------------------------------------------------------------------------------- -Open Asset Import Library (Assimp) Viewer Installer -Release Notes ------------------------------------------------------------------------------------- - -http://assimp.sf.net - -Known Bugs & Limitations -======================== - -Viewer - -- Normals appear flipped from time to time when either of the normals-related menu items was hit. -- Alpha-sorting is implemented, but still causes artifacts when models are moved quickly. -- Several important texture file formats (such as GIF) are not supported. -- HUD is blurred on the right side. ATI/AMD hardware only. - -Troubleshooting -=============== - -1. Missing d3dx9_(number).dll? -Install the latest DirectX runtime or grab the file from somewhere (that's evil but mostly fine). - -2. Application configuration not correct / missing msvcr***.dll? -Reinstall Microsoft Visual C++ 2005 SP1 Redistributable (x86 or x64, depending on your system) - -3. assimp.exe not in PATH -Add it to PATH. That's not a bug, the installer does not alter the PATH. - -4. Crashes immediately -You CPU lacks SSE2 support. Build Assimp from scratch to suit your CPU, sorry. \ No newline at end of file diff --git a/thirdparty/assimp/packaging/windows-innosetup/script_vieweronly.iss b/thirdparty/assimp/packaging/windows-innosetup/script_vieweronly.iss deleted file mode 100644 index 1a91fb9..0000000 --- a/thirdparty/assimp/packaging/windows-innosetup/script_vieweronly.iss +++ /dev/null @@ -1,60 +0,0 @@ -; Setup script for use with Inno Setup. - -[Setup] -AppName=Open Asset Import Library - Viewer -AppVerName=Open Asset Import Library - Viewer (v2.0) -DefaultDirName={pf}\AssimpView -DefaultGroupName=AssimpView -UninstallDisplayIcon={app}\bin\x86\assimp.exe -OutputDir=out_vieweronly -AppCopyright=Assimp Development Team -SetupIconFile=..\..\tools\shared\assimp_tools_icon.ico -WizardImageFile=compiler:WizModernImage-IS.BMP -WizardSmallImageFile=compiler:WizModernSmallImage-IS.BMP -LicenseFile=License.rtf -OutputBaseFileName=assimp-view-2.0-setup -VersionInfoVersion=2.0.0.0 -VersionInfoTextVersion=2.0 -VersionInfoCompany=Assimp Development Team -ArchitecturesInstallIn64BitMode=x64 - - -[Run] -Filename: "{app}\stub\vcredist_x86.exe"; Parameters: "/qb"; StatusMsg: "Installing VS2008 SP1 redistributable package (32 Bit)"; Check: not IsWin64 -Filename: "{app}\stub\vcredist_x64.exe"; Parameters: "/qb"; StatusMsg: "Installing VS2008 SP1 redistributable package (64 Bit)"; Check: IsWin64 - -[Files] - -Source: "readme_installer_vieweronly.txt"; DestDir: "{app}"; Flags: isreadme - -; Installer stub -Source: "vcredist_x86.exe"; DestDir: "{app}\stub\"; Check: not IsWin64 -Source: "vcredist_x64.exe"; DestDir: "{app}\stub\"; Check: IsWin64 - -; Common stuff -Source: "..\..\CREDITS"; DestDir: "{app}" -Source: "..\..\LICENSE"; DestDir: "{app}" -Source: "..\..\README"; DestDir: "{app}" -Source: "WEB"; DestDir: "{app}" - -; x86 binaries -Source: "..\..\bin\assimp_release-dll_Win32\Assimp32.dll"; DestDir: "{app}\bin\x86" -Source: "..\..\bin\assimpview_release-dll_Win32\assimp_view.exe"; DestDir: "{app}\bin\x86" -Source: "D3DCompiler_42.dll"; DestDir: "{app}\bin\x86" -Source: "D3DX9_42.dll"; DestDir: "{app}\bin\x86" -Source: "..\..\bin\assimpcmd_release-dll_Win32\assimp.exe"; DestDir: "{app}\bin\x86" - -; x64 binaries -Source: "..\..\bin\assimp_release-dll_x64\Assimp64.dll"; DestDir: "{app}\bin\x64" -Source: "..\..\bin\assimpview_release-dll_x64\assimp_view.exe"; DestDir: "{app}\bin\x64" -Source: "D3DCompiler_42_x64.dll"; DestDir: "{app}\bin\x64"; DestName: "D3DCompiler_42.dll" -Source: "D3DX9_42_x64.dll"; DestDir: "{app}\bin\x64"; DestName: "D3DX9_42.dll" -Source: "..\..\bin\assimpcmd_release-dll_x64\assimp.exe"; DestDir: "{app}\bin\x64" - -; Documentation -Source: "..\..\doc\AssimpCmdDoc_Html\AssimpCmdDoc.chm"; DestDir: "{app}\doc" - -[Icons] -Name: "{group}\Assimp Command Line Manual"; Filename: "{app}\doc\AssimpCmdDoc.chm" -Name: "{group}\AssimpView"; Filename: "{app}\bin\x64\assimp_view.exe"; Check: IsWin64 -Name: "{group}\AssimpView"; Filename: "{app}\bin\x86\assimp_view.exe"; Check: not IsWin64 diff --git a/thirdparty/assimp/packaging/windows-innosetup/script_x64.iss b/thirdparty/assimp/packaging/windows-innosetup/script_x64.iss deleted file mode 100644 index 4d1b67c..0000000 --- a/thirdparty/assimp/packaging/windows-innosetup/script_x64.iss +++ /dev/null @@ -1,74 +0,0 @@ -; Setup script for use with Inno Setup. - -[Setup] -AppName=Open Asset Import Library - SDK -AppVerName=Open Asset Import Library - SDK (v5.0.0) -DefaultDirName={pf}\Assimp -DefaultGroupName=Assimp -UninstallDisplayIcon={app}\bin\x64\assimp.exe -OutputDir=out -AppCopyright=Assimp Development Team -SetupIconFile=..\..\tools\shared\assimp_tools_icon.ico -WizardImageFile=compiler:WizModernImage-IS.BMP -WizardSmallImageFile=compiler:WizModernSmallImage-IS.BMP -LicenseFile=License.rtf -OutputBaseFileName=assimp-sdk-5.0.0-setup -VersionInfoVersion=5.0.0.0 -VersionInfoTextVersion=5.0.0 -VersionInfoCompany=Assimp Development Team -ArchitecturesInstallIn64BitMode=x64 - -[Types] -Name: "full"; Description: "Full installation" -Name: "compact"; Description: "Compact installation, no test models or language bindings" -Name: "custom"; Description: "Custom installation"; Flags: iscustom - -[Components] -Name: "main"; Description: "Main Files ( 64 Bit )"; Types: full compact custom; Flags: fixed -Name: "tools"; Description: "Asset Viewer & Command Line Tools (32 and 64 Bit)"; Types: full compact -Name: "help"; Description: "Help Files"; Types: full compact -Name: "samples"; Description: "Samples"; Types: full -Name: "test"; Description: "Test Models (BSD-licensed)"; Types: full -Name: "test_nonbsd"; Description: "Test Models (other (free) licenses)"; Types: full - -[Run] -Filename: "{app}\stub\vc_redist.x64.exe"; Parameters: "/qb /passive /quiet"; StatusMsg: "Installing VS2017 redistributable package (64 Bit)"; Check: IsWin64 - -[Files] -Source: "readme_installer.txt"; DestDir: "{app}"; Flags: isreadme - -; Installer stub -Source: "vc_redist.x64.exe"; DestDir: "{app}\stub\"; Check: IsWin64 - -; Common stuff -Source: "..\..\CREDITS"; DestDir: "{app}" -Source: "..\..\LICENSE"; DestDir: "{app}" -Source: "..\..\README"; DestDir: "{app}" -Source: "WEB"; DestDir: "{app}" - -Source: "..\..\scripts\*"; DestDir: "{app}\scripts"; Flags: recursesubdirs - -; x64 binaries -Source: "..\..\bin\release\assimp-vc141-mt.dll"; DestDir: "{app}\bin\x64" -Source: "..\..\bin\release\assimp_viewer.exe"; DestDir: "{app}\bin\x64"; Components: tools -Source: "C:\Windows\SysWOW64\D3DCompiler_42.dll"; DestDir: "{app}\bin\x64"; DestName: "D3DCompiler_42.dll"; Components: tools -Source: "C:\Windows\SysWOW64\D3DX9_42.dll"; DestDir: "{app}\bin\x64"; DestName: "D3DX9_42.dll"; Components: tools -Source: "..\..\bin\release\assimp.exe"; DestDir: "{app}\bin\x64"; Components: tools - -; Import libraries -Source: "..\..\lib\release\assimp-vc141-mt.lib"; DestDir: "{app}\lib\x64" - -; Samples -Source: "..\..\samples\*"; DestDir: "{app}\samples"; Flags: recursesubdirs; Components: samples - -; Include files -Source: "..\..\include\*"; DestDir: "{app}\include"; Flags: recursesubdirs - -; CMake files -Source: "..\..\cmake-modules\*"; DestDir: "{app}\cmake-modules"; Flags: recursesubdirs - -[Icons] -; Name: "{group}\Assimp Manual"; Filename: "{app}\doc\AssimpDoc.chm" ; Components: help -; Name: "{group}\Assimp Command Line Manual"; Filename: "{app}\doc\AssimpCmdDoc.chm"; Components: help -; Name: "{group}\AssimpView"; Filename: "{app}\bin\x64\assimp_view.exe"; Components: tools; Check: IsWin64 -; Name: "{group}\AssimpView"; Filename: "{app}\bin\x86\assimp_view.exe"; Components: tools; Check: not IsWin64 diff --git a/thirdparty/assimp/packaging/windows-innosetup/script_x86.iss b/thirdparty/assimp/packaging/windows-innosetup/script_x86.iss deleted file mode 100644 index d22d23b..0000000 --- a/thirdparty/assimp/packaging/windows-innosetup/script_x86.iss +++ /dev/null @@ -1,75 +0,0 @@ -; Setup script for use with Inno Setup. - -[Setup] -AppName=Open Asset Import Library - SDK -AppVerName=Open Asset Import Library - SDK (v5.0.0) -DefaultDirName={pf}\Assimp -DefaultGroupName=Assimp -UninstallDisplayIcon={app}\bin\x86\assimp.exe -OutputDir=out -AppCopyright=Assimp Development Team -SetupIconFile=..\..\tools\shared\assimp_tools_icon.ico -WizardImageFile=compiler:WizModernImage-IS.BMP -WizardSmallImageFile=compiler:WizModernSmallImage-IS.BMP -LicenseFile=License.rtf -OutputBaseFileName=assimp-sdk-5.0.0-setup -VersionInfoVersion=4.1.0.0 -VersionInfoTextVersion=4.1.0 -VersionInfoCompany=Assimp Development Team -;ArchitecturesInstallIn64BitMode=x64 - -[Types] -Name: "full"; Description: "Full installation" -Name: "compact"; Description: "Compact installation, no test models or language bindings" -Name: "custom"; Description: "Custom installation"; Flags: iscustom - -[Components] -Name: "main"; Description: "Main Files (32 and 64 Bit)"; Types: full compact custom; Flags: fixed -Name: "tools"; Description: "Asset Viewer & Command Line Tools (32 and 64 Bit)"; Types: full compact -Name: "help"; Description: "Help Files"; Types: full compact -Name: "samples"; Description: "Samples"; Types: full -Name: "test"; Description: "Test Models (BSD-licensed)"; Types: full -Name: "test_nonbsd"; Description: "Test Models (other (free) licenses)"; Types: full - -[Run] -Filename: "{app}\stub\vc_redist.x86.exe"; Parameters: "/qb /passive /quiet"; StatusMsg: "Installing VS2017 redistributable package (32 Bit)"; Check: not IsWin64 - -[Files] -Source: "readme_installer.txt"; DestDir: "{app}"; Flags: isreadme - -; Installer stub -Source: "vc_redist.x86.exe"; DestDir: "{app}\stub\"; Check: not IsWin64 - -; Common stuff -Source: "..\..\CREDITS"; DestDir: "{app}" -Source: "..\..\LICENSE"; DestDir: "{app}" -Source: "..\..\README"; DestDir: "{app}" -Source: "WEB"; DestDir: "{app}" - -Source: "..\..\scripts\*"; DestDir: "{app}\scripts"; Flags: recursesubdirs - -; x86 binaries -Source: "..\..\bin\release\assimp-vc141-mt.dll"; DestDir: "{app}\bin\x86" -Source: "..\..\bin\release\assimp_viewer.exe"; DestDir: "{app}\bin\x86"; Components: tools -Source: "C:\Windows\SysWOW64\D3DCompiler_42.dll"; DestDir: "{app}\bin\x86"; Components: tools -Source: "C:\Windows\SysWOW64\D3DX9_42.dll"; DestDir: "{app}\bin\x86"; Components: tools -Source: "..\..\bin\release\assimp.exe"; DestDir: "{app}\bin\x86"; Components: tools - - -; Import libraries -Source: "..\..\lib\release\assimp-vc141-mt.lib"; DestDir: "{app}\lib\x86" - -; Samples -Source: "..\..\samples\*"; DestDir: "{app}\samples"; Flags: recursesubdirs; Components: samples - -; Include files -Source: "..\..\include\*"; DestDir: "{app}\include"; Flags: recursesubdirs - -; CMake files -Source: "..\..\cmake-modules\*"; DestDir: "{app}\cmake-modules"; Flags: recursesubdirs - -[Icons] -; Name: "{group}\Assimp Manual"; Filename: "{app}\doc\AssimpDoc.chm" ; Components: help -; Name: "{group}\Assimp Command Line Manual"; Filename: "{app}\doc\AssimpCmdDoc.chm"; Components: help -; Name: "{group}\AssimpView"; Filename: "{app}\bin\x64\assimp_view.exe"; Components: tools; Check: IsWin64 -; Name: "{group}\AssimpView"; Filename: "{app}\bin\x86\assimp_view.exe"; Components: tools; Check: not IsWin64 diff --git a/thirdparty/assimp/packaging/windows-mkzip/bin_readme.txt b/thirdparty/assimp/packaging/windows-mkzip/bin_readme.txt deleted file mode 100644 index 10839a3..0000000 --- a/thirdparty/assimp/packaging/windows-mkzip/bin_readme.txt +++ /dev/null @@ -1,29 +0,0 @@ - ------------------------------------------------------------------------------------- -Open Asset Import Library (Assimp) Tools/Binaries for Windows -Release Notes ------------------------------------------------------------------------------------- - - -Known Bugs & Limitations -======================== - -Viewer - -- For files more than one embedded texture, only the first is loaded. -- Normals appear flipped from time to time when either of the normals-related menu items was hit. -- Alpha-sorting is implemented, but still causes artifacts when models are moved quickly. -- Several important texture file formats (such as GIF) are not supported. -- HUD is blurred on the right side. ATI/AMD hardware only. - -Troubleshooting -=============== - -1. Missing d3dx9_42.dll? -Install the latest DirectX runtime or grab the file from somewhere (that's evil but mostly fine). - -2. Application configuration not correct / missing msv*** DLLs? -(Re)install Microsoft Visual C++ 2005 SP1 Redistributable (x86 or x64, depending on your system) - -3. Crashes immediately -You CPU lacks SSE2 support. Build Assimp from scratch to suit your CPU, sorry. \ No newline at end of file diff --git a/thirdparty/assimp/packaging/windows-mkzip/mkfinal.bat b/thirdparty/assimp/packaging/windows-mkzip/mkfinal.bat deleted file mode 100644 index b626514..0000000 --- a/thirdparty/assimp/packaging/windows-mkzip/mkfinal.bat +++ /dev/null @@ -1,169 +0,0 @@ - -rem ----------------------------------------------------- -rem Batch file to build zipped redist packages -rem Two different packages are built: -rem -rem assimp---bin.zip -rem Binaries for x86 and x64 -rem Command line reference -rem -rem assimp---sdk.zip -rem Binaries for x86 and x64, Debug & Release -rem Libs for DLL build, x86 & 64, Debug & Release -rem Full SVN checkout exluding mkutil & port -rem -rem -rem PREREQUISITES: -rem -7za.exe (7zip standalone) -rem Download from http://www.7-zip.org/download.html -rem -rem -svnversion.exe (Subversion revision getter) -rem Download any command line SVN package -rem -rem -doxygen.exe (Doxygen client) -rem Download from www.doxygen.com -rem -rem -svn client -rem -rem NOTES: -rem ./bin must not have any local modifications -rem -rem ----------------------------------------------------- - -@echo off -color 4e -cls - -rem ----------------------------------------------------- -rem Setup file revision for build -rem ----------------------------------------------------- -call mkrev.bat - -rem ----------------------------------------------------- -rem Build output file names -rem ----------------------------------------------------- - -cd ..\..\bin -svnversion > tmpfile.txt -SET /p REVISIONBASE= < tmpfile.txt -DEL /q tmpfile.txt -cd ..\packaging\windows-mkzip - -SET VERSIONBASE=2.0.%REVISIONBASE% - -SET OUT_SDK=assimp--%VERSIONBASE%-sdk -SET OUT_BIN=assimp--%VERSIONBASE%-bin - -SET BINCFG_x86=release-dll_win32 -SET BINCFG_x64=release-dll_x64 - -SET BINCFG_x86_DEBUG=debug-dll_win32 -SET BINCFG_x64_DEBUG=debug-dll_x64 - -rem ----------------------------------------------------- -rem Delete previous output directories -rem ----------------------------------------------------- -RD /S /q final\ - -rem ----------------------------------------------------- -rem Create output directories -rem ----------------------------------------------------- - -mkdir final\%OUT_BIN%\x86 -mkdir final\%OUT_BIN%\x64 - -rem ----------------------------------------------------- -rem Copy all executables to 'final-bin' -rem ----------------------------------------------------- - -copy /Y ..\..\bin\assimpview_%BINCFG_x86%\assimp_view.exe "final\%OUT_BIN%\x86\assimp_view.exe" -copy /Y ..\..\bin\assimpview_%BINCFG_x64%\assimp_view.exe "final\%OUT_BIN%\x64\assimp_view.exe" - -copy /Y ..\..\bin\assimpcmd_%BINCFG_x86%\assimp.exe "final\%OUT_BIN%\x86\assimp.exe" -copy /Y ..\..\bin\assimpcmd_%BINCFG_x64%\assimp.exe "final\%OUT_BIN%\x64\assimp.exe" - -copy /Y ..\..\bin\assimp_%BINCFG_x86%\Assimp32.dll "final\%OUT_BIN%\x86\Assimp32.dll" -copy /Y ..\..\bin\assimp_%BINCFG_x64%\Assimp64.dll "final\%OUT_BIN%\x64\Assimp64.dll" - -copy ..\..\LICENSE final\%OUT_BIN%\LICENSE -copy ..\..\CREDITS final\%OUT_BIN%\CREDITS -copy bin_readme.txt final\%OUT_BIN%\README -copy bin_readme.txt final\%OUT_BIN%\README - -copy ..\..\doc\AssimpCmdDoc_Html\AssimpCmdDoc.chm final\%OUT_BIN%\CommandLine.chm - -rem ----------------------------------------------------- -rem Do a clean export of the repository and build SDK -rem -rem We take the current revision and remove some stuff -rem that is nto yet ready to be published. -rem ----------------------------------------------------- - -svn export .\..\..\ .\final\%OUT_SDK% - -mkdir final\%OUT_SDK%\doc\assimp_html -mkdir final\%OUT_SDK%\doc\assimpcmd_html -copy .\..\..\doc\AssimpDoc_Html\* final\%OUT_SDK%\doc\assimp_html -copy .\..\..\doc\AssimpCmdDoc_Html\* final\%OUT_SDK%\doc\assimpcmd_html -del final\%OUT_SDK%\doc\assimpcmd_html\AssimpCmdDoc.chm -del final\%OUT_SDK%\doc\assimp_html\AssimpDoc.chm - -rem Copy doc to a suitable place -move final\%OUT_SDK%\doc\AssimpDoc_Html\AssimpDoc.chm final\%OUT_SDK%\Documentation.chm -move final\%OUT_SDK%\doc\AssimpCmdDoc_Html\AssimpCmdDoc.chm final\%OUT_SDK%\CommandLine.chm - -rem Cleanup ./doc folder -del /q final\%OUT_SDK%\doc\Preamble.txt -RD /s /q final\%OUT_SDK%\doc\AssimpDoc_Html -RD /s /q final\%OUT_SDK%\doc\AssimpCmdDoc_Html - -rem Insert 'dummy' files into empty folders -echo. > final\%OUT_SDK%\lib\dummy -echo. > final\%OUT_SDK%\obj\dummy - - -RD /s /q final\%OUT_SDK%\port\swig - -rem Also, repackaging is not a must-have feature -RD /s /q final\%OUT_SDK%\packaging - -rem Copy prebuilt libs -mkdir "final\%OUT_SDK%\lib\assimp_%BINCFG_x86%" -mkdir "final\%OUT_SDK%\lib\assimp_%BINCFG_x64%" -mkdir "final\%OUT_SDK%\lib\assimp_%BINCFG_x86_DEBUG%" -mkdir "final\%OUT_SDK%\lib\assimp_%BINCFG_x64_DEBUG%" - -copy /Y ..\..\lib\assimp_%BINCFG_x86%\assimp.lib "final\%OUT_SDK%\lib\assimp_%BINCFG_x86%" -copy /Y ..\..\lib\assimp_%BINCFG_x64%\assimp.lib "final\%OUT_SDK%\lib\assimp_%BINCFG_x64%\" -copy /Y ..\..\lib\assimp_%BINCFG_x86_DEBUG%\assimp.lib "final\%OUT_SDK%\lib\assimp_%BINCFG_x86_DEBUG%\" -copy /Y ..\..\lib\assimp_%BINCFG_x64_DEBUG%\assimp.lib "final\%OUT_SDK%\lib\assimp_%BINCFG_x64_DEBUG%\" - -rem Copy prebuilt DLLs -mkdir "final\%OUT_SDK%\bin\assimp_%BINCFG_x86%" -mkdir "final\%OUT_SDK%\bin\assimp_%BINCFG_x64%" -mkdir "final\%OUT_SDK%\bin\assimp_%BINCFG_x86_DEBUG%" -mkdir "final\%OUT_SDK%\bin\assimp_%BINCFG_x64_DEBUG%" - - -copy /Y ..\..\bin\assimp_%BINCFG_x86%\Assimp32.dll "final\%OUT_SDK%\bin\assimp_%BINCFG_x86%\" -copy /Y ..\..\bin\assimp_%BINCFG_x64%\Assimp64.dll "final\%OUT_SDK%\bin\assimp_%BINCFG_x64%\" -copy /Y ..\..\bin\assimp_%BINCFG_x86_DEBUG%\Assimp32d.dll "final\%OUT_SDK%\bin\assimp_%BINCFG_x86_DEBUG%\" -copy /Y ..\..\bin\assimp_%BINCFG_x64_DEBUG%\Assimp64d.dll "final\%OUT_SDK%\bin\assimp_%BINCFG_x64_DEBUG%\" - - -rem ----------------------------------------------------- -rem Make final-bin.zip and final-sdk.zip -rem ----------------------------------------------------- - -IF NOT EXIST 7za.exe ( - cls - echo You need to have 7zip standalone installed to - echo build ZIP archives. Download: http://www.7-zip.org/download.html - pause -) else ( -7za.exe a -tzip "final\%OUT_BIN%.zip" ".\final\%OUT_BIN%" -7za.exe a -tzip "final\%OUT_SDK%.zip" ".\final\%OUT_SDK%" -) - -rem OK. We should have the release packages now. - diff --git a/thirdparty/assimp/packaging/windows-mkzip/mkrev.bat b/thirdparty/assimp/packaging/windows-mkzip/mkrev.bat deleted file mode 100644 index 9d8eec1..0000000 --- a/thirdparty/assimp/packaging/windows-mkzip/mkrev.bat +++ /dev/null @@ -1,27 +0,0 @@ -@echo off - -rem ----------------------------------------------------- -rem Tiny batch script to build the input file revision.h -rem revision.h contains the revision number of the wc. -rem It is included by assimp.rc. -rem ----------------------------------------------------- - -rem This is not very elegant, but it works. -rem ./bin shouldn't have any local modifications - -svnversion > tmpfile.txt -set /p addtext= < tmpfile.txt -del /q tmpfile.txt - -echo #define SVNRevision > tmpfile.txt - -if exist ..\..\revision.h del /q ..\..\revision.h -for /f "delims=" %%l in (tmpfile.txt) Do ( - for /f "delims=M:" %%r in ("%addtext%") Do ( - echo %%l %%r >> ..\..\revision.h - ) -) -del /q tmpfile.txt - - - diff --git a/thirdparty/assimp/port/AndroidJNI/AndroidJNIIOSystem.cpp b/thirdparty/assimp/port/AndroidJNI/AndroidJNIIOSystem.cpp deleted file mode 100644 index e276ea5..0000000 --- a/thirdparty/assimp/port/AndroidJNI/AndroidJNIIOSystem.cpp +++ /dev/null @@ -1,207 +0,0 @@ -/* ---------------------------------------------------------------------------- -Open Asset Import Library (assimp) ---------------------------------------------------------------------------- - -Copyright (c) 2006-2016, assimp 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 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 Android extension of DefaultIOSystem using the standard C file functions */ - - -#include -#include -#if __ANDROID__ and __ANDROID_API__ > 9 and defined(AI_CONFIG_ANDROID_JNI_ASSIMP_MANAGER_SUPPORT) - -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include - -using namespace Assimp; - -// ------------------------------------------------------------------------------------------------ -// Constructor. -AndroidJNIIOSystem::AndroidJNIIOSystem(ANativeActivity* activity) -{ - AndroidActivityInit(activity); -} - -// ------------------------------------------------------------------------------------------------ -// Destructor. -AndroidJNIIOSystem::~AndroidJNIIOSystem() -{ - // nothing to do here -} - -// ------------------------------------------------------------------------------------------------ -// Tests for the existence of a file at the given path. -bool AndroidJNIIOSystem::Exists( const char* pFile) const -{ - AAsset* asset = AAssetManager_open(mApkAssetManager, pFile, - AASSET_MODE_UNKNOWN); - FILE* file = ::fopen( (mApkWorkspacePath + getOsSeparator() + std::string(pFile)).c_str(), "rb"); - - if (!asset && !file) - { - __android_log_print(ANDROID_LOG_ERROR, "Assimp", "Asset manager can not find: %s", pFile); - return false; - } - - __android_log_print(ANDROID_LOG_ERROR, "Assimp", "Asset exists"); - if (file) - ::fclose( file); - return true; -} - -// ------------------------------------------------------------------------------------------------ -// Inits Android extractor -void AndroidJNIIOSystem::AndroidActivityInit(ANativeActivity* activity) -{ - mApkWorkspacePath = activity->internalDataPath; - mApkAssetManager = activity->assetManager; -} - -// ------------------------------------------------------------------------------------------------ -// Create the directory for the extracted resource -static int mkpath(std::string path, mode_t mode) -{ - if (mkdir(path.c_str(), mode) == -1) { - switch(errno) { - case ENOENT: - if (mkpath(path.substr(0, path.find_last_of('/')), mode) == -1) - return -1; - else - return mkdir(path.c_str(), mode); - case EEXIST: - return 0; - default: - return -1; - } - } - - return 0; -} - -// ------------------------------------------------------------------------------------------------ -// Extracts android asset -bool AndroidJNIIOSystem::AndroidExtractAsset(std::string name) -{ - std::string newPath = mApkWorkspacePath + getOsSeparator() + name; - - DefaultIOSystem io; - - // Do not extract if extracted already - if ( io.Exists(newPath.c_str()) ) { - __android_log_print(ANDROID_LOG_DEFAULT, "Assimp", "Asset already extracted"); - return true; - } - // Open file - AAsset* asset = AAssetManager_open(mApkAssetManager, name.c_str(), - AASSET_MODE_UNKNOWN); - std::vector assetContent; - - if (asset != NULL) { - // Find size - off_t assetSize = AAsset_getLength(asset); - - // Prepare input buffer - assetContent.resize(assetSize); - - // Store input buffer - AAsset_read(asset, &assetContent[0], assetSize); - - // Close - AAsset_close(asset); - - // Prepare directory for output buffer - std::string directoryNewPath = newPath; - directoryNewPath = dirname(&directoryNewPath[0]); - - if (mkpath(directoryNewPath, S_IRUSR | S_IWUSR | S_IXUSR) == -1) { - __android_log_print(ANDROID_LOG_ERROR, "assimp", - "Can not create the directory for the output file"); - } - - // Prepare output buffer - std::ofstream assetExtracted(newPath.c_str(), - std::ios::out | std::ios::binary); - if (!assetExtracted) { - __android_log_print(ANDROID_LOG_ERROR, "assimp", - "Can not open output file"); - } - - // Write output buffer into a file - assetExtracted.write(&assetContent[0], assetContent.size()); - assetExtracted.close(); - - __android_log_print(ANDROID_LOG_DEFAULT, "Assimp", "Asset extracted"); - } else { - __android_log_print(ANDROID_LOG_ERROR, "assimp", "Asset not found: %s", name.c_str()); - return false; - } - return true; -} - -// ------------------------------------------------------------------------------------------------ -// Open a new file with a given path. -IOStream* AndroidJNIIOSystem::Open( const char* strFile, const char* strMode) -{ - ai_assert(NULL != strFile); - ai_assert(NULL != strMode); - - std::string fullPath(mApkWorkspacePath + getOsSeparator() + std::string(strFile)); - if (Exists(strFile)) - AndroidExtractAsset(std::string(strFile)); - - FILE* file = ::fopen( fullPath.c_str(), strMode); - - if( NULL == file) - return NULL; - - __android_log_print(ANDROID_LOG_ERROR, "assimp", "AndroidIOSystem: file %s opened", fullPath.c_str()); - return new DefaultIOStream(file, fullPath); -} - -#undef PATHLIMIT -#endif // __ANDROID__ and __ANDROID_API__ > 9 and defined(AI_CONFIG_ANDROID_JNI_ASSIMP_MANAGER_SUPPORT) diff --git a/thirdparty/assimp/port/AndroidJNI/CMakeLists.txt b/thirdparty/assimp/port/AndroidJNI/CMakeLists.txt deleted file mode 100644 index ddc7188..0000000 --- a/thirdparty/assimp/port/AndroidJNI/CMakeLists.txt +++ /dev/null @@ -1,6 +0,0 @@ -cmake_minimum_required(VERSION 2.8) - -include_directories(./) -include_directories(./../../) -add_library(android_jniiosystem STATIC AndroidJNIIOSystem.cpp) -TARGET_LINK_LIBRARIES(android_jniiosystem android log) diff --git a/thirdparty/assimp/port/AndroidJNI/README.md b/thirdparty/assimp/port/AndroidJNI/README.md deleted file mode 100644 index 0b95efd..0000000 --- a/thirdparty/assimp/port/AndroidJNI/README.md +++ /dev/null @@ -1,27 +0,0 @@ -Build Asset Importer Lib for Android -==================================== -This module provides a facade for the io-stream-access to files behind the android-asset-management within -an Android-native application. -- It is built as a static library -- It requires Android NDK with android API > 9 support. - -### Building ### -To use this module please provide following cmake defines: -``` --DASSIMP_ANDROID_JNIIOSYSTEM=ON --DCMAKE_TOOLCHAIN_FILE=$SOME_PATH/android.toolchain.cmake -``` - -"SOME_PATH" is a path to your cmake android toolchain script. - -### Code ### -A small example how to wrap assimp for Android: -```cpp -#include - -Assimp::Importer* importer = new Assimp::Importer(); -Assimp::AndroidJNIIOSystem *ioSystem = new Assimp::AndroidJNIIOSystem(app->activity); -if ( nullptr != iosSystem ) { - importer->SetIOHandler(ioSystem); -} -``` diff --git a/thirdparty/assimp/port/AssimpDelphi/Readme.txt b/thirdparty/assimp/port/AssimpDelphi/Readme.txt deleted file mode 100644 index 07d6935..0000000 --- a/thirdparty/assimp/port/AssimpDelphi/Readme.txt +++ /dev/null @@ -1,6 +0,0 @@ -This is a set of Delphi units for using the Assimp C DLL. This was created for use with Delphi 7, but should be usable as-is or with minimal modifications with later Delphi versions. - -This set of headers is enough to load and display a model with external textures. Since I'm not familiar with animated models and some of the other functionality of the assimp library, I did not convert the headers for those features. - -See http://sourceforge.net/tracker/?func=detail&aid=3212646&group_id=226462&atid=1067634 for the original patch - diff --git a/thirdparty/assimp/port/AssimpDelphi/aiColor4D.pas b/thirdparty/assimp/port/AssimpDelphi/aiColor4D.pas deleted file mode 100644 index 0bc5d2a..0000000 --- a/thirdparty/assimp/port/AssimpDelphi/aiColor4D.pas +++ /dev/null @@ -1,17 +0,0 @@ -unit aiColor4D; - -interface - -const AI_MAX_NUMBER_OF_COLOR_SETS = $04; - -type TaiColor4D = packed record - r, g, b, a: single; -end; -type PaiColor4D = ^TaiColor4D; - -type TaiColor4DArray = array[0..0] of TaiColor4D; -type PTaiColor4DArray = ^TaiColor4DArray; - -implementation - -end. diff --git a/thirdparty/assimp/port/AssimpDelphi/aiMaterial.pas b/thirdparty/assimp/port/AssimpDelphi/aiMaterial.pas deleted file mode 100644 index ffd8109..0000000 --- a/thirdparty/assimp/port/AssimpDelphi/aiMaterial.pas +++ /dev/null @@ -1,153 +0,0 @@ -unit aiMaterial; - -interface - -uses aiTypes, aiVector2D, aiVector3D; - -{This following directive causes enums to be stored as double words (32bit), to be compatible with - the assimp C Dll} -{$Z4} - -type TaiTextureOp = ( - aiTextureOp_Multiply = $0, - aiTextureOp_Add = $1, - aiTextureOp_Subtract = $2, - aiTextureOp_Divide = $3, - aiTextureOp_SmoothAdd = $4, - aiTextureOp_SignedAdd = $5 - //_aiTextureOp_Force32Bit = 0x9fffffff -); - -type TaiTextureMapMode = ( - aiTextureMapMode_Wrap = $0, - aiTextureMapMode_Clamp = $1, - aiTextureMapMode_Decal = $3, - aiTextureMapMode_Mirror = $2 - //_aiTextureMapMode_Force32Bit = 0x9fffffff -); - -type TaiTextureMapping = ( - aiTextureMapping_UV = $0, - aiTextureMapping_SPHERE = $1, - aiTextureMapping_CYLINDER = $2, - aiTextureMapping_BOX = $3, - aiTextureMapping_PLANE = $4, - aiTextureMapping_OTHER = $5 - //_aiTextureMapping_Force32Bit = 0x9fffffff -); - -type TaiTextureType = ( - aiTextureType_NONE = $0, - aiTextureType_DIFFUSE = $1, - aiTextureType_SPECULAR = $2, - aiTextureType_AMBIENT = $3, - aiTextureType_EMISSIVE = $4, - aiTextureType_HEIGHT = $5, - aiTextureType_NORMALS = $6, - aiTextureType_SHININESS = $7, - aiTextureType_OPACITY = $8, - aiTextureType_DISPLACEMENT = $9, - aiTextureType_LIGHTMAP = $A, - aiTextureType_REFLECTION = $B, - aiTextureType_UNKNOWN = $C - //_aiTextureType_Force32Bit = 0x9fffffff -); - -const AI_TEXTURE_TYPE_MAX = aiTextureType_UNKNOWN; - -type TaiShadingMode = ( - aiShadingMode_Flat = $1, - aiShadingMode_Gouraud = $2, - aiShadingMode_Phong = $3, - aiShadingMode_Blinn = $4, - aiShadingMode_Toon = $5, - aiShadingMode_OrenNayar = $6, - aiShadingMode_Minnaert = $7, - aiShadingMode_CookTorrance = $8, - aiShadingMode_NoShading = $9, - aiShadingMode_Fresnel = $A - //_aiShadingMode_Force32Bit = 0x9fffffff -); - - -type TaiTextureFlags = ( - aiTextureFlags_Invert = $1, - aiTextureFlags_UseAlpha = $2, - aiTextureFlags_IgnoreAlpha = $4 - //_aiTextureFlags_Force32Bit = 0x9fffffff -); - -type TaiBlendMode = ( - aiBlendMode_Default = $0, - aiBlendMode_Additive = $1 - //_aiBlendMode_Force32Bit = 0x9fffffff -); - -type TaiUVTransform = packed record - mTranslation: TaiVector2D; - mScaling: TaiVector2D; - mRotation: single; -end; - -type TaiPropertyTypeInfo = ( - aiPTI_Float = $1, - aiPTI_String = $3, - aiPTI_Integer = $4, - aiPTI_Buffer = $5 - // _aiPTI_Force32Bit = 0x9fffffff -); - -type TaiMaterialProperty = packed record - mKey: aiString; - mSemantic: Cardinal; - mIndex: Cardinal; - mDataLength: Cardinal; - mType: TaiPropertyTypeInfo; - mData: PChar; -end; -type PaiMaterialProperty = ^TaiMaterialProperty; - -type TaiMaterial = packed record - mProperties: pointer; - mNumProperties: Cardinal; - mNumAllocated: Cardinal; -end; -type PaiMaterial = ^TaiMaterial; -type PaiMaterialArray = array[0..0] of PaiMaterial; -type PPaiMaterialArray = ^PaiMaterialArray; - -const AI_MATKEY_NAME = '?mat.name'; -const AI_MATKEY_TWOSIDED = '$mat.twosided'; -const AI_MATKEY_SHADING_MODEL = '$mat.shadingm'; -const AI_MATKEY_ENABLE_WIREFRAME = '$mat.wireframe'; -const AI_MATKEY_BLEND_FUNC = '$mat.blend'; -const AI_MATKEY_OPACITY = '$mat.opacity'; -const AI_MATKEY_BUMPSCALING = '$mat.bumpscaling'; -const AI_MATKEY_SHININESS = '$mat.shininess'; -const AI_MATKEY_REFLECTIVITY = '$mat.reflectivity'; -const AI_MATKEY_SHININESS_STRENGTH = '$mat.shinpercent'; -const AI_MATKEY_REFRACTI = '$mat.refracti'; -const AI_MATKEY_COLOR_DIFFUSE = '$clr.diffuse'; -const AI_MATKEY_COLOR_AMBIENT = '$clr.ambient'; -const AI_MATKEY_COLOR_SPECULAR = '$clr.specular'; -const AI_MATKEY_COLOR_EMISSIVE = '$clr.emissive'; -const AI_MATKEY_COLOR_TRANSPARENT = '$clr.transparent'; -const AI_MATKEY_COLOR_REFLECTIVE = '$clr.reflective'; -const AI_MATKEY_GLOBAL_BACKGROUND_IMAGE = '?bg.global'; - -const _AI_MATKEY_TEXTURE_BASE = '$tex.file'; -const _AI_MATKEY_UVWSRC_BASE = '$tex.uvwsrc'; -const _AI_MATKEY_TEXOP_BASE = '$tex.op'; -const _AI_MATKEY_MAPPING_BASE = '$tex.mapping'; -const _AI_MATKEY_TEXBLEND_BASE = '$tex.blend'; -const _AI_MATKEY_MAPPINGMODE_U_BASE = '$tex.mapmodeu'; -const _AI_MATKEY_MAPPINGMODE_V_BASE = '$tex.mapmodev'; -const _AI_MATKEY_TEXMAP_AXIS_BASE = '$tex.mapaxis'; -const _AI_MATKEY_UVTRANSFORM_BASE = '$tex.uvtrafo'; -const _AI_MATKEY_TEXFLAGS_BASE = '$tex.flags'; - - - -implementation - -end. diff --git a/thirdparty/assimp/port/AssimpDelphi/aiMatrix3x3.pas b/thirdparty/assimp/port/AssimpDelphi/aiMatrix3x3.pas deleted file mode 100644 index a90f11f..0000000 --- a/thirdparty/assimp/port/AssimpDelphi/aiMatrix3x3.pas +++ /dev/null @@ -1,16 +0,0 @@ -unit aiMatrix3x3; - -interface - -type TaiMatrix3x3 = packed record - a1, a2, a3, a4: single; - b1, b2, b3, b4: single; - c1, c2, c3, c4: single; -end; -PaiMatrix3x3 = ^TaiMatrix3x3; - - - -implementation - -end. diff --git a/thirdparty/assimp/port/AssimpDelphi/aiMatrix4x4.pas b/thirdparty/assimp/port/AssimpDelphi/aiMatrix4x4.pas deleted file mode 100644 index 45e0faf..0000000 --- a/thirdparty/assimp/port/AssimpDelphi/aiMatrix4x4.pas +++ /dev/null @@ -1,16 +0,0 @@ -unit aiMatrix4x4; - -interface - -type TaiMatrix4x4 = packed record - a1, a2, a3, a4: single; - b1, b2, b3, b4: single; - c1, c2, c3, c4: single; - d1, d2, d3, d4: single; -end; -PaiMatrix4x4 = ^TaiMatrix4x4; - - -implementation - -end. diff --git a/thirdparty/assimp/port/AssimpDelphi/aiMesh.pas b/thirdparty/assimp/port/AssimpDelphi/aiMesh.pas deleted file mode 100644 index a05a0f2..0000000 --- a/thirdparty/assimp/port/AssimpDelphi/aiMesh.pas +++ /dev/null @@ -1,71 +0,0 @@ -unit aiMesh; - -interface - -uses aiTypes, aiMatrix4x4, aiVector3D, aiColor4D; - -const - AI_MAX_NUMBER_OF_COLOR_SETS = $4; - AI_MAX_NUMBER_OF_TEXTURECOORDS = $4; - -type TaiFace = packed record - mNumIndicies: cardinal; - mIndices: PCardinalArray; -end; -type PaiFace = ^TaiFace; -type PaiFaceArray = array [0..0] of PaiFace; - -type TaiFaceArray = array [0..0] of TaiFace; -type PTaiFaceArray = ^TaiFaceArray; - -type TaiVertexWeight = packed record - mVertexId: cardinal; - mWeight: single; -end; - -type TaiBone = packed record - mName: aiString; - mNumWeights: cardinal; - mWeights: Pointer; - mOffsetMatrix: TaiMatrix4x4; -end; -type PaiBone = ^TaiBone; - -type TaiPrimitiveType = - ( - aiPrimitiveType_POINT = $1, - aiPrimitiveType_LINE = $2, - aiPrimitiveType_TRIANGLE = $4, - aiPrimitiveType_POLYGON = $8 - //,_aiPrimitiveType_Force32Bit = $9fffffff - ); - -type TaiMesh = packed record - mPrimitiveTypes: cardinal; - mNumVertices: cardinal; - mNumFaces: cardinal; - mVertices: PTaiVector3DArray; - mNormals: PTaiVector3DArray; - mTangents: PaiVector3DArray; - mBitangents: PaiVector3DArray; - mColors: array[0..3] of PTaiColor4Darray; //array [0..3] of PaiColor4DArray; //array of 4 - mTextureCoords: array [0..3] of PTaiVector3DArray; //array of 4 - mNumUVComponents: array[0..AI_MAX_NUMBER_OF_TEXTURECOORDS -1] of cardinal; - mFaces: PTaiFaceArray; - mNumBones: cardinal; - mBones: PaiBone; - mMaterialIndex: cardinal; - mName: aiString; - mNumAniMeshes: cardinal; - mAniMeshes: pointer; -end; -type PaiMesh = ^TaiMesh; -type PPaiMesh = ^PaiMesh; -type PaiMeshArray = array [0..0] of PaiMesh; -type PPaiMeshArray = ^PaiMeshArray; - - - -implementation - -end. diff --git a/thirdparty/assimp/port/AssimpDelphi/aiQuaternion.pas b/thirdparty/assimp/port/AssimpDelphi/aiQuaternion.pas deleted file mode 100644 index d5550de..0000000 --- a/thirdparty/assimp/port/AssimpDelphi/aiQuaternion.pas +++ /dev/null @@ -1,12 +0,0 @@ -unit aiQuaternion; - -interface - -type TaiQuaternion = packed record - w, x, y, z: single; -end; -type PaiQuaternion = ^TaiQuaternion; - -implementation - -end. diff --git a/thirdparty/assimp/port/AssimpDelphi/aiScene.pas b/thirdparty/assimp/port/AssimpDelphi/aiScene.pas deleted file mode 100644 index 28cebf1..0000000 --- a/thirdparty/assimp/port/AssimpDelphi/aiScene.pas +++ /dev/null @@ -1,46 +0,0 @@ -unit aiScene; - -interface - -uses aiTypes, aiMatrix4x4, aiMesh, aiMaterial, aiTexture; - - -type - PaiNode = ^TaiNode; - PPaiNode = ^PaiNode; - PaiNodeArray = array[0..0] of PaiNode; - PPaiNodeArray = ^PaiNodeArray; - - TaiNode = packed record - mName: aiString; - mTransformation: TaiMatrix4x4; - mParent: PPaiNode; - mNumChildren: cardinal; - mChildren: PPaiNodeArray; - mNumMeshes: cardinal; - mMeshes: PCardinalArray; - end; - - - -type TaiScene = packed record - mFlags: cardinal; - mRootNode: PaiNode; - mNumMeshes: Cardinal; - mMeshes: PPaiMeshArray; //? - mNumMaterials: Cardinal; - mMaterials: PPaiMaterialArray; - mNumAnimations: Cardinal; - mAnimations: Pointer; - mNumTextures: Cardinal; - mTextures: PPaiTextureArray; - mNumLights: Cardinal; - mLights: Pointer; - mNumCameras: Cardinal; - mCameras: Pointer; -end; -type PaiScene = ^TaiScene; - -implementation - -end. diff --git a/thirdparty/assimp/port/AssimpDelphi/aiTexture.pas b/thirdparty/assimp/port/AssimpDelphi/aiTexture.pas deleted file mode 100644 index 55e246f..0000000 --- a/thirdparty/assimp/port/AssimpDelphi/aiTexture.pas +++ /dev/null @@ -1,26 +0,0 @@ -unit aiTexture; - -interface - -type TaiTexel = packed record - b, g, r, a: byte; -end; -PaiTexel = ^TaiTexel; -TaiTexelArray = array[0..0] of TaiTexel; -PaiTexelArray = ^TaiTexelArray; - -type TaiTexture = packed record - mWidth: Cardinal; //width in pixels, OR total embedded file size if texture is a jpg/png/etc - mHeight: Cardinal; //0 if texture is an embedded file - achFormatHint: array[0..3] of byte; - pcData: PaiTexelArray; -end; -PaiTexture = ^TaiTexture; -PaiTextureArray = array [0..0] of PaiTexture; -PPaiTextureArray = ^PaiTextureArray; - - - -implementation - -end. diff --git a/thirdparty/assimp/port/AssimpDelphi/aiTypes.pas b/thirdparty/assimp/port/AssimpDelphi/aiTypes.pas deleted file mode 100644 index b7924e8..0000000 --- a/thirdparty/assimp/port/AssimpDelphi/aiTypes.pas +++ /dev/null @@ -1,53 +0,0 @@ -unit aiTypes; - -interface - -//added for Delphi interface -type - TCardinalArray = array [0..0] of Cardinal; - PCardinalArray = ^TCardinalArray; - - TSingleArray = array[0..0] of Single; - PSingleArray = ^TSingleArray; - -type aiString = packed record - length: Cardinal; - data: array [0..1023] of char; -end; -type PaiString = ^aiString; - -type aiReturn = ( - aiReturn_SUCCESS = $0, - aiReturn_FAILURE = -$1, - aiReturn_OUTOFMEMORY = -$3, - _AI_ENFORCE_ENUM_SIZE = $7fffffff -); - -const AI_SUCCESS = aiReturn_SUCCESS; -const AI_FAILURE = aiReturn_FAILURE; -const AI_OUTOFMEMORY = aiReturn_OUTOFMEMORY; - - - - -function aiStringToDelphiString( a: aiString): AnsiString; - - -implementation - -function aiStringToDelphiString( a: aiString): AnsiString; -var - i: integer; -begin - result := ''; - if a.length > 0 then - begin - SetLength( result, a.length); - for i := 1 to a.length do - begin - result[i] := a.data[i-1]; - end; - end; -end; - -end. diff --git a/thirdparty/assimp/port/AssimpDelphi/aiVector2D.pas b/thirdparty/assimp/port/AssimpDelphi/aiVector2D.pas deleted file mode 100644 index 1e88209..0000000 --- a/thirdparty/assimp/port/AssimpDelphi/aiVector2D.pas +++ /dev/null @@ -1,13 +0,0 @@ -unit aiVector2D; - -interface - -type TaiVector2D = packed record - x, y: single; -end; -type PaiVector2D = ^TaiVector2D; - - -implementation - -end. diff --git a/thirdparty/assimp/port/AssimpDelphi/aiVector3D.pas b/thirdparty/assimp/port/AssimpDelphi/aiVector3D.pas deleted file mode 100644 index 2081bb4..0000000 --- a/thirdparty/assimp/port/AssimpDelphi/aiVector3D.pas +++ /dev/null @@ -1,16 +0,0 @@ -unit aiVector3D; - -interface - -type TaiVector3D = packed record - x, y, z: single; -end; -type PaiVector3D = ^TaiVector3D; -type PaiVector3DArray = array [0..0] of PaiVector3D; - -type TaiVector3DArray = array[0..0] of TaiVector3D; -type PTaiVector3DArray = ^TaiVector3DArray; - -implementation - -end. diff --git a/thirdparty/assimp/port/AssimpDelphi/assimp.pas b/thirdparty/assimp/port/AssimpDelphi/assimp.pas deleted file mode 100644 index d5bf31d..0000000 --- a/thirdparty/assimp/port/AssimpDelphi/assimp.pas +++ /dev/null @@ -1,58 +0,0 @@ -unit assimp; - -interface - -uses aiTypes, aiMatrix4x4, aiMatrix3x3, aiMesh, aiScene, aiMaterial, aiColor4d, aiVector3D; - -const ASSIMP_DLL = 'assimp32.dll'; - -function aiImportFile(filename: pchar; pFlags: integer): PaiScene; cdecl; external ASSIMP_DLL; -procedure aiReleaseImport( pScene: pointer); cdecl; external ASSIMP_DLL; -function aiGetErrorString(): PChar; cdecl; external ASSIMP_DLL; - -//procedure aiDecomposeMatrix( var mat: TaiMatrix4x4; var scaling: TaiVector3D; var rotation: TaiQuaternion; var position: TaiVector3D); cdecl; external ASSIMP_DLL; -procedure aiTransposeMatrix4( var mat: TaiMatrix4x4); cdecl; external ASSIMP_DLL; -procedure aiTransposeMatrix3( var mat: TaiMatrix3x3); cdecl; external ASSIMP_DLL; -procedure aiTransformVecByMatrix3( var vec: TaiVector3D; var mat: TaiMatrix3x3); cdecl; external ASSIMP_DLL; -procedure aiTransformVecByMatrix4( var vec: TaiVector3D; var mat: TaiMatrix4x4); cdecl; external ASSIMP_DLL; - -procedure aiMultiplyMatrix4(var dst: TaiMatrix4x4; var src: TaiMatrix4x4); cdecl; external ASSIMP_DLL; -procedure aiMultiplyMatrix3(var dst: TaiMatrix3x3; var src: TaiMatrix3x3); cdecl; external ASSIMP_DLL; - - -procedure aiIdentityMatrix3(var mat: TaiMatrix3x3); cdecl; external ASSIMP_DLL; -procedure aiIdentityMatrix4(var mat: TaiMatrix4x4); cdecl; external ASSIMP_DLL; - - -//----- from aiMaterial.h -function aiGetMaterialProperty( pMat: PaiMaterial; pKey: PChar; nType: Cardinal; nIndex: Cardinal; pPropOut: pointer): aiReturn; cdecl; external ASSIMP_DLL; -function aiGetMaterialFloatArray( var pMat: TaiMaterial; pKey: PChar; nType: Cardinal; nIndex: Cardinal; var pOut: Single; var pMax: Cardinal): aiReturn; cdecl; external ASSIMP_DLL; -function aiGetMaterialFloat( var pMat: TaiMaterial; pKey: PChar; nType: Cardinal; nIndex: Cardinal; var pOut: Single): aiReturn; -function aiGetMaterialIntegerArray(var pMat: TaiMaterial; pKey: PChar; nType: Cardinal; nIndex: Cardinal; var pOut: Integer; var pMax: Cardinal): aiReturn; cdecl; external ASSIMP_DLL; -function aiGetMaterialInteger(var pMat: TaiMaterial; pKey: PChar; nType: Cardinal; nIndex: Cardinal; var pOut: Integer): aiReturn; -function aiGetMaterialColor(var pMat: TaiMaterial; pKey: PChar; nType: Cardinal; nIndex: Cardinal; var pOut: TaiColor4d): aiReturn; cdecl; external ASSIMP_DLL; -function aiGetMaterialString(var pMat: TaiMaterial; pKey: PChar; nType: Cardinal; nIndex: Cardinal; var pOut: aiString): aiReturn; cdecl; external ASSIMP_DLL; -function aiGetMaterialTextureCount(var pMat: TaiMaterial; nType: TaiTextureType): Cardinal; cdecl; external ASSIMP_DLL; -function aiGetMaterialTexture(var mat: TaiMaterial; nType: TaiTextureType; nIndex: Cardinal; var path: aiString; var mapping: TaiTextureMapping; var uvindex: Cardinal; var blend: single; var op: TaiTextureOp; var mapmode: TaiTextureMapMode; var flags: Cardinal): aiReturn; cdecl; external ASSIMP_DLL; - - - -implementation - -function aiGetMaterialFloat( var pMat: TaiMaterial; pKey: PChar; nType: Cardinal; nIndex: Cardinal; var pOut: Single): aiReturn; -var - n: cardinal; -begin - n := 0; - result := aiGetMaterialFloatArray( pMat, pKey, nType, nIndex, pOut, n); -end; - -function aiGetMaterialInteger(var pMat: TaiMaterial; pKey: PChar; nType: Cardinal; nIndex: Cardinal; var pOut: integer): aiReturn; -var - n: cardinal; -begin - n := 0; - result := aiGetMaterialIntegerArray( pMat, pKey, nType, nIndex, pOut, n); -end; - -end. diff --git a/thirdparty/assimp/port/AssimpNET/Readme.md b/thirdparty/assimp/port/AssimpNET/Readme.md deleted file mode 100644 index 814cab3..0000000 --- a/thirdparty/assimp/port/AssimpNET/Readme.md +++ /dev/null @@ -1 +0,0 @@ -Please check the following git-repo for the source: https://github.com/kebby/assimp-net diff --git a/thirdparty/assimp/port/AssimpPascal/Readme.md b/thirdparty/assimp/port/AssimpPascal/Readme.md deleted file mode 100644 index 9dfc652..0000000 --- a/thirdparty/assimp/port/AssimpPascal/Readme.md +++ /dev/null @@ -1 +0,0 @@ -See the [AssimpPascal headers here](https://github.com/ev1313/Pascal-Assimp-Headers) (by Tim Blume / ev1313). diff --git a/thirdparty/assimp/port/PyAssimp/3d_viewer_screenshot.png b/thirdparty/assimp/port/PyAssimp/3d_viewer_screenshot.png deleted file mode 100644 index 2031faf5a3f3c45e3f9f7ff7cd14906ef1e63ca9..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 51610 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%0AGcK1pII;oqJw>?PqxDt}0 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 S+$;g`pM&jI<_&9B!v6t5hU{Aa diff --git a/thirdparty/assimp/port/PyAssimp/README.md b/thirdparty/assimp/port/PyAssimp/README.md deleted file mode 100644 index d64d727..0000000 --- a/thirdparty/assimp/port/PyAssimp/README.md +++ /dev/null @@ -1,91 +0,0 @@ -PyAssimp Readme -=============== - -A simple Python wrapper for Assimp using `ctypes` to access the library. -Requires Python >= 2.6. - -Python 3 support is mostly here, but not well tested. - -Note that pyassimp is not complete. Many ASSIMP features are missing. - -USAGE ------ - -### Complete example: 3D viewer - -`pyassimp` comes with a simple 3D viewer that shows how to load and display a 3D -model using a shader-based OpenGL pipeline. - -![Screenshot](3d_viewer_screenshot.png) - -To use it, from within `/port/PyAssimp`: - -```console -$ cd scripts -$ python ./3D-viewer -``` - -You can use this code as starting point in your applications. - -### Writing your own code - -To get started with `pyassimp`, examine the simpler `sample.py` script in `scripts/`, -which illustrates the basic usage. All Assimp data structures are wrapped using -`ctypes`. All the data+length fields in Assimp's data structures (such as -`aiMesh::mNumVertices`, `aiMesh::mVertices`) are replaced by simple python -lists, so you can call `len()` on them to get their respective size and access -members using `[]`. - -For example, to load a file named `hello.3ds` and print the first -vertex of the first mesh, you would do (proper error handling -substituted by assertions ...): - -```python - -from pyassimp import * -scene = load('hello.3ds') - -assert len(scene.meshes) -mesh = scene.meshes[0] - -assert len(mesh.vertices) -print(mesh.vertices[0]) - -# don't forget this one, or you will leak! -release(scene) - -``` - -Another example to list the 'top nodes' in a -scene: - -```python - -from pyassimp import * -scene = load('hello.3ds') - -for c in scene.rootnode.children: - print(str(c)) - -release(scene) - -``` - -INSTALL -------- - -Install `pyassimp` by running: - -```console -$ python setup.py install -``` - -PyAssimp requires a assimp dynamic library (`DLL` on windows, -`.so` on linux, `.dynlib` on macOS) in order to work. The default search directories are: - - the current directory - - on linux additionally: `/usr/lib`, `/usr/local/lib`, - `/usr/lib/x86_64-linux-gnu` - -To build that library, refer to the Assimp master `INSTALL` -instructions. To look in more places, edit `./pyassimp/helper.py`. -There's an `additional_dirs` list waiting for your entries. diff --git a/thirdparty/assimp/port/PyAssimp/README.rst b/thirdparty/assimp/port/PyAssimp/README.rst deleted file mode 100644 index f909e2c..0000000 --- a/thirdparty/assimp/port/PyAssimp/README.rst +++ /dev/null @@ -1,96 +0,0 @@ -PyAssimp: Python bindings for libassimp -======================================= - -A simple Python wrapper for Assimp using ``ctypes`` to access the -library. Requires Python >= 2.6. - -Python 3 support is mostly here, but not well tested. - -Note that pyassimp is not complete. Many ASSIMP features are missing. - -USAGE ------ - -Complete example: 3D viewer -~~~~~~~~~~~~~~~~~~~~~~~~~~~ - -``pyassimp`` comes with a simple 3D viewer that shows how to load and -display a 3D model using a shader-based OpenGL pipeline. - -.. figure:: 3d_viewer_screenshot.png - :alt: Screenshot - - Screenshot - -To use it, from within ``/port/PyAssimp``: - -:: - - $ cd scripts - $ python ./3D-viewer - -You can use this code as starting point in your applications. - -Writing your own code -~~~~~~~~~~~~~~~~~~~~~ - -To get started with ``pyassimp``, examine the simpler ``sample.py`` -script in ``scripts/``, which illustrates the basic usage. All Assimp -data structures are wrapped using ``ctypes``. All the data+length fields -in Assimp's data structures (such as ``aiMesh::mNumVertices``, -``aiMesh::mVertices``) are replaced by simple python lists, so you can -call ``len()`` on them to get their respective size and access members -using ``[]``. - -For example, to load a file named ``hello.3ds`` and print the first -vertex of the first mesh, you would do (proper error handling -substituted by assertions ...): - -.. code:: python - - - from pyassimp import * - scene = load('hello.3ds') - - assert len(scene.meshes) - mesh = scene.meshes[0] - - assert len(mesh.vertices) - print(mesh.vertices[0]) - - # don't forget this one, or you will leak! - release(scene) - -Another example to list the 'top nodes' in a scene: - -.. code:: python - - - from pyassimp import * - scene = load('hello.3ds') - - for c in scene.rootnode.children: - print(str(c)) - - release(scene) - -INSTALL -------- - -Install ``pyassimp`` by running: - -:: - - $ python setup.py install - -PyAssimp requires a assimp dynamic library (``DLL`` on windows, ``.so`` -on linux, ``.dynlib`` on macOS) in order to work. The default search -directories are: - -- the current directory -- on linux additionally: ``/usr/lib``, ``/usr/local/lib``, - ``/usr/lib/x86_64-linux-gnu`` - -To build that library, refer to the Assimp master ``INSTALL`` -instructions. To look in more places, edit ``./pyassimp/helper.py``. -There's an ``additional_dirs`` list waiting for your entries. diff --git a/thirdparty/assimp/port/PyAssimp/gen/materialgen.py b/thirdparty/assimp/port/PyAssimp/gen/materialgen.py deleted file mode 100644 index d60bf4b..0000000 --- a/thirdparty/assimp/port/PyAssimp/gen/materialgen.py +++ /dev/null @@ -1,96 +0,0 @@ -#!/usr/bin/env python -# -*- Coding: UTF-8 -*- - -# --------------------------------------------------------------------------- -# Open Asset Import Library (ASSIMP) -# --------------------------------------------------------------------------- -# -# Copyright (c) 2006-2010, 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. -# --------------------------------------------------------------------------- - -"""Update PyAssimp's texture type constants C/C++ headers. - -This script is meant to be executed in the source tree, directly from -port/PyAssimp/gen -""" - -import os -import re - -REenumTextureType = re.compile(r'' - r'enum\saiTextureType' # enum aiTextureType - r'[^{]*?\{' # { - r'(?P.*?)' # code - r'\};' # }; - , re.IGNORECASE + re.DOTALL + re.MULTILINE) - -# Replace comments -RErpcom = re.compile(r'' - r'\s*(/\*+\s|\*+/|\B\*\s?|///?!?)' # /** - r'(?P.*?)' # * line - , re.IGNORECASE + re.DOTALL) - -# Remove trailing commas -RErmtrailcom = re.compile(r',$', re.IGNORECASE + re.DOTALL) - -# Remove #ifdef __cplusplus -RErmifdef = re.compile(r'' - r'#ifndef SWIG' # #ifndef SWIG - r'(?P.*)' # code - r'#endif(\s*//\s*!?\s*SWIG)*' # #endif - , re.IGNORECASE + re.DOTALL) - -path = '../../../include/assimp' - -files = os.listdir (path) -enumText = '' -for fileName in files: - if fileName.endswith('.h'): - text = open(os.path.join(path, fileName)).read() - for enum in REenumTextureType.findall(text): - enumText = enum - -text = '' -for line in enumText.split('\n'): - line = line.lstrip().rstrip() - line = RErmtrailcom.sub('', line) - text += RErpcom.sub('# \g', line) + '\n' -text = RErmifdef.sub('', text) - -file = open('material.py', 'w') -file.write(text) -file.close() - -print("Generation done. You can now review the file 'material.py' and merge it.") diff --git a/thirdparty/assimp/port/PyAssimp/gen/structsgen.py b/thirdparty/assimp/port/PyAssimp/gen/structsgen.py deleted file mode 100644 index f2ee95e..0000000 --- a/thirdparty/assimp/port/PyAssimp/gen/structsgen.py +++ /dev/null @@ -1,290 +0,0 @@ -#!/usr/bin/env python -# -*- Coding: UTF-8 -*- - -# --------------------------------------------------------------------------- -# Open Asset Import Library (ASSIMP) -# --------------------------------------------------------------------------- -# -# Copyright (c) 2006-2010, 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. -# --------------------------------------------------------------------------- - -"""Update PyAssimp's data structures to keep up with the -C/C++ headers. - -This script is meant to be executed in the source tree, directly from -port/PyAssimp/gen -""" - -import os -import re - -#==[regexps]================================================= - -# Clean desc -REdefine = re.compile(r'' - r'(?P)' # /** *desc */ - r'#\s*define\s(?P[^(\n]+?)\s(?P.+)$' # #define name value - , re.MULTILINE) - -# Get structs -REstructs = re.compile(r'' - #r'//\s?[\-]*\s(?P.*?)\*/\s' # /** *desc */ - #r'//\s?[\-]*(?P.*?)\*/(?:.*?)' # garbage - r'//\s?[\-]*\s(?P.*?)\*/\W*?' # /** *desc */ - r'struct\s(?:ASSIMP_API\s)?(?P[a-z][a-z0-9_]\w+\b)' # struct name - r'[^{]*?\{' # { - r'(?P.*?)' # code - r'\}\s*(PACK_STRUCT)?;' # }; - , re.IGNORECASE + re.DOTALL + re.MULTILINE) - -# Clean desc -REdesc = re.compile(r'' - r'^\s*?([*]|/\*\*)(?P.*?)' # * line - , re.IGNORECASE + re.DOTALL + re.MULTILINE) - -# Remove #ifdef __cplusplus -RErmifdef = re.compile(r'' - r'#ifdef __cplusplus' # #ifdef __cplusplus - r'(?P.*)' # code - r'#endif(\s*//\s*!?\s*__cplusplus)*' # #endif - , re.IGNORECASE + re.DOTALL) - -# Replace comments -RErpcom = re.compile(r'' - r'\s*(/\*+\s|\*+/|\B\*\s|///?!?)' # /** - r'(?P.*?)' # * line - , re.IGNORECASE + re.DOTALL) - -# Restructure -def GetType(type, prefix='c_'): - t = type - while t.endswith('*'): - t = t[:-1] - if t[:5] == 'const': - t = t[5:] - - # skip some types - if t in skiplist: - return None - - t = t.strip() - types = {'unsigned int':'uint', 'unsigned char':'ubyte',} - if t in types: - t = types[t] - t = prefix + t - while type.endswith('*'): - t = "POINTER(" + t + ")" - type = type[:-1] - return t - -def restructure( match ): - type = match.group("type") - if match.group("struct") == "": - type = GetType(type) - elif match.group("struct") == "C_ENUM ": - type = "c_uint" - else: - type = GetType(type[2:], '') - if type is None: - return '' - if match.group("index"): - type = type + "*" + match.group("index") - - result = "" - for name in match.group("name").split(','): - result += "(\"" + name.strip() + "\", "+ type + ")," - - return result - -RErestruc = re.compile(r'' - r'(?PC_STRUCT\s|C_ENUM\s|)' # [C_STRUCT] - r'(?P\w+\s?\w+?[*]*)\s' # type - #r'(?P\w+)' # name - r'(?P\w+|[a-z0-9_, ]+)' # name - r'(:?\[(?P\w+)\])?;' # []; (optional) - , re.DOTALL) -#==[template]================================================ -template = """ -class $NAME$(Structure): - \"\"\" -$DESCRIPTION$ - \"\"\" -$DEFINES$ - _fields_ = [ - $FIELDS$ - ] -""" - -templateSR = """ -class $NAME$(Structure): - \"\"\" -$DESCRIPTION$ - \"\"\" -$DEFINES$ - -$NAME$._fields_ = [ - $FIELDS$ - ] -""" - -skiplist = ("FileIO", "File", "locateFromAssimpHeap",'LogStream','MeshAnim','AnimMesh') - -#============================================================ -def Structify(fileName): - file = open(fileName, 'r') - text = file.read() - result = [] - - # Get defines. - defs = REdefine.findall(text) - # Create defines - defines = "\n" - for define in defs: - # Clean desc - desc = REdesc.sub('', define[0]) - # Replace comments - desc = RErpcom.sub('#\g', desc) - defines += desc - if len(define[2].strip()): - # skip non-integral defines, we can support them right now - try: - int(define[2],0) - except: - continue - defines += " "*4 + define[1] + " = " + define[2] + "\n" - - - # Get structs - rs = REstructs.finditer(text) - - fileName = os.path.basename(fileName) - print fileName - for r in rs: - name = r.group('name')[2:] - desc = r.group('desc') - - # Skip some structs - if name in skiplist: - continue - - text = r.group('code') - - # Clean desc - desc = REdesc.sub('', desc) - - desc = "See '"+ fileName +"' for details." #TODO - - # Remove #ifdef __cplusplus - text = RErmifdef.sub('', text) - - # Whether the struct contains more than just POD - primitive = text.find('C_STRUCT') == -1 - - # Restructure - text = RErestruc.sub(restructure, text) - # Replace comments - text = RErpcom.sub('# \g', text) - text = text.replace("),#", "),\n#") - text = text.replace("#", "\n#") - text = "".join([l for l in text.splitlines(True) if not l.strip().endswith("#")]) # remove empty comment lines - - # Whether it's selfreferencing: ex. struct Node { Node* parent; }; - selfreferencing = text.find('POINTER('+name+')') != -1 - - complex = name == "Scene" - - # Create description - description = "" - for line in desc.split('\n'): - description += " "*4 + line.strip() + "\n" - description = description.rstrip() - - # Create fields - fields = "" - for line in text.split('\n'): - fields += " "*12 + line.strip() + "\n" - fields = fields.strip() - - if selfreferencing: - templ = templateSR - else: - templ = template - - # Put it all together - text = templ.replace('$NAME$', name) - text = text.replace('$DESCRIPTION$', description) - text = text.replace('$FIELDS$', fields) - - if ((name.lower() == fileName.split('.')[0][2:].lower()) and (name != 'Material')) or name == "String": - text = text.replace('$DEFINES$', defines) - else: - text = text.replace('$DEFINES$', '') - - - result.append((primitive, selfreferencing, complex, text)) - - return result - -text = "#-*- coding: UTF-8 -*-\n\n" -text += "from ctypes import POINTER, c_int, c_uint, c_size_t, c_char, c_float, Structure, c_char_p, c_double, c_ubyte\n\n" - -structs1 = "" -structs2 = "" -structs3 = "" -structs4 = "" - -path = '../../../include/assimp' -files = os.listdir (path) -#files = ["aiScene.h", "aiTypes.h"] -for fileName in files: - if fileName.endswith('.h'): - for struct in Structify(os.path.join(path, fileName)): - primitive, sr, complex, struct = struct - if primitive: - structs1 += struct - elif sr: - structs2 += struct - elif complex: - structs4 += struct - else: - structs3 += struct - -text += structs1 + structs2 + structs3 + structs4 - -file = open('structs.py', 'w') -file.write(text) -file.close() - -print("Generation done. You can now review the file 'structs.py' and merge it.") diff --git a/thirdparty/assimp/port/PyAssimp/pyassimp/__init__.py b/thirdparty/assimp/port/PyAssimp/pyassimp/__init__.py deleted file mode 100644 index bb67a43..0000000 --- a/thirdparty/assimp/port/PyAssimp/pyassimp/__init__.py +++ /dev/null @@ -1 +0,0 @@ -from .core import * diff --git a/thirdparty/assimp/port/PyAssimp/pyassimp/core.py b/thirdparty/assimp/port/PyAssimp/pyassimp/core.py deleted file mode 100644 index c346e26..0000000 --- a/thirdparty/assimp/port/PyAssimp/pyassimp/core.py +++ /dev/null @@ -1,546 +0,0 @@ -""" -PyAssimp - -This is the main-module of PyAssimp. -""" - -import sys -if sys.version_info < (2,6): - raise RuntimeError('pyassimp: need python 2.6 or newer') - -# xrange was renamed range in Python 3 and the original range from Python 2 was removed. -# To keep compatibility with both Python 2 and 3, xrange is set to range for version 3.0 and up. -if sys.version_info >= (3,0): - xrange = range - - -try: import numpy -except ImportError: numpy = None -import logging -import ctypes -logger = logging.getLogger("pyassimp") -# attach default null handler to logger so it doesn't complain -# even if you don't attach another handler to logger -logger.addHandler(logging.NullHandler()) - -from . import structs -from . import helper -from . import postprocess -from .errors import AssimpError - -class AssimpLib(object): - """ - Assimp-Singleton - """ - load, load_mem, export, export_blob, release, dll = helper.search_library() -_assimp_lib = AssimpLib() - -def make_tuple(ai_obj, type = None): - res = None - - #notes: - # ai_obj._fields_ = [ ("attr", c_type), ... ] - # getattr(ai_obj, e[0]).__class__ == float - - if isinstance(ai_obj, structs.Matrix4x4): - if numpy: - res = numpy.array([getattr(ai_obj, e[0]) for e in ai_obj._fields_]).reshape((4,4)) - #import pdb;pdb.set_trace() - else: - res = [getattr(ai_obj, e[0]) for e in ai_obj._fields_] - res = [res[i:i+4] for i in xrange(0,16,4)] - elif isinstance(ai_obj, structs.Matrix3x3): - if numpy: - res = numpy.array([getattr(ai_obj, e[0]) for e in ai_obj._fields_]).reshape((3,3)) - else: - res = [getattr(ai_obj, e[0]) for e in ai_obj._fields_] - res = [res[i:i+3] for i in xrange(0,9,3)] - else: - if numpy: - res = numpy.array([getattr(ai_obj, e[0]) for e in ai_obj._fields_]) - else: - res = [getattr(ai_obj, e[0]) for e in ai_obj._fields_] - - return res - -# Returns unicode object for Python 2, and str object for Python 3. -def _convert_assimp_string(assimp_string): - if sys.version_info >= (3, 0): - return str(assimp_string.data, errors='ignore') - else: - return unicode(assimp_string.data, errors='ignore') - -# It is faster and more correct to have an init function for each assimp class -def _init_face(aiFace): - aiFace.indices = [aiFace.mIndices[i] for i in range(aiFace.mNumIndices)] -assimp_struct_inits = { structs.Face : _init_face } - -def call_init(obj, caller = None): - if helper.hasattr_silent(obj,'contents'): #pointer - _init(obj.contents, obj, caller) - else: - _init(obj,parent=caller) - -def _is_init_type(obj): - - if obj and helper.hasattr_silent(obj,'contents'): #pointer - return _is_init_type(obj[0]) - # null-pointer case that arises when we reach a mesh attribute - # like mBitangents which use mNumVertices rather than mNumBitangents - # so it breaks the 'is iterable' check. - # Basically: - # FIXME! - elif not bool(obj): - return False - tname = obj.__class__.__name__ - return not (tname[:2] == 'c_' or tname == 'Structure' \ - or tname == 'POINTER') and not isinstance(obj, (int, str, bytes)) - -def _init(self, target = None, parent = None): - """ - Custom initialize() for C structs, adds safely accessible member functionality. - - :param target: set the object which receive the added methods. Useful when manipulating - pointers, to skip the intermediate 'contents' deferencing. - """ - if not target: - target = self - - dirself = dir(self) - for m in dirself: - - if m.startswith("_"): - continue - - if m.startswith('mNum'): - if 'm' + m[4:] in dirself: - continue # will be processed later on - else: - name = m[1:].lower() - - obj = getattr(self, m) - setattr(target, name, obj) - continue - - if m == 'mName': - target.name = str(_convert_assimp_string(self.mName)) - target.__class__.__repr__ = lambda x: str(x.__class__) + "(" + getattr(x, 'name','') + ")" - target.__class__.__str__ = lambda x: getattr(x, 'name', '') - continue - - name = m[1:].lower() - - obj = getattr(self, m) - - # Create tuples - if isinstance(obj, structs.assimp_structs_as_tuple): - setattr(target, name, make_tuple(obj)) - logger.debug(str(self) + ": Added array " + str(getattr(target, name)) + " as self." + name.lower()) - continue - - if m.startswith('m'): - - if name == "parent": - setattr(target, name, parent) - logger.debug("Added a parent as self." + name) - continue - - if helper.hasattr_silent(self, 'mNum' + m[1:]): - - length = getattr(self, 'mNum' + m[1:]) - - # -> special case: properties are - # stored as a dict. - if m == 'mProperties': - setattr(target, name, _get_properties(obj, length)) - continue - - - if not length: # empty! - setattr(target, name, []) - logger.debug(str(self) + ": " + name + " is an empty list.") - continue - - - try: - if obj._type_ in structs.assimp_structs_as_tuple: - if numpy: - setattr(target, name, numpy.array([make_tuple(obj[i]) for i in range(length)], dtype=numpy.float32)) - - logger.debug(str(self) + ": Added an array of numpy arrays (type "+ str(type(obj)) + ") as self." + name) - else: - setattr(target, name, [make_tuple(obj[i]) for i in range(length)]) - - logger.debug(str(self) + ": Added a list of lists (type "+ str(type(obj)) + ") as self." + name) - - else: - setattr(target, name, [obj[i] for i in range(length)]) #TODO: maybe not necessary to recreate an array? - - logger.debug(str(self) + ": Added list of " + str(obj) + " " + name + " as self." + name + " (type: " + str(type(obj)) + ")") - - # initialize array elements - try: - init = assimp_struct_inits[type(obj[0])] - except KeyError: - if _is_init_type(obj[0]): - for e in getattr(target, name): - call_init(e, target) - else: - for e in getattr(target, name): - init(e) - - - except IndexError: - logger.error("in " + str(self) +" : mismatch between mNum" + name + " and the actual amount of data in m" + name + ". This may be due to version mismatch between libassimp and pyassimp. Quitting now.") - sys.exit(1) - - except ValueError as e: - - logger.error("In " + str(self) + "->" + name + ": " + str(e) + ". Quitting now.") - if "setting an array element with a sequence" in str(e): - logger.error("Note that pyassimp does not currently " - "support meshes with mixed triangles " - "and quads. Try to load your mesh with" - " a post-processing to triangulate your" - " faces.") - raise e - - - - else: # starts with 'm' but not iterable - setattr(target, name, obj) - logger.debug("Added " + name + " as self." + name + " (type: " + str(type(obj)) + ")") - - if _is_init_type(obj): - call_init(obj, target) - - if isinstance(self, structs.Mesh): - _finalize_mesh(self, target) - - if isinstance(self, structs.Texture): - _finalize_texture(self, target) - - if isinstance(self, structs.Metadata): - _finalize_metadata(self, target) - - - return self - - -def pythonize_assimp(type, obj, scene): - """ This method modify the Assimp data structures - to make them easier to work with in Python. - - Supported operations: - - MESH: replace a list of mesh IDs by reference to these meshes - - ADDTRANSFORMATION: add a reference to an object's transformation taken from their associated node. - - :param type: the type of modification to operate (cf above) - :param obj: the input object to modify - :param scene: a reference to the whole scene - """ - - if type == "MESH": - meshes = [] - for i in obj: - meshes.append(scene.meshes[i]) - return meshes - - if type == "ADDTRANSFORMATION": - def getnode(node, name): - if node.name == name: return node - for child in node.children: - n = getnode(child, name) - if n: return n - - node = getnode(scene.rootnode, obj.name) - if not node: - raise AssimpError("Object " + str(obj) + " has no associated node!") - setattr(obj, "transformation", node.transformation) - -def recur_pythonize(node, scene): - ''' - Recursively call pythonize_assimp on - nodes tree to apply several post-processing to - pythonize the assimp datastructures. - ''' - node.meshes = pythonize_assimp("MESH", node.meshes, scene) - for mesh in node.meshes: - mesh.material = scene.materials[mesh.materialindex] - for cam in scene.cameras: - pythonize_assimp("ADDTRANSFORMATION", cam, scene) - for c in node.children: - recur_pythonize(c, scene) - -def load(filename, - file_type = None, - processing = postprocess.aiProcess_Triangulate): - ''' - Load a model into a scene. On failure throws AssimpError. - - Arguments - --------- - filename: Either a filename or a file object to load model from. - If a file object is passed, file_type MUST be specified - Otherwise Assimp has no idea which importer to use. - This is named 'filename' so as to not break legacy code. - processing: assimp postprocessing parameters. Verbose keywords are imported - from postprocessing, and the parameters can be combined bitwise to - generate the final processing value. Note that the default value will - triangulate quad faces. Example of generating other possible values: - processing = (pyassimp.postprocess.aiProcess_Triangulate | - pyassimp.postprocess.aiProcess_OptimizeMeshes) - file_type: string of file extension, such as 'stl' - - Returns - --------- - Scene object with model data - ''' - - if hasattr(filename, 'read'): - # This is the case where a file object has been passed to load. - # It is calling the following function: - # const aiScene* aiImportFileFromMemory(const char* pBuffer, - # unsigned int pLength, - # unsigned int pFlags, - # const char* pHint) - if file_type is None: - raise AssimpError('File type must be specified when passing file objects!') - data = filename.read() - model = _assimp_lib.load_mem(data, - len(data), - processing, - file_type) - else: - # a filename string has been passed - model = _assimp_lib.load(filename.encode(sys.getfilesystemencoding()), processing) - - if not model: - raise AssimpError('Could not import file!') - scene = _init(model.contents) - recur_pythonize(scene.rootnode, scene) - return scene - -def export(scene, - filename, - file_type = None, - processing = postprocess.aiProcess_Triangulate): - ''' - Export a scene. On failure throws AssimpError. - - Arguments - --------- - scene: scene to export. - filename: Filename that the scene should be exported to. - file_type: string of file exporter to use. For example "collada". - processing: assimp postprocessing parameters. Verbose keywords are imported - from postprocessing, and the parameters can be combined bitwise to - generate the final processing value. Note that the default value will - triangulate quad faces. Example of generating other possible values: - processing = (pyassimp.postprocess.aiProcess_Triangulate | - pyassimp.postprocess.aiProcess_OptimizeMeshes) - - ''' - - exportStatus = _assimp_lib.export(ctypes.pointer(scene), file_type.encode("ascii"), filename.encode(sys.getfilesystemencoding()), processing) - - if exportStatus != 0: - raise AssimpError('Could not export scene!') - -def export_blob(scene, - file_type = None, - processing = postprocess.aiProcess_Triangulate): - ''' - Export a scene and return a blob in the correct format. On failure throws AssimpError. - - Arguments - --------- - scene: scene to export. - file_type: string of file exporter to use. For example "collada". - processing: assimp postprocessing parameters. Verbose keywords are imported - from postprocessing, and the parameters can be combined bitwise to - generate the final processing value. Note that the default value will - triangulate quad faces. Example of generating other possible values: - processing = (pyassimp.postprocess.aiProcess_Triangulate | - pyassimp.postprocess.aiProcess_OptimizeMeshes) - Returns - --------- - Pointer to structs.ExportDataBlob - ''' - exportBlobPtr = _assimp_lib.export_blob(ctypes.pointer(scene), file_type.encode("ascii"), processing) - - if exportBlobPtr == 0: - raise AssimpError('Could not export scene to blob!') - return exportBlobPtr - -def release(scene): - _assimp_lib.release(ctypes.pointer(scene)) - -def _finalize_texture(tex, target): - setattr(target, "achformathint", tex.achFormatHint) - if numpy: - data = numpy.array([make_tuple(getattr(tex, "pcData")[i]) for i in range(tex.mWidth * tex.mHeight)]) - else: - data = [make_tuple(getattr(tex, "pcData")[i]) for i in range(tex.mWidth * tex.mHeight)] - setattr(target, "data", data) - -def _finalize_mesh(mesh, target): - """ Building of meshes is a bit specific. - - We override here the various datasets that can - not be process as regular fields. - - For instance, the length of the normals array is - mNumVertices (no mNumNormals is available) - """ - nb_vertices = getattr(mesh, "mNumVertices") - - def fill(name): - mAttr = getattr(mesh, name) - if numpy: - if mAttr: - data = numpy.array([make_tuple(getattr(mesh, name)[i]) for i in range(nb_vertices)], dtype=numpy.float32) - setattr(target, name[1:].lower(), data) - else: - setattr(target, name[1:].lower(), numpy.array([], dtype="float32")) - else: - if mAttr: - data = [make_tuple(getattr(mesh, name)[i]) for i in range(nb_vertices)] - setattr(target, name[1:].lower(), data) - else: - setattr(target, name[1:].lower(), []) - - def fillarray(name): - mAttr = getattr(mesh, name) - - data = [] - for index, mSubAttr in enumerate(mAttr): - if mSubAttr: - data.append([make_tuple(getattr(mesh, name)[index][i]) for i in range(nb_vertices)]) - - if numpy: - setattr(target, name[1:].lower(), numpy.array(data, dtype=numpy.float32)) - else: - setattr(target, name[1:].lower(), data) - - fill("mNormals") - fill("mTangents") - fill("mBitangents") - - fillarray("mColors") - fillarray("mTextureCoords") - - # prepare faces - if numpy: - faces = numpy.array([f.indices for f in target.faces], dtype=numpy.int32) - else: - faces = [f.indices for f in target.faces] - setattr(target, 'faces', faces) - -def _init_metadata_entry(entry): - entry.type = entry.mType - if entry.type == structs.MetadataEntry.AI_BOOL: - entry.data = ctypes.cast(entry.mData, ctypes.POINTER(ctypes.c_bool)).contents.value - elif entry.type == structs.MetadataEntry.AI_INT32: - entry.data = ctypes.cast(entry.mData, ctypes.POINTER(ctypes.c_int32)).contents.value - elif entry.type == structs.MetadataEntry.AI_UINT64: - entry.data = ctypes.cast(entry.mData, ctypes.POINTER(ctypes.c_uint64)).contents.value - elif entry.type == structs.MetadataEntry.AI_FLOAT: - entry.data = ctypes.cast(entry.mData, ctypes.POINTER(ctypes.c_float)).contents.value - elif entry.type == structs.MetadataEntry.AI_DOUBLE: - entry.data = ctypes.cast(entry.mData, ctypes.POINTER(ctypes.c_double)).contents.value - elif entry.type == structs.MetadataEntry.AI_AISTRING: - assimp_string = ctypes.cast(entry.mData, ctypes.POINTER(structs.String)).contents - entry.data = _convert_assimp_string(assimp_string) - elif entry.type == structs.MetadataEntry.AI_AIVECTOR3D: - assimp_vector = ctypes.cast(entry.mData, ctypes.POINTER(structs.Vector3D)).contents - entry.data = make_tuple(assimp_vector) - - return entry - -def _finalize_metadata(metadata, target): - """ Building the metadata object is a bit specific. - - Firstly, there are two separate arrays: one with metadata keys and one - with metadata values, and there are no corresponding mNum* attributes, - so the C arrays are not converted to Python arrays using the generic - code in the _init function. - - Secondly, a metadata entry value has to be cast according to declared - metadata entry type. - """ - length = metadata.mNumProperties - setattr(target, 'keys', [str(_convert_assimp_string(metadata.mKeys[i])) for i in range(length)]) - setattr(target, 'values', [_init_metadata_entry(metadata.mValues[i]) for i in range(length)]) - -class PropertyGetter(dict): - def __getitem__(self, key): - semantic = 0 - if isinstance(key, tuple): - key, semantic = key - - return dict.__getitem__(self, (key, semantic)) - - def keys(self): - for k in dict.keys(self): - yield k[0] - - def __iter__(self): - return self.keys() - - def items(self): - for k, v in dict.items(self): - yield k[0], v - - -def _get_properties(properties, length): - """ - Convenience Function to get the material properties as a dict - and values in a python format. - """ - result = {} - #read all properties - for p in [properties[i] for i in range(length)]: - #the name - p = p.contents - key = str(_convert_assimp_string(p.mKey)) - key = (key.split('.')[1], p.mSemantic) - - #the data - if p.mType == 1: - arr = ctypes.cast(p.mData, - ctypes.POINTER(ctypes.c_float * int(p.mDataLength/ctypes.sizeof(ctypes.c_float))) - ).contents - value = [x for x in arr] - elif p.mType == 3: #string can't be an array - value = _convert_assimp_string(ctypes.cast(p.mData, ctypes.POINTER(structs.MaterialPropertyString)).contents) - - elif p.mType == 4: - arr = ctypes.cast(p.mData, - ctypes.POINTER(ctypes.c_int * int(p.mDataLength/ctypes.sizeof(ctypes.c_int))) - ).contents - value = [x for x in arr] - else: - value = p.mData[:p.mDataLength] - - if len(value) == 1: - [value] = value - - result[key] = value - - return PropertyGetter(result) - -def decompose_matrix(matrix): - if not isinstance(matrix, structs.Matrix4x4): - raise AssimpError("pyassimp.decompose_matrix failed: Not a Matrix4x4!") - - scaling = structs.Vector3D() - rotation = structs.Quaternion() - position = structs.Vector3D() - - _assimp_lib.dll.aiDecomposeMatrix(ctypes.pointer(matrix), - ctypes.byref(scaling), - ctypes.byref(rotation), - ctypes.byref(position)) - return scaling._init(), rotation._init(), position._init() - diff --git a/thirdparty/assimp/port/PyAssimp/pyassimp/errors.py b/thirdparty/assimp/port/PyAssimp/pyassimp/errors.py deleted file mode 100644 index 9d77686..0000000 --- a/thirdparty/assimp/port/PyAssimp/pyassimp/errors.py +++ /dev/null @@ -1,11 +0,0 @@ -#-*- coding: UTF-8 -*- - -""" -All possible errors. -""" - -class AssimpError(BaseException): - """ - If an internal error occurs. - """ - pass \ No newline at end of file diff --git a/thirdparty/assimp/port/PyAssimp/pyassimp/formats.py b/thirdparty/assimp/port/PyAssimp/pyassimp/formats.py deleted file mode 100644 index 5d454e5..0000000 --- a/thirdparty/assimp/port/PyAssimp/pyassimp/formats.py +++ /dev/null @@ -1,41 +0,0 @@ -FORMATS = ["CSM", - "LWS", - "B3D", - "COB", - "PLY", - "IFC", - "OFF", - "SMD", - "IRRMESH", - "3D", - "DAE", - "MDL", - "HMP", - "TER", - "WRL", - "XML", - "NFF", - "AC", - "OBJ", - "3DS", - "STL", - "IRR", - "Q3O", - "Q3D", - "MS3D", - "Q3S", - "ZGL", - "MD2", - "X", - "BLEND", - "XGL", - "MD5MESH", - "MAX", - "LXO", - "DXF", - "BVH", - "LWO", - "NDO"] - -def available_formats(): - return FORMATS diff --git a/thirdparty/assimp/port/PyAssimp/pyassimp/helper.py b/thirdparty/assimp/port/PyAssimp/pyassimp/helper.py deleted file mode 100644 index 5c1aca8..0000000 --- a/thirdparty/assimp/port/PyAssimp/pyassimp/helper.py +++ /dev/null @@ -1,281 +0,0 @@ -#-*- coding: UTF-8 -*- - -""" -Some fancy helper functions. -""" - -import os -import ctypes -import operator - -from distutils.sysconfig import get_python_lib -import re -import sys - -try: import numpy -except ImportError: numpy = None - -import logging;logger = logging.getLogger("pyassimp") - -from .errors import AssimpError - -additional_dirs, ext_whitelist = [],[] - -# populate search directories and lists of allowed file extensions -# depending on the platform we're running on. -if os.name=='posix': - additional_dirs.append('./') - additional_dirs.append('/usr/lib/') - additional_dirs.append('/usr/lib/x86_64-linux-gnu/') - additional_dirs.append('/usr/local/lib/') - - if 'LD_LIBRARY_PATH' in os.environ: - additional_dirs.extend([item for item in os.environ['LD_LIBRARY_PATH'].split(':') if item]) - - # check if running from anaconda. - if "conda" or "continuum" in sys.version.lower(): - cur_path = get_python_lib() - pattern = re.compile('.*\/lib\/') - conda_lib = pattern.match(cur_path).group() - logger.info("Adding Anaconda lib path:"+ conda_lib) - additional_dirs.append(conda_lib) - - # note - this won't catch libassimp.so.N.n, but - # currently there's always a symlink called - # libassimp.so in /usr/local/lib. - ext_whitelist.append('.so') - # libassimp.dylib in /usr/local/lib - ext_whitelist.append('.dylib') - -elif os.name=='nt': - ext_whitelist.append('.dll') - path_dirs = os.environ['PATH'].split(';') - additional_dirs.extend(path_dirs) - -def vec2tuple(x): - """ Converts a VECTOR3D to a Tuple """ - return (x.x, x.y, x.z) - -def transform(vector3, matrix4x4): - """ Apply a transformation matrix on a 3D vector. - - :param vector3: array with 3 elements - :param matrix4x4: 4x4 matrix - """ - if numpy: - return numpy.dot(matrix4x4, numpy.append(vector3, 1.)) - else: - m0,m1,m2,m3 = matrix4x4; x,y,z = vector3 - return [ - m0[0]*x + m0[1]*y + m0[2]*z + m0[3], - m1[0]*x + m1[1]*y + m1[2]*z + m1[3], - m2[0]*x + m2[1]*y + m2[2]*z + m2[3], - m3[0]*x + m3[1]*y + m3[2]*z + m3[3] - ] - -def _inv(matrix4x4): - m0,m1,m2,m3 = matrix4x4 - - det = m0[3]*m1[2]*m2[1]*m3[0] - m0[2]*m1[3]*m2[1]*m3[0] - \ - m0[3]*m1[1]*m2[2]*m3[0] + m0[1]*m1[3]*m2[2]*m3[0] + \ - m0[2]*m1[1]*m2[3]*m3[0] - m0[1]*m1[2]*m2[3]*m3[0] - \ - m0[3]*m1[2]*m2[0]*m3[1] + m0[2]*m1[3]*m2[0]*m3[1] + \ - m0[3]*m1[0]*m2[2]*m3[1] - m0[0]*m1[3]*m2[2]*m3[1] - \ - m0[2]*m1[0]*m2[3]*m3[1] + m0[0]*m1[2]*m2[3]*m3[1] + \ - m0[3]*m1[1]*m2[0]*m3[2] - m0[1]*m1[3]*m2[0]*m3[2] - \ - m0[3]*m1[0]*m2[1]*m3[2] + m0[0]*m1[3]*m2[1]*m3[2] + \ - m0[1]*m1[0]*m2[3]*m3[2] - m0[0]*m1[1]*m2[3]*m3[2] - \ - m0[2]*m1[1]*m2[0]*m3[3] + m0[1]*m1[2]*m2[0]*m3[3] + \ - m0[2]*m1[0]*m2[1]*m3[3] - m0[0]*m1[2]*m2[1]*m3[3] - \ - m0[1]*m1[0]*m2[2]*m3[3] + m0[0]*m1[1]*m2[2]*m3[3] - - return[[( m1[2]*m2[3]*m3[1] - m1[3]*m2[2]*m3[1] + m1[3]*m2[1]*m3[2] - m1[1]*m2[3]*m3[2] - m1[2]*m2[1]*m3[3] + m1[1]*m2[2]*m3[3]) /det, - ( m0[3]*m2[2]*m3[1] - m0[2]*m2[3]*m3[1] - m0[3]*m2[1]*m3[2] + m0[1]*m2[3]*m3[2] + m0[2]*m2[1]*m3[3] - m0[1]*m2[2]*m3[3]) /det, - ( m0[2]*m1[3]*m3[1] - m0[3]*m1[2]*m3[1] + m0[3]*m1[1]*m3[2] - m0[1]*m1[3]*m3[2] - m0[2]*m1[1]*m3[3] + m0[1]*m1[2]*m3[3]) /det, - ( m0[3]*m1[2]*m2[1] - m0[2]*m1[3]*m2[1] - m0[3]*m1[1]*m2[2] + m0[1]*m1[3]*m2[2] + m0[2]*m1[1]*m2[3] - m0[1]*m1[2]*m2[3]) /det], - [( m1[3]*m2[2]*m3[0] - m1[2]*m2[3]*m3[0] - m1[3]*m2[0]*m3[2] + m1[0]*m2[3]*m3[2] + m1[2]*m2[0]*m3[3] - m1[0]*m2[2]*m3[3]) /det, - ( m0[2]*m2[3]*m3[0] - m0[3]*m2[2]*m3[0] + m0[3]*m2[0]*m3[2] - m0[0]*m2[3]*m3[2] - m0[2]*m2[0]*m3[3] + m0[0]*m2[2]*m3[3]) /det, - ( m0[3]*m1[2]*m3[0] - m0[2]*m1[3]*m3[0] - m0[3]*m1[0]*m3[2] + m0[0]*m1[3]*m3[2] + m0[2]*m1[0]*m3[3] - m0[0]*m1[2]*m3[3]) /det, - ( m0[2]*m1[3]*m2[0] - m0[3]*m1[2]*m2[0] + m0[3]*m1[0]*m2[2] - m0[0]*m1[3]*m2[2] - m0[2]*m1[0]*m2[3] + m0[0]*m1[2]*m2[3]) /det], - [( m1[1]*m2[3]*m3[0] - m1[3]*m2[1]*m3[0] + m1[3]*m2[0]*m3[1] - m1[0]*m2[3]*m3[1] - m1[1]*m2[0]*m3[3] + m1[0]*m2[1]*m3[3]) /det, - ( m0[3]*m2[1]*m3[0] - m0[1]*m2[3]*m3[0] - m0[3]*m2[0]*m3[1] + m0[0]*m2[3]*m3[1] + m0[1]*m2[0]*m3[3] - m0[0]*m2[1]*m3[3]) /det, - ( m0[1]*m1[3]*m3[0] - m0[3]*m1[1]*m3[0] + m0[3]*m1[0]*m3[1] - m0[0]*m1[3]*m3[1] - m0[1]*m1[0]*m3[3] + m0[0]*m1[1]*m3[3]) /det, - ( m0[3]*m1[1]*m2[0] - m0[1]*m1[3]*m2[0] - m0[3]*m1[0]*m2[1] + m0[0]*m1[3]*m2[1] + m0[1]*m1[0]*m2[3] - m0[0]*m1[1]*m2[3]) /det], - [( m1[2]*m2[1]*m3[0] - m1[1]*m2[2]*m3[0] - m1[2]*m2[0]*m3[1] + m1[0]*m2[2]*m3[1] + m1[1]*m2[0]*m3[2] - m1[0]*m2[1]*m3[2]) /det, - ( m0[1]*m2[2]*m3[0] - m0[2]*m2[1]*m3[0] + m0[2]*m2[0]*m3[1] - m0[0]*m2[2]*m3[1] - m0[1]*m2[0]*m3[2] + m0[0]*m2[1]*m3[2]) /det, - ( m0[2]*m1[1]*m3[0] - m0[1]*m1[2]*m3[0] - m0[2]*m1[0]*m3[1] + m0[0]*m1[2]*m3[1] + m0[1]*m1[0]*m3[2] - m0[0]*m1[1]*m3[2]) /det, - ( m0[1]*m1[2]*m2[0] - m0[2]*m1[1]*m2[0] + m0[2]*m1[0]*m2[1] - m0[0]*m1[2]*m2[1] - m0[1]*m1[0]*m2[2] + m0[0]*m1[1]*m2[2]) /det]] - -def get_bounding_box(scene): - bb_min = [1e10, 1e10, 1e10] # x,y,z - bb_max = [-1e10, -1e10, -1e10] # x,y,z - inv = numpy.linalg.inv if numpy else _inv - return get_bounding_box_for_node(scene.rootnode, bb_min, bb_max, inv(scene.rootnode.transformation)) - -def get_bounding_box_for_node(node, bb_min, bb_max, transformation): - - if numpy: - transformation = numpy.dot(transformation, node.transformation) - else: - t0,t1,t2,t3 = transformation - T0,T1,T2,T3 = node.transformation - transformation = [ [ - t0[0]*T0[0] + t0[1]*T1[0] + t0[2]*T2[0] + t0[3]*T3[0], - t0[0]*T0[1] + t0[1]*T1[1] + t0[2]*T2[1] + t0[3]*T3[1], - t0[0]*T0[2] + t0[1]*T1[2] + t0[2]*T2[2] + t0[3]*T3[2], - t0[0]*T0[3] + t0[1]*T1[3] + t0[2]*T2[3] + t0[3]*T3[3] - ],[ - t1[0]*T0[0] + t1[1]*T1[0] + t1[2]*T2[0] + t1[3]*T3[0], - t1[0]*T0[1] + t1[1]*T1[1] + t1[2]*T2[1] + t1[3]*T3[1], - t1[0]*T0[2] + t1[1]*T1[2] + t1[2]*T2[2] + t1[3]*T3[2], - t1[0]*T0[3] + t1[1]*T1[3] + t1[2]*T2[3] + t1[3]*T3[3] - ],[ - t2[0]*T0[0] + t2[1]*T1[0] + t2[2]*T2[0] + t2[3]*T3[0], - t2[0]*T0[1] + t2[1]*T1[1] + t2[2]*T2[1] + t2[3]*T3[1], - t2[0]*T0[2] + t2[1]*T1[2] + t2[2]*T2[2] + t2[3]*T3[2], - t2[0]*T0[3] + t2[1]*T1[3] + t2[2]*T2[3] + t2[3]*T3[3] - ],[ - t3[0]*T0[0] + t3[1]*T1[0] + t3[2]*T2[0] + t3[3]*T3[0], - t3[0]*T0[1] + t3[1]*T1[1] + t3[2]*T2[1] + t3[3]*T3[1], - t3[0]*T0[2] + t3[1]*T1[2] + t3[2]*T2[2] + t3[3]*T3[2], - t3[0]*T0[3] + t3[1]*T1[3] + t3[2]*T2[3] + t3[3]*T3[3] - ] ] - - for mesh in node.meshes: - for v in mesh.vertices: - v = transform(v, transformation) - bb_min[0] = min(bb_min[0], v[0]) - bb_min[1] = min(bb_min[1], v[1]) - bb_min[2] = min(bb_min[2], v[2]) - bb_max[0] = max(bb_max[0], v[0]) - bb_max[1] = max(bb_max[1], v[1]) - bb_max[2] = max(bb_max[2], v[2]) - - - for child in node.children: - bb_min, bb_max = get_bounding_box_for_node(child, bb_min, bb_max, transformation) - - return bb_min, bb_max - -def try_load_functions(library_path, dll): - ''' - Try to bind to aiImportFile and aiReleaseImport - - Arguments - --------- - library_path: path to current lib - dll: ctypes handle to library - - Returns - --------- - If unsuccessful: - None - If successful: - Tuple containing (library_path, - load from filename function, - load from memory function, - export to filename function, - export to blob function, - release function, - ctypes handle to assimp library) - ''' - - try: - load = dll.aiImportFile - release = dll.aiReleaseImport - load_mem = dll.aiImportFileFromMemory - export = dll.aiExportScene - export2blob = dll.aiExportSceneToBlob - except AttributeError: - #OK, this is a library, but it doesn't have the functions we need - return None - - # library found! - from .structs import Scene, ExportDataBlob - load.restype = ctypes.POINTER(Scene) - load_mem.restype = ctypes.POINTER(Scene) - export2blob.restype = ctypes.POINTER(ExportDataBlob) - return (library_path, load, load_mem, export, export2blob, release, dll) - -def search_library(): - ''' - Loads the assimp library. - Throws exception AssimpError if no library_path is found - - Returns: tuple, (load from filename function, - load from memory function, - export to filename function, - export to blob function, - release function, - dll) - ''' - #this path - folder = os.path.dirname(__file__) - - # silence 'DLL not found' message boxes on win - try: - ctypes.windll.kernel32.SetErrorMode(0x8007) - except AttributeError: - pass - - candidates = [] - # test every file - for curfolder in [folder]+additional_dirs: - if os.path.isdir(curfolder): - for filename in os.listdir(curfolder): - # our minimum requirement for candidates is that - # they should contain 'assimp' somewhere in - # their name - if filename.lower().find('assimp')==-1 : - continue - is_out=1 - for et in ext_whitelist: - if et in filename.lower(): - is_out=0 - break - if is_out: - continue - - library_path = os.path.join(curfolder, filename) - logger.debug('Try ' + library_path) - try: - dll = ctypes.cdll.LoadLibrary(library_path) - except Exception as e: - logger.warning(str(e)) - # OK, this except is evil. But different OSs will throw different - # errors. So just ignore any errors. - continue - # see if the functions we need are in the dll - loaded = try_load_functions(library_path, dll) - if loaded: candidates.append(loaded) - - if not candidates: - # no library found - raise AssimpError("assimp library not found") - else: - # get the newest library_path - candidates = map(lambda x: (os.lstat(x[0])[-2], x), candidates) - res = max(candidates, key=operator.itemgetter(0))[1] - logger.debug('Using assimp library located at ' + res[0]) - - # XXX: if there are 1000 dll/so files containing 'assimp' - # in their name, do we have all of them in our address - # space now until gc kicks in? - - # XXX: take version postfix of the .so on linux? - return res[1:] - -def hasattr_silent(object, name): - """ - Calls hasttr() with the given parameters and preserves the legacy (pre-Python 3.2) - functionality of silently catching exceptions. - - Returns the result of hasatter() or False if an exception was raised. - """ - - try: - if not object: - return False - return hasattr(object, name) - except AttributeError: - return False diff --git a/thirdparty/assimp/port/PyAssimp/pyassimp/material.py b/thirdparty/assimp/port/PyAssimp/pyassimp/material.py deleted file mode 100644 index a36e50a..0000000 --- a/thirdparty/assimp/port/PyAssimp/pyassimp/material.py +++ /dev/null @@ -1,89 +0,0 @@ -# Dummy value. -# -# No texture, but the value to be used as 'texture semantic' -# (#aiMaterialProperty::mSemantic) for all material properties -# # not* related to textures. -# -aiTextureType_NONE = 0x0 - -# The texture is combined with the result of the diffuse -# lighting equation. -# -aiTextureType_DIFFUSE = 0x1 - -# The texture is combined with the result of the specular -# lighting equation. -# -aiTextureType_SPECULAR = 0x2 - -# The texture is combined with the result of the ambient -# lighting equation. -# -aiTextureType_AMBIENT = 0x3 - -# The texture is added to the result of the lighting -# calculation. It isn't influenced by incoming light. -# -aiTextureType_EMISSIVE = 0x4 - -# The texture is a height map. -# -# By convention, higher gray-scale values stand for -# higher elevations from the base height. -# -aiTextureType_HEIGHT = 0x5 - -# The texture is a (tangent space) normal-map. -# -# Again, there are several conventions for tangent-space -# normal maps. Assimp does (intentionally) not -# distinguish here. -# -aiTextureType_NORMALS = 0x6 - -# The texture defines the glossiness of the material. -# -# The glossiness is in fact the exponent of the specular -# (phong) lighting equation. Usually there is a conversion -# function defined to map the linear color values in the -# texture to a suitable exponent. Have fun. -# -aiTextureType_SHININESS = 0x7 - -# The texture defines per-pixel opacity. -# -# Usually 'white' means opaque and 'black' means -# 'transparency'. Or quite the opposite. Have fun. -# -aiTextureType_OPACITY = 0x8 - -# Displacement texture -# -# The exact purpose and format is application-dependent. -# Higher color values stand for higher vertex displacements. -# -aiTextureType_DISPLACEMENT = 0x9 - -# Lightmap texture (aka Ambient Occlusion) -# -# Both 'Lightmaps' and dedicated 'ambient occlusion maps' are -# covered by this material property. The texture contains a -# scaling value for the final color value of a pixel. Its -# intensity is not affected by incoming light. -# -aiTextureType_LIGHTMAP = 0xA - -# Reflection texture -# -# Contains the color of a perfect mirror reflection. -# Rarely used, almost never for real-time applications. -# -aiTextureType_REFLECTION = 0xB - -# Unknown texture -# -# A texture reference that does not match any of the definitions -# above is considered to be 'unknown'. It is still imported -# but is excluded from any further postprocessing. -# -aiTextureType_UNKNOWN = 0xC diff --git a/thirdparty/assimp/port/PyAssimp/pyassimp/postprocess.py b/thirdparty/assimp/port/PyAssimp/pyassimp/postprocess.py deleted file mode 100644 index 0c55d67..0000000 --- a/thirdparty/assimp/port/PyAssimp/pyassimp/postprocess.py +++ /dev/null @@ -1,530 +0,0 @@ -#
Calculates the tangents and bitangents for the imported meshes. -# -# Does nothing if a mesh does not have normals. You might want this post -# processing step to be executed if you plan to use tangent space calculations -# such as normal mapping applied to the meshes. There's a config setting, -# #AI_CONFIG_PP_CT_MAX_SMOOTHING_ANGLE, which allows you to specify -# a maximum smoothing angle for the algorithm. However, usually you'll -# want to leave it at the default value. -# -aiProcess_CalcTangentSpace = 0x1 - -##
Identifies and joins identical vertex data sets within all -# imported meshes. -# -# After this step is run, each mesh contains unique vertices, -# so a vertex may be used by multiple faces. You usually want -# to use this post processing step. If your application deals with -# indexed geometry, this step is compulsory or you'll just waste rendering -# time. If this flag is not specified, no vertices are referenced by -# more than one face and no index buffer is required for rendering. -# -aiProcess_JoinIdenticalVertices = 0x2 - -##
Converts all the imported data to a left-handed coordinate space. -# -# By default the data is returned in a right-handed coordinate space (which -# OpenGL prefers). In this space, +X points to the right, -# +Z points towards the viewer, and +Y points upwards. In the DirectX -# coordinate space +X points to the right, +Y points upwards, and +Z points -# away from the viewer. -# -# You'll probably want to consider this flag if you use Direct3D for -# rendering. The #aiProcess_ConvertToLeftHanded flag supersedes this -# setting and bundles all conversions typically required for D3D-based -# applications. -# -aiProcess_MakeLeftHanded = 0x4 - -##
Triangulates all faces of all meshes. -# -# By default the imported mesh data might contain faces with more than 3 -# indices. For rendering you'll usually want all faces to be triangles. -# This post processing step splits up faces with more than 3 indices into -# triangles. Line and point primitives are #not# modified! If you want -# 'triangles only' with no other kinds of primitives, try the following -# solution: -#