Compare commits

..

3640 Commits

Author SHA1 Message Date
Pichas f4c7606faf
fix no_valid_proc (#5774)
Co-authored-by: Kim Kulling <kimkulling@users.noreply.github.com>
2024-09-16 09:17:22 +02:00
Kim Kulling 66187a77cf
Update dll_symbol.h (#5781)
- fix compile switch
- closes https://github.com/assimp/assimp/issues/5777
2024-09-15 20:44:32 +02:00
PatrickD 5c7acc968b
Fix naming in aiMaterial comment (#5780) 2024-09-13 14:24:09 +02:00
Lux f81ea6986c
Restored absolute transform calculation due to https://github.com/assimp/assimp/pull/5349 which requires this now. (#5751) 2024-09-11 10:11:15 +02:00
dataisland ab12e8d8ba
Fix stack overflow (#5764)
Co-authored-by: Kim Kulling <kimkulling@users.noreply.github.com>
2024-09-10 23:15:31 +02:00
dataisland 3bd98611d7
Fix buffer overflow in MD3Loader (#5763)
Co-authored-by: Kim Kulling <kimkulling@users.noreply.github.com>
2024-09-10 22:10:36 +02:00
dataisland d468e633b1
Fix invalid access (#5765)
* Fix invalid access

* Update SortByPTypeProcess.cpp

Some smaller refactorings.

* Update SortByPTypeProcess.cpp

Small refactorings.

---------

Co-authored-by: Kim Kulling <kimkulling@users.noreply.github.com>
2024-09-10 09:12:01 +02:00
Kim Kulling 4024726eca
Fix leak (#5762)
* Fix leak

* Update utLogger.cpp
2024-09-07 21:02:34 +02:00
Kim Kulling cd0ef869e3
Kimkulling/mark blender versions as not supported (#5370)
* Cleanup defs + add deprecated macro

* Remove empty line

* Remove dead code

---------

Co-authored-by: Kim Kulling <kim.kulling@draeger.com>
2024-09-05 23:40:19 +02:00
RichardTea ed3fccd5db
Add option to ignore FBX custom axes (#5754)
AI_CONFIG_IMPORT_FBX_IGNORE_UP_DIRECTION
Default false

Co-authored-by: Kim Kulling <kimkulling@users.noreply.github.com>
2024-09-05 21:03:26 +02:00
Matthias Möller ff2dc2fb2e
Prevents PLY from parsing duplicate properties (#5743)
Co-authored-by: Kim Kulling <kimkulling@users.noreply.github.com>
2024-09-04 11:54:24 +02:00
Tobias Rittig, Ph.D. f69e55058d
Allow usage of pugixml from a superproject (#5752)
When using CMake subprojects with an existing build of pugixml
this prevents Assimp from using its own copy.
2024-09-03 21:45:30 +02:00
RichardTea c1ffbfec06
Zero-length mChildren arrays should be nullptr (#5749)
- Children: Don't allocate a zero-length array
- aiNode::mChildren should be left nullptr instead.
2024-09-03 10:26:27 +02:00
Kim Kulling c35200e38e
prepare v5.4.3 (#5741)
* prepare v5.4.3

- Increase patch level

* Update utVersion.cpp

Fix version test
2024-08-30 20:35:01 +02:00
Kim Kulling 1e09642382
Ply-Importer: Fix vulnerability (#5739) 2024-08-30 19:43:39 +02:00
Kim Kulling edaf87f186
Update ccpp.yml (#5740)
- Add ccache to build
2024-08-30 19:29:32 +02:00
Olivier Chafik 88340d0ce0
`build`: Add ccache support (#5686)
Co-authored-by: Kim Kulling <kimkulling@users.noreply.github.com>
2024-08-30 13:22:54 +02:00
Fav 5e912e68da
Update glTF2AssetWriter.inl (#5647)
The total length is incorrect when exporting gltf2

Co-authored-by: Kim Kulling <kimkulling@users.noreply.github.com>
2024-08-29 23:55:18 +02:00
Vincent Fazio ae0ff8a88a
Update PyAssimp structs with Skeleton & SkeletonBone members (#5734)
Co-authored-by: Kim Kulling <kimkulling@users.noreply.github.com>
2024-08-29 23:45:35 +02:00
Aliaksandr Kasmachou 924106188e
feat: add option for creating XCFramework and configure minimum iOS target (#5648)
* feat: add option for creating XCFramework and configure minimum iOS target with a build parameter

* style: update indents for iOS bash script

---------

Co-authored-by: Kim Kulling <kimkulling@users.noreply.github.com>
2024-08-29 23:05:32 +02:00
Haixi 389bdedda7
FBX: add metadata as properties (#5675)
Co-authored-by: Kim Kulling <kimkulling@users.noreply.github.com>
2024-08-29 21:38:34 +02:00
Olivier Chafik f39f53e860
Fix casting typo in D3MFExporter::writeBaseMaterials (color channels < 1.0f were zeroed out) (#5681)
Co-authored-by: Kim Kulling <kimkulling@users.noreply.github.com>
2024-08-29 21:27:13 +02:00
OGAWA KenIchi 11daaf79a5
Fix to judge 'multi-configuration' correctly (#5720)
Co-authored-by: Kim Kulling <kimkulling@users.noreply.github.com>
2024-08-29 21:09:17 +02:00
Matthias Möller 3e7e4c8c52
Fix potential memory leak in SceneCombiner for LWS/IRR/MD3 loader (#5721)
* fix potential memory leak in scenecombiner

* also cleansup srclist

* de-duplicates before deleting

---------

Co-authored-by: Kim Kulling <kimkulling@users.noreply.github.com>
2024-08-29 11:21:59 +02:00
Vincent Fazio 4338817ca2
Fix copying private data when source pointer is NULL (#5733) 2024-08-29 00:13:40 +02:00
dependabot[bot] fd7ad4a9d8
Bump softprops/action-gh-release from 1 to 2 (#5730)
Bumps [softprops/action-gh-release](https://github.com/softprops/action-gh-release) from 1 to 2.
- [Release notes](https://github.com/softprops/action-gh-release/releases)
- [Changelog](https://github.com/softprops/action-gh-release/blob/master/CHANGELOG.md)
- [Commits](https://github.com/softprops/action-gh-release/compare/v1...v2)

---
updated-dependencies:
- dependency-name: softprops/action-gh-release
  dependency-type: direct:production
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Co-authored-by: Kim Kulling <kimkulling@users.noreply.github.com>
2024-08-27 21:47:37 +02:00
dependabot[bot] a7a424e0a7
Bump actions/upload-artifact from 1 to 4 (#5731)
Bumps [actions/upload-artifact](https://github.com/actions/upload-artifact) from 1 to 4.
- [Release notes](https://github.com/actions/upload-artifact/releases)
- [Commits](https://github.com/actions/upload-artifact/compare/v1...v4)

---
updated-dependencies:
- dependency-name: actions/upload-artifact
  dependency-type: direct:production
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2024-08-27 13:04:32 +02:00
dependabot[bot] f0ca4df704
Bump actions/download-artifact from 1 to 4 (#5732)
Bumps [actions/download-artifact](https://github.com/actions/download-artifact) from 1 to 4.
- [Release notes](https://github.com/actions/download-artifact/releases)
- [Commits](https://github.com/actions/download-artifact/compare/v1...v4)

---
updated-dependencies:
- dependency-name: actions/download-artifact
  dependency-type: direct:production
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2024-08-27 10:36:13 +02:00
imdongye d32370ff12
fix GetShortFilename function (#5728)
when blender export fbx then embedded texture path have slash and back slash.
so GetShortFilename have to check both types of slashes

Co-authored-by: Kim Kulling <kimkulling@users.noreply.github.com>
2024-08-25 17:11:19 +02:00
Sanchikuuus 12ed0286e4
Added more Maya materials (#5101)
* Added more Maya materials

Added Maya materials to list and add setting texture properties for getting lost textures to mesh

* Update utMaterialSystem.cpp

Now new enumerators are handled by a case label in utMaterialSystem.cpp

* Update material.h

- Fix tests: use the correct max material parameter

---------

Co-authored-by: Kim Kulling <kimkulling@users.noreply.github.com>
2024-08-24 11:29:47 +02:00
Kim Kulling bb9db8409f
Sparky kitty studios master (#5727)
* upload contains "windows" in GH Actions

* Update ccpp.yml

* Update ccpp.yml

* Update ccpp.yml

* Update ccpp.yml

* Update ccpp.yml

* Update ccpp.yml

* Update ccpp.yml

* buildする方についてwindows-msvcのついている方にした

この二つ、何の違いがあるかいまいち理解してない…
clでビルドするかhunterでビルドするかの違い?

* upload/release対象のartifactを修正

追加当時のIssueを参考に修正(当時はHunterなかったっぽい)
a9a0c30932

* fix ccpp.yml -- fix matrix.name check for artifact

* fix ccpp.yml - build both hunter or not

* Update ccpp.yml

* Update ccpp.yml

* Update ccpp.yml

* Update ccpp.yml

* Update ccpp.yml

* Update ccpp.yml

* Fix verbose string + refactorings

* Revert "Fix verbose string + refactorings"

This reverts commit 824db16a68.

* Fix verbose string + refactorings

---------

Co-authored-by: Kazuki Y <6259214+kazu0617@users.noreply.github.com>
Co-authored-by: kazu0617 <kazu0617@protonmail.com>
Co-authored-by: Kim Kulling <kim.kulling@draeger.com>
2024-08-22 11:09:14 +02:00
sacereda d83904e3ee
Expose aiGetEmbeddedTexture to C-API (#5382)
Co-authored-by: Kim Kulling <kimkulling@users.noreply.github.com>
2024-08-21 21:15:57 +02:00
Kim Kulling bc6710a116
Fix leak in loader (#5718)
* Fix leak in loader

 Closes https://github.com/assimp/assimp/issues/5717

* Free generated mesh on importer destruction.
2024-08-17 13:49:09 +02:00
OGAWA KenIchi 10e97b2f4a
Fix MSVC build error (#5716)
* add compile option /source-charset:utf-8
2024-08-16 19:33:09 +02:00
Steve M d95a5c60ef
Revert variable name (fix broken build on android) (#5715)
Co-authored-by: Steve M <praktique-tellypresence@yahoo.com>
2024-08-14 12:13:49 +02:00
Matthias Möller 12cdbb712c
Fixes possible out-of-bound read in findDegenerate (#5679)
This is possible, if the option "aiProcess_ValidateDataStructure" is deactivated as postprocessing step, but the option "aiProcess_FindDegenerates" is activated and the mesh contains invalid data structures

Co-authored-by: Kim Kulling <kimkulling@users.noreply.github.com>
2024-08-13 16:24:43 +02:00
Måns Andersen b992ff278b
Remove recursive include (#5705)
Co-authored-by: Kim Kulling <kimkulling@users.noreply.github.com>
2024-08-13 16:14:31 +02:00
Måns Andersen 9485d49e93
include Exceptional.h in 3DSExporter.cpp (#5707)
Co-authored-by: Kim Kulling <kimkulling@users.noreply.github.com>
2024-08-13 11:17:45 +02:00
RichardTea f950f61a52
Use DRACO_GLTF_BITSTREAM (#5709)
Replaces deprecated DRACO_GLTF cmake option

Co-authored-by: Kim Kulling <kimkulling@users.noreply.github.com>
2024-08-13 10:09:28 +02:00
RichardTea afe06f2298
Fix MSVC PDBs and permit them to be disabled if required (#5710)
* Revert "Remove /Zi compiler flag for MSVC, release config"

This reverts commit 9e1de3ec6e.

* Allow MSVC PDB creation to be disabled

Turn off ASSIMP_INSTALL_PDB to disable PDB creation

* Whitespace cleanup

Assimp uses spaces in cmakelists, not tabs

---------

Co-authored-by: Kim Kulling <kimkulling@users.noreply.github.com>
2024-08-13 09:53:33 +02:00
mkuritsu d41b6b253d
Added AND condition in poly2tri dll_symbol.h to only define macros fo… (#5693)
* Added ADD condition in poly2tri dll_symbol.h to only define macros for dynamic library linking if assimp is ordered to build as DLL

* Reverted last commit to handle this issue in a better way.

* added P2T_STATIC_EXPORTS to compile definitions when building assimp as DLL

---------

Co-authored-by: Kim Kulling <kimkulling@users.noreply.github.com>
2024-08-13 09:39:53 +02:00
Nathan V. Morrical 09b981d943
fixing static build (#5713) 2024-08-13 09:23:14 +02:00
Kimbatt 48c3a0ec46
FBX exporter - handle multiple vertex color channels (#5695)
Co-authored-by: Kim Kulling <kimkulling@users.noreply.github.com>
2024-08-07 22:43:02 +02:00
Kim Kulling a37d748c17
Update DefaultIOSystem.cpp (#5697)
- closes https://github.com/assimp/assimp/issues/5678
2024-08-02 18:28:29 +02:00
Kim Kulling e63d3ed8e7
Make coord transfor for hs1 files optional (#5687)
* Make coord transfor for hs1 files optional

* Add config switch for HS1 transformation transformation
2024-07-31 18:39:39 +02:00
Kim Kulling 104a70f845
Return false instead of crash (#5685)
- Return false instead of crash
- closes https://github.com/assimp/assimp/issues/5684
2024-07-23 16:32:11 +02:00
Florian Born 76de7cedf4
A fuzzed stride could cause the max count to become negative and hence wrap around uint (#5414)
Co-authored-by: Kim Kulling <kimkulling@users.noreply.github.com>
2024-07-23 16:17:54 +02:00
JensEhrhardt-eOPUS c55158cd82
CalcTangents: zero vector is invalid for tangent/bitangent (#5432)
* CalcTangents: zero vector is invalid for tangent/bitangent
2024-07-23 13:13:12 +02:00
Kim Kulling 571ba09dc7
Mosfet80 updatedpoli2tri (#5682)
* updated poli2tri library to last version
2024-07-23 10:41:43 +02:00
Kim Kulling db19f62a0c Merge branch 'master' of https://github.com/assimp/assimp 2024-07-22 09:11:17 +02:00
Stoyan Gaydarov 5d5e0bad3c
Fix a fuzz test heap buffer overflow in mdl material loader (#5658)
Co-authored-by: Kim Kulling <kimkulling@users.noreply.github.com>
2024-07-19 21:48:10 +02:00
Kim Kulling 9cf03b4ddc
Introduce interpolation mode to vectro and quaternion keys (#5674)
* Introduce interpolation mode to vectro and quaternion keys

* Update USDLoader.cpp

Fix review finding

* Update USDLoader.h

Fix review finding,
2024-07-18 23:54:31 +02:00
Vincent Fazio 91e93578c7
Update Python structs with missing fields (#5673) 2024-07-17 21:25:16 +02:00
Kim Kulling da281b7f48 Introduce interpolation mode to vectro and quaternion keys 2024-07-17 15:49:17 +02:00
Kim Kulling 35e4f1bf64
Kimkulling/fix double precision tests (#5660)
* Make color single precision

* Fix the unittests for double precision

* Fix merge issues

* Fix issues with Vertex + Color4

* Fix vertex operator, some tests are still red.
2024-07-12 14:37:49 +02:00
Steve M 0cb1693689
[USD] Integrate "tinyusdz" project (#5628)
* Squash development commits for PR

* Fix failing build on armeabi-v7a via android NDK

* Update with blendshape support

* Migrate to auto-cloning and patching tinyusdz (instead of manually copying files)

* Update to latest rendermesh-refactor branch commit

* Remove tracked file

* Update to use recent commit to "dev" branch

"rendermesh-refactor" was merged to "dev" around 9 May 2024 but merge
was not obvious from commit messages

* Add UNUSED() macro

(cherry picked from commit d89fe8f034c353cc5cc5b3ac78cd8845e006de38)

* Update tinyusdz branch

* Prevent per-ABI (x86, x86_64 etc) clone on android

* Add verbose logging cmake option

* Fix macro and patch

* Address compiler warnings

* Address compiler warnings

* Address compiler warnings

* Attempt prevent re-clone/re-patch once downloaded by any ABI build

* Disable tinyusdz clone/build by default

assimp github PR auto-CI checks clone/build the tinyusdz code, and reject PR
due to compiler warnings in the 3rd party external tinyusdz project

---------

Co-authored-by: Steve M <praktique-tellypresence@yahoo.com>
2024-07-12 13:25:35 +02:00
Kim Kulling d3bec44990
Update Readme.md (#5665) 2024-07-11 14:19:09 +02:00
Kim Kulling b0aae04801
Update Readme.md (#5663)
- Add a discord invitation
2024-07-11 10:30:42 +02:00
Stepan Hrbek 206839d4f2
Allow empty slots in mTextureCoords (#5636)
* Allow empty slots in aiMesh::mTextureCoords.
1.Explicitly say in documentation that empty slots are allowed (it was unclear).
2.Change GetNumUVChannels() implementation to allow empty slots.
3.Revert fraction of 2da2835b29 where empty slots are detected and error logged.

* Fix #5632 by reverting fraction of d6aacefa1e where Collada texcoords are renumbered to avoid empty slots.

---------

Co-authored-by: Kim Kulling <kimkulling@users.noreply.github.com>
2024-07-10 09:01:53 +02:00
Kim Kulling 193f2c5d87
Fix compile warning (#5657) 2024-07-08 17:09:17 +02:00
Kim Kulling bff00b15f1
Replace raw pointers by std::string (#5656)
* Replace raw pointers by std::string
2024-07-06 13:59:02 +02:00
Matthias Möller d5cb1fe01f
Fix potential heapbuffer overflow in md5 parsing (#5652) 2024-07-06 08:27:05 +02:00
Kim Kulling fe6e25080b
Docker: Fix security finding (#5655)
- Use --no-install-recommends to avoid getting more deps than needed
2024-07-05 13:43:50 +02:00
Kim Kulling ddb74c2bbd
Fix out of bound access (#5651) 2024-07-03 21:37:24 +02:00
Brad D 625528d02c
Fix: StackAllocator Undefined Reference fix (#5650)
Co-authored-by: Kim Kulling <kimkulling@users.noreply.github.com>
2024-07-03 10:05:58 +02:00
Markus Prettner 7e053cc641
Fix names of enum values in docstring of aiProcess_FindDegenerates (#5640)
Co-authored-by: Kim Kulling <kimkulling@users.noreply.github.com>
2024-07-02 22:11:52 +02:00
Matthias Möller 35976a4eb4
fixes some uninit bool loads (#5644)
This commit fixes some bool loads which are not initialized. With ubsan and the "option -fsanitize=bool", this results in a runtime error during test execution.

Co-authored-by: Kim Kulling <kimkulling@users.noreply.github.com>
2024-07-02 21:54:18 +02:00
ThatOSDev dd1474e280
Update zip.c (#5639)
Now works with GCC without failing the compilation.

Co-authored-by: Kim Kulling <kimkulling@users.noreply.github.com>
2024-07-02 21:12:58 +02:00
Matthias Möller 0b19b7d73b
fixes potential memory leak on malformed obj file (#5645) 2024-06-29 19:20:10 +02:00
Julian Knodt d0703a5a3a
Fix exporting incorrect bone order (#5435)
Co-authored-by: Kim Kulling <kimkulling@users.noreply.github.com>
2024-06-28 12:58:09 +02:00
Kim Kulling cdf8394ccc
Fix nullptr dereferencing (#5638)
- closes https://github.com/assimp/assimp/issues/5617
2024-06-25 00:05:31 +02:00
Garux dd10fb6ee4
remove ASE parsing break added in c1968823ad : original intent was to keep parsing (#5634)
crash case (iMaterialCount = 0) is handled by 47dbabadcd
2024-06-24 21:23:59 +02:00
Stepan Hrbek adff2f388a
Fix collada uv channels - temporary was stored and then updated. So all information on uv channels was ignored. (#5630)
Co-authored-by: Kim Kulling <kimkulling@users.noreply.github.com>
2024-06-21 13:49:19 +02:00
ycn2022 0afd366dcb
Update FBXMeshGeometry.cpp (#5624)
Some FBXs do not have "Materials" information, which can cause parsing errors

Co-authored-by: Kim Kulling <kimkulling@users.noreply.github.com>
2024-06-20 21:26:04 +02:00
michaelsctts 77f7706a97
fix PLY binary export color from float to uchar (#5608) 2024-06-19 15:45:15 +02:00
Kim Kulling 5c2a33f230
Make stepfile schema validation more robust. (#5627)
* Make stepfile schema validation more robust.

* Update STEPFile.h
2024-06-18 14:22:12 +02:00
mosfet80 0cef794abd
Update Readme.md (#5618)
link https://bitbucket.org/Starnick/assimpnet/src/master/  is deleted.
reverto to old link

Co-authored-by: Kim Kulling <kimkulling@users.noreply.github.com>
2024-06-18 09:30:35 +02:00
Kim Kulling 07ab05cc41
Fix init aistring issue 5622 inpython module (#5625)
* Draft: Update init of aiString

- closes https://github.com/assimp/assimp/issues/5622

* Update types.h

* Fix typo

* Fix another typo

* Adapt usage of AI_MAXLEN

* Fix compare operator

* Add missing renames

* Add missing renames
2024-06-17 23:52:23 +02:00
Kim Kulling a51500ba2b
Draft: Update init of aiString (#5623)
* Draft: Update init of aiString

- closes https://github.com/assimp/assimp/issues/5622

* Update types.h

* Fix typo

* Fix another typo

* Adapt usage of AI_MAXLEN

* Fix compare operator

* Add missing renames
2024-06-17 13:12:54 +02:00
mosfet80 75091d4529
clean HunterGate.cmake (#5619)
removing cmake version control check. The cmake version is always greater than 3.22

Co-authored-by: Kim Kulling <kimkulling@users.noreply.github.com>
2024-06-17 11:50:42 +02:00
Kim Kulling 907da122e9
Create inno_setup (#5621) 2024-06-15 12:41:43 +02:00
Kim Kulling 81858f9e62
Update MDLMaterialLoader.cpp (#5620)
* Update MDLMaterialLoader.cpp

- closes https://github.com/assimp/assimp/issues/5239

* Add missing declaration
2024-06-14 12:51:47 +02:00
Kim Kulling 97cbecb859
Move revision.h and revision.h.in to include folder (#5615) 2024-06-12 21:01:03 +02:00
Kim Kulling a722e33027
Move aiScene constructor (#5614) 2024-06-11 21:19:52 +02:00
Kim Kulling 75a10fedd0
Replace duplicated trim (#5613) 2024-06-11 16:30:49 +02:00
Kim Kulling e963a863ce
Add trim to xml string parsing (#5611) 2024-06-10 22:25:28 +02:00
Bradly Landucci 8231d99a85
Converted a size_t to mz_uint that was being treated as an error (#5600)
Co-authored-by: Kim Kulling <kimkulling@users.noreply.github.com>
2024-06-10 11:19:57 +02:00
Kim Kulling 0d546b3d2e
Build: Fix compilation for VS-2022 debug mode - warning (#5606)
- closes https://github.com/assimp/assimp/issues/5601
2024-05-31 13:08:51 +02:00
Kim Kulling 43634b8b27
Postprocessing: Fix endless loop (#5605)
- closes https://github.com/assimp/assimp/issues/5603
2024-05-31 09:36:14 +02:00
mosfet80 83d7216726
updated zip (#5499)
* updated zip

udated zip from version 1.15 to version 3.0.2

* Check for double defined macro

* Update miniz.h

* Update zip.c

* Update zip.c

---------

Co-authored-by: Kim Kulling <kimkulling@users.noreply.github.com>
2024-05-27 16:19:48 +02:00
Daniel Simon 329fee2f0b
Disabled maybe-uninitialized error for AssetLib/Obj/ObjFileParser.cpp as it seems to be spurious. Also fixed error message for previous GCC build issue modification (#5593)
Co-authored-by: Kim Kulling <kimkulling@users.noreply.github.com>
2024-05-26 21:07:13 +02:00
Kim Kulling 4584719362
Update ObjFileParser.cpp (#5598)
Ensure not checking empty strings
2024-05-26 18:39:14 +02:00
Kim Kulling 30466aaf16
Fix possible nullptr dereferencing. (#5595) 2024-05-24 15:36:30 +02:00
vengine ec5242a1a0
Fix a bug that could cause assertion failure. (#5575)
Co-authored-by: macmini <xhnsworks2@icloud.com>
Co-authored-by: Kim Kulling <kimkulling@users.noreply.github.com>
2024-05-22 21:20:22 +02:00
Daniel Simon 6fa4f0ff5e
Temporary fix for GCC 13+ build issue -Warray-bounds (#5577)
Added cmake code to remove warnings for array-bounds and stringop-overflow specifically for MDLLoader.cpp on GCC 13 and above.

Co-authored-by: Kim Kulling <kimkulling@users.noreply.github.com>
2024-05-19 18:51:02 +02:00
Kim Kulling fd3f092d6e
Optimize readability (#5578) 2024-05-18 22:06:04 +02:00
Jean-Louis Boudrand 787c9afdf7
Assimp viewer fixes (#5582)
* AssimpViewer: Fix statistics reset + rename Time -> Loading time (more explicit)

* AssimpViewer: Fix bug where it was not possible to reload a closed asset

* AssimpViewer: Add a name in combobox for unnamed animations and disable anim UI when there is no animation

* AssimpViewer: Fixes the case where moving the anim cursor can break the animation

* AssimpViewer: Fixes the fact that when you press "play" on the animation after stopping it, there was a time jump in the animation

---------

Co-authored-by: Kim Kulling <kimkulling@users.noreply.github.com>
2024-05-18 19:20:06 +02:00
Kim Kulling 2521909b8c
Fix integer overflow (#5581)
- closes https://github.com/assimp/assimp/issues/5579
2024-05-18 19:05:10 +02:00
Kim Kulling 04afb63d34
fix ci by disabling tests (#5583)
* fix ci by disabling tests

* fix comment brackets
2024-05-18 12:04:50 +02:00
Kim Kulling 942518a4ff
Remove deprecated c++11 warnings (#5576) 2024-05-15 10:22:03 +02:00
Kim Kulling 10df90ec14
Prepare v5.4.1 (#5573)
* [Draft] Prepare v5.4.1

* Update utVersion.cpp

Adapt test to v5.4.1
2024-05-13 13:45:14 +02:00
Julian Uy b6d53a0047
glTF2Importer: Support .vrm extension (#5569)
Co-authored-by: Kim Kulling <kimkulling@users.noreply.github.com>
2024-05-13 13:24:41 +02:00
Kim Kulling 001bb01eb2
Make sure for releases revision will be zero (#5571) 2024-05-13 13:00:26 +02:00
Kim Kulling 325b0a543f
Add checks for invalid buffer ans size (#5570) 2024-05-13 08:55:10 +02:00
Garux 47dbabadcd
fix ASE loader crash when *MATERIAL_COUNT or *NUMSUBMTLS is not specified or is 0 (#5559)
code was doing vector[0u - 1] dereference in this case

Co-authored-by: Kim Kulling <kimkulling@users.noreply.github.com>
2024-05-08 10:43:43 +02:00
Kim Kulling c953739487
Kimkulling/fix pyassimp compatibility (#5563)
* Use correct exception message access

* Add missing docs
2024-05-06 21:38:29 +02:00
Garux 00b6db86ab
mention IQM loader in Fileformats.md (#5560)
Co-authored-by: Kim Kulling <kimkulling@users.noreply.github.com>
2024-05-02 16:34:47 +02:00
陈瑞锋 4621676424
fix a collada import bug (#5561) 2024-05-02 15:32:12 +02:00
Johannes Unterguggenberger 47ef79672e
Reverts the changes introduced by commit ad766cb in February 2022. (#5542)
* Reverts the changes introduced by commit ad766cb in February 2022.
Explanation why the old code was just fine is given in Q&A #5512.

* Added that missing ;

---------

Co-authored-by: Kim Kulling <kimkulling@users.noreply.github.com>
2024-04-29 21:03:57 +02:00
Kim Kulling c05895f3c7
Q3DLoader: Fix possible material string overflow (#5556)
- closes https://github.com/assimp/assimp/issues/5555
2024-04-26 11:11:19 +02:00
Succ3s 7bda0f88ca
SplitByBoneCount had a minor typo that prevented updates to nodes indices (#5550) 2024-04-23 21:40:06 +02:00
Zeun b71b8f77ee
add some ASSIMP_INSTALL checks (#5545) 2024-04-16 23:41:21 +02:00
Kim Kulling 85f084a4ce
Update ComputeUVMappingProcess.cpp (#5541)
* Update ComputeUVMappingProcess.cpp

- closes https://github.com/assimp/assimp/issues/5540

* Update ComputeUVMappingProcess.cpp

Add missing token.
2024-04-11 11:30:36 +01:00
Stephen Gold 08c1adc015
fix issue #5461 (segfault after removing redundant materials) (#5467)
* fix issue #5641 (segfault after removing redundant materials)

* Update RemoveRedundantMaterials.cpp

- Fix 2 possible memleaks.

---------

Co-authored-by: Kim Kulling <kimkulling@users.noreply.github.com>
2024-04-10 00:22:57 +02:00
mosfet80 3ff7851ff9
updated STBIMAGElib (#5500)
2.29  (2023-05-xx) optimizations

Co-authored-by: Kim Kulling <kimkulling@users.noreply.github.com>
2024-04-09 23:31:10 +02:00
mosfet80 64d88276ef
updated minizip to last version (#5498)
Version 1.3.1 has these key changes:

Reject overflows of zip header fields in minizip
Fix bug in inflateSync() for data held in bit buffer
Add LIT_MEM define to use more memory for a small deflate speedup
Fix decision on the emission of Zip64 end records in minizip
Add bounds checking to ERR_MSG() macro, used by zError()
Neutralize zip file traversal attacks in miniunz
Fix a bug in ZLIB_DEBUG compiles in check_match()
Version 1.3 has these key changes:

Building using K&R (pre-ANSI) function definitions is no longer supported.
Fixed a bug in deflateBound() for level 0 and memLevel 9.
Fixed a bug when gzungetc() is used immediately after gzopen().
Fixed a bug when using gzflush() with a very small buffer.
Fixed a crash when gzsetparams() is attempted for a transparent write.
Fixed test/example.c to work with FORCE_STORED.
Fixed minizip to allow it to open an empty zip file.
Fixed reading disk number start on zip64 files in minizip.
Fixed a logic error in minizip argument processing.

Co-authored-by: Kim Kulling <kimkulling@users.noreply.github.com>
2024-04-09 00:08:38 +02:00
Alex Rønne Petersen b8aa68a080
CMake: Allow linking draco statically if ASSIMP_BUILD_DRACO_STATIC is set. (#5535)
* CMake: Mark draco as a private dependency since assimp does not publicly expose its interface.

* CMake: Allow linking draco statically if ASSIMP_BUILD_DRACO_STATIC is set.
2024-04-08 23:28:37 +02:00
Kim Kulling 8b9ed34eaa
Update CMakeLists.txt (#5531)
* Update CMakeLists.txt

* Update Version.cpp

* Update CMakeLists.txt

Update minimum version of cmake

* Update utVersion.cpp

Adapt unittest
2024-04-07 23:14:12 +02:00
Kim Kulling b41ffa5561
Remove default destructor definitions from cpp files (#5528) 2024-04-07 21:42:52 +02:00
mosfet80 4a3e0e46ac
updated json (#5501)
fix https://github.com/Tencent/rapidjson/issues/1448

Co-authored-by: Kim Kulling <kimkulling@users.noreply.github.com>
2024-04-07 21:24:57 +02:00
Tom Heaton 1f920ee1fe
Update matrix4x4.h (#5507)
Co-authored-by: Kim Kulling <kimkulling@users.noreply.github.com>
2024-04-07 20:16:48 +02:00
mosfet80 778ce90a04
Update hunter into CMakeLists.txt (#5505)
Update 'CURL' to v8.5.0 
Update 'xxHash' to v0.8.2 
Update 're2' to v2023.03.01 
docs: Add SHA1 calculation onliner and fix sums 
docs: fix URLs for FunctionalPlus and PocoCpp 
ceres-solver: update to 2.2.0-p2 with SuiteSparse v7.5.1-1 
SuiteSparse: update to v7.5.1-1

Co-authored-by: Kim Kulling <kimkulling@users.noreply.github.com>
2024-04-07 16:49:55 +02:00
Alejandro González 790aad4b62
Add macOS support to C4D importer (#5516)
The latest Cineware SDK explicitly asserts macOS support in its
documentation, but Assimp's C4D importer only works with Windows MSVC
targets. Let's improve its portability by refactoring importer code to
not depend on MSVC-only data types and quirks, and add support for linking
against the universal macOS static libraries provided in the Cineware
SDK.

Note that the C4D importer still cannot support Linux platforms because
Maxon does not provide the necessary precompiled Cineware libraries for
that platform. Windows MinGW targets are also out of the question as the
MinGW toolchain uses compiled libraries in a different format.

Co-authored-by: Kim Kulling <kimkulling@users.noreply.github.com>
2024-04-07 00:25:46 +02:00
RoboSchmied 52c2b6896a
Fix 16 typos (#5518)
Signed-off-by: RoboSchmied <github@roboschmie.de>
Co-authored-by: Kim Kulling <kimkulling@users.noreply.github.com>
2024-04-06 21:26:32 +02:00
Oleg Ivanov 9d11b220eb
Fix utDefaultIOStream test under MinGW (#5525) 2024-04-06 12:48:28 +02:00
Julian Knodt 39ce0c0456
Respect merge identical vertices in ObjExporter (#5521)
Co-authored-by: Kim Kulling <kimkulling@users.noreply.github.com>
2024-04-02 18:31:19 +02:00
Kristjan Skutta feb861f17b
Fix duplicate degrees to radians conversion in fbx importer. (#5427)
Co-authored-by: Kim Kulling <kimkulling@users.noreply.github.com>
2024-03-22 00:01:57 +01:00
mosfet80 730aa9d0b7
Delete packaging/windows-mkzip directory (#5492)
Removed unused files

Co-authored-by: Kim Kulling <kimkulling@users.noreply.github.com>
2024-03-20 11:15:03 +01:00
mosfet80 072320df4f
Delete tools/make directory (#5491)
Delete old .bat files

Co-authored-by: Kim Kulling <kimkulling@users.noreply.github.com>
2024-03-18 23:24:51 +01:00
Kim Kulling fcb1444b84
Add correction of fbx model rotation (#5494) 2024-03-17 17:46:28 +01:00
Laura Hermanns 727774f181
Fix compilation for MSVC14. (#5490)
- std::min/max were not defined in StackAllocator.inl; Also added explicit template arguments to break macro expansion if Windows.h is included prior and NOMINMAX macro is not present.
- Made static_assert statements compatible with C++11 in ProcessHelper.cpp.
- Removed unused string_view include in ObjFileParser.cpp.
2024-03-11 09:09:23 +01:00
Bao Anchang bb9101ae9e
Eliminate non-ascii comments in clipper (#5480) 2024-03-04 09:18:08 +01:00
sSsA01 f95050e7aa
Append a setting "AI_CONFIG_EXPORT_FBX_TRANSPARENCY_FACTOR_REFER_TO_OPACITY". (#5450)
Co-authored-by: Kim Kulling <kimkulling@users.noreply.github.com>
2024-02-27 20:26:13 +01:00
Kim Kulling 01231d0e60
Add 2024 to copyright infos (#5475) 2024-02-23 22:30:05 +01:00
Kim Kulling 0664882763
Add zlib-header to ZipArchiveIOSystem.h (#5473)
- closes https://github.com/assimp/assimp/issues/5430
2024-02-23 11:30:37 +01:00
Kim Kulling 4d6dd80257
Add correct double zero check (#5471)
* Add correct double zero check

* Use std::fpclassify
2024-02-22 13:58:25 +01:00
Kim Kulling 94bc568d13
Include defs in not cpp-section (#5466)
- closes https://github.com/assimp/assimp/issues/5428
2024-02-16 15:21:49 +01:00
Adam Mizerski 4b9f46dbda
ColladaParser: check values length (#5462)
* ColladaParser: check values length

fixes: #4286

* Refactor calculation of size for data

---------

Co-authored-by: Kim Kulling <kimkulling@users.noreply.github.com>
2024-02-15 13:07:00 +01:00
Séverin Lemaignan a3708e3464
Add ISC LICENSE file (#5465) 2024-02-14 08:32:32 +01:00
Emily Banerjee ff5b0ae575
Fix PyAssimp under Python >= 3.12 and macOS library search support (#5397)
* Fix PyAssimp under Python >= 3.12

* Make PyAssimp search DYLD_LIBRARY_PATH under macOS

---------

Co-authored-by: Kim Kulling <kimkulling@users.noreply.github.com>
2024-02-08 20:46:36 +01:00
fvbj 2d98f6a880
Fix identity matrix check (#5445)
* Fix identity matrix check

Adds an extra epsilon value to check the matrix4x4 identity. The method is also used to export to GLTF/GLTF2 format to check node transformation matrices. The epsilon value can be set using AI_CONFIG_CHECK_IDENTITY_MATRIX_EPSILON with the default value set to 10e-3f for backward compatibility of legacy code.

* Fix type of float values in the unit test

* Update matrix4x4.inl

Fix typo

* Update matrix4x4.inl

Remove dead code.

* Add isIdentity-Test

* Update AssimpAPITest_aiMatrix4x4.cpp

---------

Co-authored-by: Kim Kulling <kimkulling@users.noreply.github.com>
2024-02-06 21:24:41 +01:00
Julian Knodt c877a15140
`Blendshape`->`Geometry` in FBX Export (#5419)
When loading a mesh exported from assimp into Blender, it warns that it has an incorrect class.
While debugging, I traced it back to this being `Blendshape` where `Geometry` was expected. This
is likely because this node describes a `Geometry`, which is used as a blendshape. I'm not sure
if any other DCC tools or places to import it expect `Blendshape` instead (i.e. was this code
ever tested?), but it fixes its use in Blender.

Co-authored-by: Kim Kulling <kimkulling@users.noreply.github.com>
2024-02-05 16:55:00 +01:00
mosfet80 1164844ce4
Update CMakeLists.txt (#5379)
* Update CMakeLists.txt

Silence warnings when building with CMake 3.27 by @hjmallon in #717
update gate submodule with fixed CMake 3.27 deprecation warnings as well
glog: add version 0.6.0 and disable new dependencies by @NeroBurner in #719
ceres-solver: update to v2.2.0-p1 by @NeroBurner in #720
Update 'GTest' to v1.14.0 by @hjmallon in #705
Update 'pybind11' to v2.11.1 by @hjmallon in #706
ceres-solver: update to v2.2.0-p0 and fix examples by @NeroBurner in #703
Eigen: explicitly disable Fortran usage by @NeroBurner in #704
OpenSSL: Fix v3 version parsing by @hjmallon in #707
Update 'Boost' to 1.83 by @hjmallon in #708
Update 'OpenSSL' to v3.0.12 and v3.1.4 by @hjmallon in #710
Update 'abseil' to 20230802.1 by @hjmallon in #711
Update 'benchmark' to v1.8.3 by @hjmallon in #712
Update 'sqlite3' to v3.43.2 by @hjmallon in #716
Update 'CURL' to v8.4.0 by @hjmallon in #663
CI: remove macos-10.15 jobs as the macos-10.15 runners are removed by @NeroBurner in #695
ZLIB: update to version v1.3.0-p0 by @NeroBurner in #693
miniz: update to v3.0.2 by @NeroBurner in #692
Update fmt package to 10.1.1 by @JamesEggleton in #697
Update spdlog package to 1.12.0-p0 by @JamesEggleton in #699
Update zstd package to 1.5.5 by @JamesEggleton in #700
SuiteSparse: update to 1.8.0 / 5.4.0-2 by @NeroBurner in #702
OpenCV, Extra, ippicv: update to v4.8.1-p0 by @NeroBurner in #696
hunter_setup_msvc: tolower to fix arm64 vs ARM64 confusion by @NeroBurner in #681
Add various recent LLVM versions by @mrexodia in #517
Update fmt package to 9.1.0 by @apivovarov in #683
Update asio-grpc to v2.6.0 by @Tradias in #686
#685 Minimum cmake version required now 3.5 by @john-forrest in #689

* Update CMakeLists.txt

* Update CMakeLists.txt

---------

Co-authored-by: Kim Kulling <kimkulling@users.noreply.github.com>
2024-02-05 15:40:52 +01:00
dependabot[bot] a8c8e75a17
Bump actions/cache from 3 to 4 (#5431)
Bumps [actions/cache](https://github.com/actions/cache) from 3 to 4.
- [Release notes](https://github.com/actions/cache/releases)
- [Changelog](https://github.com/actions/cache/blob/main/RELEASES.md)
- [Commits](https://github.com/actions/cache/compare/v3...v4)

---
updated-dependencies:
- dependency-name: actions/cache
  dependency-type: direct:production
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Co-authored-by: Kim Kulling <kimkulling@users.noreply.github.com>
2024-02-05 15:10:36 +01:00
Florian Born f59a5fab1a
More GLTF loading hardening (#5415)
Co-authored-by: Kim Kulling <kimkulling@users.noreply.github.com>
2024-02-04 21:23:31 +01:00
Galen Xiao b7b6601a75
feat:1.add 3mf vertex color read 2.fix 3mf read texture bug (#5361)
* feat:1.add 3mf vertex color read 2.fix 3mf read texture bug

* fix checks failed

* Trigger CI

---------

Co-authored-by: Kim Kulling <kimkulling@users.noreply.github.com>
2024-02-04 20:23:07 +01:00
Stephen Gold bc6673b4b2
Fileformats.md: clarify that import of .blend files is deprecated (#5350)
Co-authored-by: Kim Kulling <kimkulling@users.noreply.github.com>
2024-02-04 19:06:07 +01:00
Steve M 005399a671
Fix X importer breakage introduced in commit f844c33 (#5372)
* Update XFileImporter.cpp

Comment out boneIdx conditional which caused massive breakage

* Update XFileImporter.cpp

Fix typo

* Update XFileImporter.cpp

Dummy whitespace change to attempt to re-trigger failing CI tests

---------

Co-authored-by: Steve M <praktique-tellypresence@yahoo.com>
Co-authored-by: Kim Kulling <kimkulling@users.noreply.github.com>
2024-02-04 10:38:07 +01:00
Kim Kulling 3990ec80a1
Kimkulling/fix bahavior of remove redundat mats issue 5438 (#5451)
* Fix crash in viewer

* Fix bevavior when material was not referenced
2024-02-01 21:27:04 +01:00
Kim Kulling 3476c79801
Static code analysis fixes (#5447)
* Static code analysis fixes

- Fix warning in LOW

* Fix possible out of bound access.

* Add default to class declaration
2024-01-31 09:30:54 +01:00
Kim Kulling f956351942
Fix crash in viewer (#5446) 2024-01-30 22:14:18 +01:00
Kim Kulling c08e3b4abb
Add bounds checks to the parsing utilities. (#5421)
* Add bounds checks to the parsing utilities.

* Fix merge conflicts in ACLoader.

* Fix loaders

* Fix unittest of AC-Loader.

* Remove dead code.

* Md5Parser fixes

* Fix md5-parsing

* Fix Merge conflict

* Fix merge conflicts.

* Md5: Fix warning: missing return statement.
2024-01-30 14:32:41 +01:00
Kim Kulling d5f35582d4 Introduce aiBuffer
We have a lot of parsing tools which are not doing any kind of bound checking. This is the first approach to solve these issues.
2024-01-30 10:43:03 +01:00
tigertang a02085ea98 Update StbCommon.h to stay up-to-date with stb_image.h.
This enables C++ API users to statically link Assimp into their projects along with stb_image.
2024-01-29 13:52:54 +01:00
Kim Kulling a8d30f7e91 Update DXFLoader.cpp
revert it
2024-01-27 12:14:35 +01:00
Kim Kulling c6fe03f7a5 Update DXFLoader.cpp
- Use constexpr instead of const.
2024-01-27 12:14:35 +01:00
seanth 8cde65bfe8 Updated AIC table
The previous table was in an incorrect order, leading to index references in DXF producing the wrong colours when converted.

Also added other entries to bring the total number of ACI colours up  to the number that can be used in DXF files
2024-01-27 12:14:35 +01:00
seanth 240fa97fed Update DXFLoader.cpp
Changed order of operations for insert positioning and scaling. Need to position the inserts before scaling it, otherwise the position ends up up being position*scale
2024-01-27 12:14:35 +01:00
seanth 727001b0ca Update DXFLoader.cpp
Edited out line suspected to be causing changes in position when changes in scale are made to inserted BLOCKS
2024-01-27 12:14:35 +01:00
julianknodt bdc08dd4a9 Encode full weight as double 2024-01-27 10:10:28 +01:00
Stephen Gold ac29847d56 Readme.md: present the web links in a more uniform style 2024-01-12 10:59:34 +01:00
Robert Reif 81c20a5c61 Improve acc file loading
Add warning and support for tolerating a common problem where objects have wrong kid count.
Add support for empty texture layers.
2024-01-09 21:13:13 +01:00
Andre Schulz 74af43f655 Add unit test for X3D IndexedLineSet
Unit test for issue #3101

Thanks to @mvidiassov for the X3D test file!
2024-01-09 20:55:51 +01:00
Andre Schulz 9d71a275c3 X3D: Don't convert IndexedLineSet polylines with > 2 indices to triangles/polygons
Currently, when the coordIndex attribute of an IndexedLineSet contains a
polyline with > 2 indices, X3DGeoHelper::coordIdx_str2faces_arr() will
incorrectly determine the primitive type to be aiPrimitiveType_TRIANGLE or
aiPrimitiveType_POLYGON instead of aiPrimitiveType_LINE.

To fix this, this commit adds functions to explicitly handle an IndexedLineSet.

Fixes #3101
2024-01-09 20:55:51 +01:00
Kim Kulling c8ca1a48ec Update Dockerfile
- closes https://github.com/assimp/assimp/issues/5403
2024-01-08 10:18:16 +01:00
Steve M ea9aa863ff Increase texture variety 2024-01-07 20:16:19 +01:00
Steve M cb8150b3e8 Add missing textures and reduce texture sprawl 2024-01-07 20:16:19 +01:00
copycd b571501559 @ error
Cause a TypeError when arg is UNSET
2024-01-06 20:57:41 +01:00
Hamza 6a0e1d5467 fix building errors for MinGW 2024-01-05 22:01:58 +01:00
tangxin 9776d47cca fix: KHR_materials_pbrSpecularGlossiness/diffuseFactor convert to pbrMetallicRoughness/baseColorFactor 2024-01-05 21:49:21 +01:00
dependabot[bot] ec122eb348 Bump actions/upload-artifact from 3 to 4
Bumps [actions/upload-artifact](https://github.com/actions/upload-artifact) from 3 to 4.
- [Release notes](https://github.com/actions/upload-artifact/releases)
- [Commits](https://github.com/actions/upload-artifact/compare/v3...v4)

---
updated-dependencies:
- dependency-name: actions/upload-artifact
  dependency-type: direct:production
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>
2023-12-31 12:00:16 +01:00
copycd 6bcdf989fb Triangle value is null-error, I don't know why it happened. 2023-12-31 10:31:44 +01:00
Kim Kulling 5cbdb6c63b Build: Disable building zlib for non-windows
- closes https://github.com/assimp/assimp/issues/5340
2023-12-29 17:37:59 +01:00
Kim Kulling 636fbd65b3 Refactorings: come code cleanups 2023-12-29 16:55:37 +01:00
Kim Kulling 263bebb5ba Add a test before generating the txture folder 2023-12-29 16:55:37 +01:00
Kim Kulling 5d5496f1ad Update MDLMaterialLoader.cpp 2023-12-22 13:23:08 +01:00
Kim Kulling 69dae9599a Fix integer overflow
- closes https://github.com/assimp/assimp/issues/4930
2023-12-22 13:23:08 +01:00
Kim Kulling 9dddef9b9d Update D3MFImporter.cpp 2023-12-22 10:49:54 +01:00
Kim Kulling b9576e6992 Update D3MFImporter.cpp 2023-12-22 10:49:54 +01:00
Kim Kulling 274f64cbf1 Check validity of archive without parsing
- closes https://github.com/assimp/assimp/issues/5392
2023-12-22 10:49:54 +01:00
Kim Kulling 7b54b0f406 Fix leak
- closes https://github.com/assimp/assimp/issues/5390
2023-12-21 21:18:38 +01:00
Alexander Wagner df33d33e8f - removed commented code 2023-12-20 20:55:04 +01:00
Marka Ragnos 3ce8a58d41 Update DefaultIOSystem.cpp
Added missing whitespace
2023-12-20 20:55:04 +01:00
Alexander Wagner d03ab3ef27 - fixed Exist function on Linux 2023-12-20 20:55:04 +01:00
Alexander Wagner e86f1acb9b - fixed q3bsp issue 2023-12-20 20:55:04 +01:00
Alexander Wagner 4034df8b6e - removed unused include 2023-12-20 20:55:04 +01:00
Kim Kulling 88084a67fc Disable Hunter 2023-12-20 20:13:47 +01:00
Alexey Medvedev 762ad8e9b7 glTF KHR_materials_specular fixes 2023-12-11 11:09:18 +01:00
Alexey Medvedev dc399f7343 glTF KHR_materials_specular fixes 2023-12-11 11:09:18 +01:00
Alexey Medvedev a72289b327 glTF KHR_materials_specular fixes 2023-12-11 11:09:18 +01:00
Stephen Gold 213d73ebc6 correct grammar/typographic errors in comments (8 files) 2023-12-04 23:58:54 +01:00
Futuremappermydud a0b3df6dbd Fix target names not being imported on some gLTF2 models 2023-12-04 21:11:55 +01:00
Stephen Gold 769e82ce5e FBXMeshGeometry: solve issue #5116 using patch provided by darktjm 2023-12-04 20:57:10 +01:00
Maksim Kostin d311fa95c6 Fix double free in Video::~Video() 2023-12-01 11:14:22 +01:00
Stephen Gold e765862d24 Readme.md: correct 2 errors in section headers 2023-11-30 16:06:57 +01:00
Maksim Kostin f701d702e4 Fix buffer overflow in FBX::Util::DecodeBase64() 2023-11-29 11:12:39 +01:00
ccn a63a6011c5 Update Build.md
Add more details about the default build.
2023-11-29 10:55:08 +01:00
IOhannes m zmölnig 6f715edfa0 Drop disabled zlib.h inclusion stubs 2023-11-29 09:53:03 +01:00
IOhannes m zmölnig bfdd154d14 Always include "zlib.h" (rather than .../contrib/zlib/zlib.h)
The path to the vendored zlib is set by the build-system,
so there's no need to add additional preprocessor magic
2023-11-29 09:53:03 +01:00
IOhannes m zmölnig 6f70e220e4 always include "utf8.h" (instead of contrib/.../utf8.h) 2023-11-29 09:53:03 +01:00
Kim Kulling 85f64c9131 Use correct time scaling 2023-11-28 21:10:18 +01:00
Kim Kulling 01f2549abe Fix the build 2023-11-28 20:49:10 +01:00
Kim Kulling 384db8686e Update FBXConverter.cpp
- Temporary fix bind pose storage in offset matrix
- Will close https://github.com/assimp/assimp/issues/5132
2023-11-28 20:49:10 +01:00
Kim Kulling 77a8f019e3 Fix: Check if index for mesh access is out of range 2023-11-22 10:14:26 +01:00
ccn 254619901b Update Readme.md
improve link formatting
2023-11-22 09:18:35 +01:00
ccn 56e0ba58e1 Update Readme.md
fix link in readme
2023-11-20 10:24:02 +01:00
Alexandre Avenel e4e2c63e0c Fix heap-buffer overflow in PLY parser 2023-11-20 08:43:17 +01:00
Alexandre Avenel bfe8745b90 Add as unit-test an invalid PLY model triggering heap-buffer-overflow
==23896==ERROR: AddressSanitizer: heap-buffer-overflow on address 0x12f9daec1827 at pc 0x7ffcad83699c bp 0x00c61574c910 sp 0x00c61574c910
READ of size 1 at 0x12f9daec1827 thread T0
==23896==WARNING: Failed to use and restart external symbolizer!
    #0 0x7ffcad83699b in Assimp::IOStreamBuffer<char>::getNextLine C:\Users\aavenel\Dev\assimp\include\assimp\IOStreamBuffer.h:299
    #1 0x7ffcad83ce69 in Assimp::PLY::DOM::ParseHeader C:\Users\aavenel\Dev\assimp\code\AssetLib\Ply\PlyParser.cpp:428
    #2 0x7ffcad83d58e in Assimp::PLY::DOM::ParseInstanceBinary C:\Users\aavenel\Dev\assimp\code\AssetLib\Ply\PlyParser.cpp:498
    #3 0x7ffcad83302a in Assimp::PLYImporter::InternReadFile C:\Users\aavenel\Dev\assimp\code\AssetLib\Ply\PlyLoader.cpp:189
    #4 0x7ffcad4f2f48 in Assimp::BaseImporter::ReadFile C:\Users\aavenel\Dev\assimp\code\Common\BaseImporter.cpp:135
    #5 0x7ffcad51ee46 in Assimp::Importer::ReadFile C:\Users\aavenel\Dev\assimp\code\Common\Importer.cpp:709
    #6 0x7ff7dd8f9f1a in ImportModel C:\Users\aavenel\Dev\assimp\tools\assimp_cmd\Main.cpp:307
    #7 0x7ff7dd8fdf9e in Assimp_Info C:\Users\aavenel\Dev\assimp\tools\assimp_cmd\Info.cpp:344
    #8 0x7ff7dd8fc04f in main C:\Users\aavenel\Dev\assimp\tools\assimp_cmd\Main.cpp:222
    #9 0x7ff7dd9030eb in __scrt_common_main_seh D:\a\_work\1\s\src\vctools\crt\vcstartup\src\startup\exe_common.inl:288
    #10 0x7ffd39e57343 in BaseThreadInitThunk+0x13 (C:\WINDOWS\System32\KERNEL32.DLL+0x180017343)
    #11 0x7ffd3a2626b0 in RtlUserThreadStart+0x20 (C:\WINDOWS\SYSTEM32\ntdll.dll+0x1800526b0)
2023-11-20 08:43:17 +01:00
Alexandre Avenel aae93691b9 Fix container overflow in MMD parser
Using reserve, buffer size is not updated. Since data is directly inserted and not using push_pack,
this can lead to a container overflow.
2023-11-17 14:33:17 +01:00
Florian Born 6004290dde Use the correct allocator for deleting objects in case of duplicate animation Ids 2023-11-16 10:02:16 +01:00
Wojciech Matyjewicz 069e19487c Fix parsing <init_from> in <image>.
The regression was introduced in 21678df.
2023-11-16 08:50:10 +01:00
Wojciech Matyjewicz 2235518b3c Fix parsing <instance_image> in <sampler2D>.
The regression was introduced in 904f17f.

Since all the cases are now fully handled at the child level,
visiting the whole subtree is changed into iteration over the children.
2023-11-16 08:50:10 +01:00
copycd 8648c2af45 fix mesh-name error. 2023-11-15 13:04:10 +01:00
Kim Kulling f0e7448fdc Remove double delete 2023-11-14 22:09:56 +01:00
julianknodt 9efbbe0a69 Read int from uvwsrc
Previously was reading a uint, which always failed. Since the output was never checked, this
seemed to work, and works fine for most models since they only use UV channel 0.
2023-11-14 16:31:56 +01:00
Kim Kulling 4535e37fc6 Fix namespaces. 2023-11-12 21:09:33 +01:00
Kim Kulling 8cf2d6e588 Refactoring: Some cleanups 2023-11-12 21:09:33 +01:00
Kim Kulling aa3abb3c06 Fix warning: remove printf 2023-11-10 15:36:40 +01:00
Kim Kulling 0b0ec713f6 Fix empty mesh handling 2023-11-10 15:36:40 +01:00
julianknodt 28ab0a094a Fix incorrect deg->radian conversion
It seems that rotation matrices later expect radians.
This conversion breaks it, and was validated on the conversion of
`cesium_man.glb` --> `cesium_man.fbx`
2023-11-07 20:06:16 +01:00
Tárcio Vinícius 46b19cc6a4 utf8 header not found 2023-11-06 16:09:53 +01:00
Martin Aumüller a521b23ab5 link to external minizip with full path
This let's cmake create config files that allow linking to minizip even when
in an unrelated prefix. This can happen with package managers that install
every package into their own prefix, such as [Spack](https://spack.io).
2023-11-06 09:55:25 +01:00
Kim Kulling 108e3192a2 Update FBXBinaryTokenizer.cpp
- closes https://github.com/assimp/assimp/issues/5072
2023-11-05 17:57:29 +01:00
Kim Kulling f844c3397d Fix add checks for indices 2023-11-03 12:40:08 +01:00
Pavel Lukandiy a7cfa3264a Fix: Implicit Conversion Error 2023-11-02 16:19:42 +01:00
Kim Kulling c1deb808fa Fix: Remove incorrect final statements 2023-10-29 10:05:25 +01:00
Kim Kulling 25aee03f66 Fix: Add missing transformation for normalized normals. 2023-10-29 10:05:25 +01:00
Sébastien Loriot c44e3427aa use size in order to be compatible with float and double 2023-10-24 14:02:38 +01:00
julianknodt 1169d3bc8c Fix spelling error 2023-10-24 09:34:36 +01:00
David Marčinković 945c77d699 Fix double free when the mesh contains duplicate bones. 2023-10-21 08:11:37 +01:00
Kim Kulling 020554e213 Update Readme.md
- Fix typos
- Remove deprecated badges
- Add the new experimental viewer
2023-10-14 11:42:24 +01:00
Kim Kulling 2a347014f3 Update ImproveCacheLocality.cpp 2023-10-08 18:35:08 +00:00
Kim Kulling a531c72f7f Update ImproveCacheLocality.cpp
- closes https://github.com/assimp/assimp/issues/5262
2023-10-08 18:35:08 +00:00
Kawashima Satoshi 666ecd3f1f Bug Fix:
Failed to get floating values (e.g. opacity) from scene material when ASSIMP_DOUBLE_PRECISION is defined, so they are not reflected to output fbx file.
2023-10-08 15:21:26 +00:00
Kim Kulling 5d60cf228a Fix: Waning implicite cast 2023-10-08 14:43:53 +00:00
Kim Kulling 2f78d48d6b Fix: Warning implicite convertion 2023-10-08 14:43:53 +00:00
Kim Kulling 3c1423d5a5 Replace uint by unsigned int 2023-10-08 14:43:53 +00:00
Kim Kulling 1ee13872b1 Update utglTF2ImportExport.cpp 2023-10-08 14:43:53 +00:00
Kim Kulling 01322ec831 Fix Warning: Use float instead of double 2023-10-08 14:43:53 +00:00
fvbj 8fcc65a8af Extension of data export to GLB/GLTF format
Allows to export unlimited (more than 4) bones per vertex
Use JOINTS_1,2,.. and WEIGHTS_1,2,...
Added AI_CONFIG_EXPORT_GLTF_UNLIMITED_SKINNING_BONES_PER_VERTEX flag
2023-10-08 14:43:53 +00:00
Kim Kulling 5b8cfa920b Replace an assert by a error log. 2023-10-02 11:31:18 +02:00
Kim Kulling d7cde43367 Fix: Add check for invalid input argument 2023-10-02 10:41:50 +02:00
ockeymm 7b6bf139cf include memory.h to fix compile error 2023-10-01 16:11:20 +02:00
ockeymm b2bfe6d253 Use unique_ptr to release old vertices data. 2023-10-01 16:11:20 +02:00
ockeymm 7a4d8ec412 Reduce memory consumption in JoinVerticesProcess::ProcessMesh() significantly 2023-10-01 16:11:20 +02:00
Begasus 7a26433846 Fix building on Haiku 2023-09-28 13:59:19 +02:00
mosfet80 6a08c39e3a Update CMakeLists.txt
updated cpp-pm/hunter to last version
2023-09-25 16:46:51 +02:00
Stephen Gold 4b193dbee3 contrib/zip/src/zip.h: correct 2 spelling errors 2023-09-25 16:28:24 +02:00
Kim Kulling f9d3e7015b Update types.h
- closes https://github.com/assimp/assimp/issues/5247
2023-09-25 14:22:00 +02:00
mosfet80 f1b8df01d5 fix variable name 2023-09-25 13:37:01 +02:00
Kim Kulling c421247be9 Update utVersion.cpp 2023-09-23 18:35:48 +02:00
Kim Kulling cebb06280d Update script_x86.iss 2023-09-23 18:35:48 +02:00
Kim Kulling 967d61edc5 Update script_x64.iss 2023-09-23 18:35:48 +02:00
Kim Kulling 997d380c3a Update script_vieweronly.iss 2023-09-23 18:35:48 +02:00
Kim Kulling 13945a5c5b Update CMakeLists.txt 2023-09-23 18:35:48 +02:00
Kim Kulling e5e3e07b84 Fix copyrights. 2023-09-23 18:35:48 +02:00
Kim Kulling bad725ec86 Fix: Fix versions 2023-09-23 18:35:48 +02:00
Kim Kulling fb23ef7c02 Update: Update code version 2023-09-23 18:35:48 +02:00
Kim Kulling 0c5138cb39 Update: Set new versions 2023-09-23 18:35:48 +02:00
Kim Kulling 9d12dd6df3 Doc: Add wiki link
- closes https://github.com/assimp/assimp/issues/5240
2023-09-22 11:03:19 +02:00
Kim Kulling 7fb4b24cb5 Update googletest to 1.14.0 2023-09-19 09:01:04 +02:00
Батхишиг fa71b84c1c
ai_epsilon bug fixed in C (#5231) 2023-09-18 14:48:30 +02:00
Kim Kulling 59b1234496
Update GenVertexNormalsProcess.cpp (#5228)
- closes https://github.com/assimp/assimp/issues/5074
2023-09-14 00:37:13 +02:00
FailCake f9f7ab0658
Fix draco build path (#5222)
Co-authored-by: Kim Kulling <kimkulling@users.noreply.github.com>
2023-09-13 21:42:52 +02:00
dependabot[bot] c7307ae84d
Bump actions/checkout from 3 to 4 (#5224)
Bumps [actions/checkout](https://github.com/actions/checkout) from 3 to 4.
- [Release notes](https://github.com/actions/checkout/releases)
- [Changelog](https://github.com/actions/checkout/blob/main/CHANGELOG.md)
- [Commits](https://github.com/actions/checkout/compare/v3...v4)

---
updated-dependencies:
- dependency-name: actions/checkout
  dependency-type: direct:production
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Co-authored-by: Kim Kulling <kimkulling@users.noreply.github.com>
2023-09-12 13:28:14 +02:00
Kim Kulling c4d3c1dd67
Fix: Remove useless parameter to specify c++ lib (#5225)
- closes https://github.com/assimp/assimp/issues/5197
2023-09-11 14:41:22 +02:00
Kim Kulling 2af4247260
Fix: Fix compilation for clang 14.0.3 (#5223)
* Fix: Fix compilation for clang 14.0.3

- closes https://github.com/assimp/assimp/issues/5203

* Update mesh.h

* Update mesh.h

Fix a typo.
2023-09-11 10:51:51 +02:00
Kim Kulling aa1996e143
Mosfet80 clipper update (#5220)
* remove deprecated sprinf

* Update clipper
Updated Clipper to V6.4.2

* Fix the build

* Fix the build

* Disable hunter build

* Fix: Fix hided var.

* Fix invalid use of hunter enabled macro.

* Fix misconfig for hunter

* Disable removing contrib folder

* Update BlenderTessellator.h

* Remove Hunter-based includes

* Refactorings

* Remove final

* Update IFCCurve.cpp

* Update IFCCurve.cpp

---------

Co-authored-by: andrea <realeandrea@yahoo.it>
Co-authored-by: Kim Kulling <kim.kullingk@draeger.com>
2023-09-09 19:29:15 +02:00
Kim Kulling 3cf7d28bc4
Merge pull request #5221 from mosfet80/patch-4
Update sanitizer.yml
2023-09-07 15:58:40 +02:00
mosfet80 c3544f1f98
Update sanitizer.yml
updated actions/checkout to v4
Update default runtime to node20 by @takost in #1436
Support fetching without the --progress option by @simonbaird in #1067
Release 4.0.0 by @takost in #1447
2023-09-06 14:54:46 +02:00
Kim Kulling 0ff0bd7a6e
Merge pull request #5118 from kenichiice/dxf/negative-index
DXF: Support negative index in VERTEX
2023-09-01 15:54:39 +02:00
OGAWA KenIchi 8d8a0a5af7 DXF: Support negative index in VERTEX 2023-09-01 18:26:53 +09:00
Kim Kulling e673d1fd9e
Merge pull request #5216 from assimp/semi-desert-master
Semi desert master
2023-08-30 21:31:55 +02:00
Kim Kulling e41fe74b2a Merge branch 'master' into semi-desert-master 2023-08-30 21:17:25 +02:00
Kim Kulling 8c8f974ea3 Merge branch 'master' of https://github.com/semi-desert/assimp into semi-desert-master 2023-08-30 21:16:21 +02:00
Kim Kulling f623870dd1
Merge pull request #5170 from vulcanozz/vulcano/export_gltf2_with_roughness_texture
Add DIFFUSE_ROUGHNESS_TEXTURE for gltf2 exporter
2023-08-29 15:27:55 +02:00
Kim Kulling e79d105957
Merge branch 'master' into vulcano/export_gltf2_with_roughness_texture 2023-08-29 15:13:43 +02:00
Kim Kulling 0afaf976b9
Merge pull request #5192 from PencilAmazing/irrfix
IRR - Fix UTF-16 file parsing (and possibly more?)
2023-08-29 15:11:06 +02:00
Kim Kulling b52731c707
Merge branch 'master' into irrfix 2023-08-29 14:22:22 +02:00
Kim Kulling 97227d7a4c
Merge pull request #5193 from martinweber/collada-ignore-unit-size-property
Collada: added import property to disable unit size scaling
2023-08-29 14:15:50 +02:00
Kim Kulling cc2c5d3ae3
Merge branch 'master' into collada-ignore-unit-size-property 2023-08-29 14:01:40 +02:00
Kim Kulling 2f6f58707d
Merge pull request #5161 from malytomas/master
fix incorrect default for material::get with aiColor3D
2023-08-28 11:45:54 +02:00
Kim Kulling b9ea538e6f
Merge branch 'master' into master 2023-08-28 11:11:50 +02:00
Kim Kulling 215caa65aa
Merge branch 'master' into irrfix 2023-08-25 00:01:15 +02:00
Kim Kulling 80a03071ba
Merge pull request #5209 from sashashura/openddlparser
bump openddl-parser to v0.5.1
2023-08-25 00:00:39 +02:00
Kim Kulling fa69c47d45
Merge branch 'master' into openddlparser 2023-08-24 23:46:23 +02:00
Kim Kulling fe6730f225
Merge pull request #5212 from guguTang/xin-issue_5211
Ensure that the strength attribute is the same when importing or exporting gltf2
2023-08-24 23:45:41 +02:00
Kim Kulling 60b6d80936
Merge branch 'master' into xin-issue_5211 2023-08-24 21:03:57 +02:00
Kim Kulling c953c9b76f
Merge pull request #5213 from AnyOldName3/pdb-install-fixes
Use correct PDB paths
2023-08-24 20:35:00 +02:00
AnyOldName3 e50233b2c1 Use correct PDB paths
The previously-specified paths were only correct for a static library
build.
I therefore fenced off that code to be specific to static library
builds.

For shared library builds, I added a generator-expression-based
alternative.
Annoyingly, this won't work with static library builds, so we don't get
the concise, reliable version in all circumstances.

I've avoided modifying any of the paths anything ends up at to avoid
breaking changes.

Resolves https://github.com/assimp/assimp/issues/4269
2023-08-23 17:19:01 +01:00
tangxin 4389c3d80c The texture strength attribute in aiMaterial set when importing and exporting gltf files is inconsistent 2023-08-23 14:54:40 +08:00
zhucan d07934bf25 adjust comment 2023-08-18 01:03:49 +08:00
zhucan 554fa8f5e2 code format 2023-08-18 01:03:49 +08:00
zhucan 2b4606c082 add fallback strategy for metallicRoughnessTexture 2023-08-18 01:03:49 +08:00
朱灿 3a03fe31b1 gltf2 export diffuse roughness 2023-08-18 01:03:49 +08:00
zhucan 32716002ac Add DIFFUSE_ROUGHNESS_TEXTURE for gltf2 exporter 2023-08-18 01:03:49 +08:00
Alex 081cae6a95 Fix WIN32_LEAN_AND_MEAN redefinition 2023-08-17 13:25:30 +00:00
Alex 7cbf4c4136 Fix win build 2023-08-17 12:35:44 +00:00
Alex bc7ef58b49 bump openddl-parser to v0.5.1 2023-08-17 12:00:22 +00:00
Kim Kulling 72c10d856f
Merge pull request #5207 from sashashura/4658377717055488
Fix Invalid-free in Assimp::FBX::Scope::Scope
2023-08-17 10:27:36 +02:00
Alex 5c45cdc0ad Fix Invalid-free in Assimp::FBX::Scope::Scope 2023-08-16 07:45:23 +00:00
Kim Kulling 3a02de4d28
Merge pull request #5194 from Gargaj/floatwarn
Fix warning-as-error
2023-08-15 16:53:36 +02:00
Kim Kulling d77903423f
Merge branch 'master' into floatwarn 2023-08-15 12:55:37 +02:00
Aaron 0bfc588c39 Update Triangulate Process [more another case] 2023-08-15 18:01:16 +08:00
PencilAmazing 2e60cb6ae6
Merge branch 'master' into irrfix 2023-08-14 01:50:06 -04:00
Kim Kulling 556c89b5f1
Merge pull request #5199 from sashashura/5513536726761472
Fix UNKNOWN READ in std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<ch
2023-08-12 08:20:15 +02:00
Kim Kulling e5d9339c21
Merge branch 'master' into 5513536726761472 2023-08-12 08:05:27 +02:00
Kim Kulling 461601e9ff
Merge pull request #5174 from feuerste/fix_magic
Fix violation of strict aliasing rule in `BaseImporter::CheckMagicToken`.
2023-08-12 08:04:34 +02:00
Kim Kulling 1c5dc86afb
Merge branch 'master' into fix_magic 2023-08-12 07:39:40 +02:00
Martin Weber d8a7399a04
Merge branch 'assimp:master' into collada-ignore-unit-size-property 2023-08-10 08:10:18 +02:00
Kim Kulling df9c5cdb9f
Merge pull request #5191 from sashashura/823345681268736
Fix UNKNOWN READ in Assimp::MDLImporter::InternReadFile_Quake1
2023-08-09 21:17:15 +02:00
Kim Kulling 79dcc289d0
Merge branch 'master' into 823345681268736 2023-08-09 20:58:56 +02:00
Kim Kulling aa5b41446c
Merge pull request #5200 from paroj/master
Be more precise regarding index buffer
2023-08-09 20:09:17 +02:00
Pavel Rojtberg 20a2cc4c94
it is the importer, not the postproc 2023-08-09 02:05:44 +02:00
Pavel Rojtberg 2baadf2fe5
Be more precise regarding index buffer 2023-08-08 18:34:13 +02:00
Alex b9460dd959 Fix UNKNOWN READ in std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<ch 2023-08-08 16:01:00 +00:00
Gargaj 49ed0711d1
Fix another warning 2023-08-05 15:43:31 +02:00
Gargaj 8312b31d27
fix warning-as-error 2023-08-05 15:39:47 +02:00
Martin Weber bb1873dd22 Collada: added import property to disable unit size scaling 2023-08-04 09:54:55 +02:00
Alex f7e7f82b9d Add const 2023-08-03 17:10:17 +00:00
PencilAmazing b5032db741 Reverse accidental change with test file 2023-08-02 13:57:21 -04:00
PencilAmazing d6edfad8bb Fix non UTF-8 xml file parsing by passing buffer size manually, as per pugixml documentation 2023-08-02 13:52:40 -04:00
PencilAmazing cf5ffdc366 Merge branch 'master' of https://github.com/assimp/assimp into irrfix 2023-08-01 21:36:40 -04:00
Alex d7dc88e0d0 Fix UNKNOWN READ in Assimp::MDLImporter::InternReadFile_Quake1 2023-08-01 13:04:16 +00:00
Kim Kulling 60989a598e
Merge pull request #5175 from sfjohnston/sfjohnston_mods
Bug fix and improvement to FBX camera field-of-view during import.
2023-07-23 21:31:39 +02:00
Kim Kulling 439b3369c1
Merge branch 'master' into fix_magic 2023-07-23 21:21:29 +02:00
sfjohnston dd40b0ccee Changed #define FBX_FOV_UNKNOWN to const float kFovUnknown 2023-07-23 12:05:01 -07:00
sfjohnston 3ec8a36764
Merge branch 'assimp:master' into sfjohnston_mods 2023-07-23 08:37:47 -07:00
Kim Kulling 131bc61d47
Merge pull request #5186 from feuerste/missing_header
Add missing rapidjson headers to `glTF2Asset.inl`.
2023-07-23 13:51:01 +02:00
Kim Kulling d05dbfa8c9
Merge branch 'master' into missing_header 2023-07-23 13:29:56 +02:00
Kim Kulling 20cb815290
Merge pull request #5188 from assimp/kimkulling/remove_deprecated_swig_files
Remove deprecated swig files.
2023-07-23 13:29:43 +02:00
Kim Kulling 0ab7de70cd Remove deprecated swig files. 2023-07-23 12:49:25 +02:00
Marco Feuerstein 37a1366fb7 Add missing rapidjson headers. 2023-07-21 11:33:06 +02:00
Marco Feuerstein 52e5c3f39e Fix violation of strict aliasing rule. 2023-07-21 09:48:45 +02:00
Kim Kulling 64e0ba2625
Merge branch 'master' into sfjohnston_mods 2023-07-20 09:21:13 +00:00
Kim Kulling bf7ccb6206
Merge pull request #5182 from tellypresence/fix_malformed_irr_files
Fix malformed irr files
2023-07-18 14:29:08 +00:00
Kim Kulling a5a4090989
Merge branch 'master' into fix_malformed_irr_files 2023-07-18 12:31:44 +00:00
Kim Kulling 8c871ed4f0
Merge pull request #5183 from SirLynix/patch-2
Remove /WX from CMakeLists for MSVC
2023-07-17 17:05:16 +02:00
Jérôme Leclercq 46be2d3380
Remove /WX from CMakeLists for MSVC 2023-07-15 15:54:15 +02:00
Steve M ca7f6de671
Merge branch 'master' into fix_malformed_irr_files 2023-07-14 20:40:56 -07:00
Steve M 3161f0e754 Introduce alternate versions with animations disabled to allow sucessful load 2023-07-14 20:19:28 -07:00
Kim Kulling 5b7ff294b8
Merge pull request #5156 from feuerste/cloud_storage_version
Handle gcs cloud storage file extensions with versioning.
2023-07-14 15:07:12 +02:00
Kim Kulling 16021ef9ac
Merge branch 'master' into cloud_storage_version 2023-07-14 11:47:24 +02:00
Marco Feuerstein 0e7cd18c8b Strip aws gcs version string. 2023-07-14 09:37:48 +02:00
Kim Kulling f66a7fd6bf
Merge pull request #5176 from feuerste/gltf_specular
Fix detection of `KHR_materials_specular` on glTF2 export.
2023-07-14 09:23:12 +02:00
Steve M 1e6c7063b6 Fix typos 2023-07-13 20:28:48 -07:00
Marco Feuerstein bf38d67935 Fix detection of KHR_materials_specular. 2023-07-13 11:51:56 +02:00
Kim Kulling cf7d363766
Merge pull request #5159 from mosfet80/patch-4
Update run-cmake into sanitizer.yml
2023-07-11 15:45:55 +02:00
Kim Kulling 11f024b395
Merge branch 'master' into patch-4 2023-07-11 10:19:38 +02:00
Kim Kulling 53846430ce
Merge pull request #5157 from feuerste/file_extension
Unify extension check for importers.
2023-07-11 10:18:49 +02:00
sfjohnston c7afea3cd7
Merge branch 'assimp:master' into sfjohnston_mods 2023-07-10 07:58:21 -07:00
Kim Kulling e2b19ef776
Merge branch 'master' into file_extension 2023-07-10 11:19:27 +02:00
Kim Kulling fe49a9ed94
Merge pull request #5155 from feuerste/alpha_graph
Extend token search flag from alpha to graph.
2023-07-10 11:17:16 +02:00
Marco Feuerstein 87cac888e4 More simplifications. 2023-07-08 12:58:11 +02:00
Marco Feuerstein bdde968677 Address reviewer comment. 2023-07-08 12:58:11 +02:00
Marco Feuerstein 506baa21e6 Unify extension check for importers.
This enables proper checking for all kinds of extensions (including the
ones with multiple dots) for all importers and internal usage.
2023-07-08 12:58:11 +02:00
Marco Feuerstein 0256047168 Extend token search flag from alpha to graph.
This way we can fix Blender exported files being wrongly detected as
obj files.
2023-07-08 12:57:45 +02:00
Kim Kulling 3423949490
Merge branch 'master' into master 2023-07-08 12:37:42 +02:00
Kim Kulling e08cb0b5b8
Merge pull request #5172 from feuerste/missing_header
Add missing header.
2023-07-08 12:36:52 +02:00
PencilAmazing 668db327f4 Fix misplaced quote 2023-07-07 13:27:45 -04:00
Marco Feuerstein 8b005eaa83 Add missing header. 2023-07-07 14:28:05 +02:00
Kim Kulling 6308de6e5b
Merge pull request #5154 from feuerste/gltf_binary
Improve binary check for gltf and gltf2.
2023-07-05 21:29:38 +02:00
Kim Kulling 90ff723b6c
Merge branch 'master' into gltf_binary 2023-07-03 21:31:28 +02:00
Kim Kulling 9a94b26cdc
Merge pull request #5168 from sashashura/4879958521806848
Fix UNKNOWN READ in Assimp::SMDImporter::ParseNodeInfo
2023-07-03 21:08:11 +02:00
Kim Kulling ed903543a7
Merge branch 'master' into 4879958521806848 2023-07-03 19:50:38 +02:00
Kim Kulling d3ee157342
Merge pull request #5166 from PencilAmazing/irrfix
Fix IRR and IRRMESH importers
2023-07-03 11:36:52 +02:00
Kim Kulling a5bb4b59e4
Merge branch 'master' into irrfix 2023-07-03 11:19:53 +02:00
Alex 093e35dd54 Fix eternal loop 2023-07-03 09:12:00 +00:00
Alex edb8375702 Fix integer overflow 2023-07-03 09:11:38 +00:00
Kim Kulling 0dcfe2f72c
Merge pull request #5167 from assimp/kimkulling/add_missing_licence_issue-5144
Create licence.md
2023-07-03 10:04:34 +02:00
Kim Kulling d1ad4e54d7
Create licence.md
- closes https://github.com/assimp/assimp/issues/5144
2023-07-03 08:26:50 +02:00
Kim Kulling 5770faac10
Merge pull request #5162 from feuerste/py_available_formats
[pyassimp] Replace static list of file extensions with the actually supported ones.
2023-07-02 21:26:07 +02:00
PencilAmazing f1561f03ce
Merge branch 'master' into irrfix 2023-07-02 15:10:04 -04:00
PencilAmazing 57306bcd63 Make unit test more useful in case importer breaks again 2023-07-02 14:55:25 -04:00
PencilAmazing 96eb87265e Apply clang-format to unit test 2023-07-02 14:35:22 -04:00
PencilAmazing 0bacc7134d Remove debugging code, clean up some notes 2023-07-02 14:32:17 -04:00
PencilAmazing 19da9cc84d Port mesh loading to pugixml. Untested. 2023-07-02 14:32:12 -04:00
dog 3e1fd74940 Fix up scene loading. pugixml is a breadth-first parser while irrxml is
a depth first. This only parses scene structure, no mesh loading yet.
2023-07-02 14:30:54 -04:00
Kim Kulling 7d542eb795
Merge branch 'master' into py_available_formats 2023-07-02 20:26:16 +02:00
PencilAmazing 537b445a59 Apply clang-format to files 2023-07-02 14:17:52 -04:00
Alex 6f3bfb5b60 Fix memory leak 2023-07-02 14:12:49 -04:00
Alex 3838a8aaf8 Fix unknown write in Assimp::ObjFileMtlImporter::getFloatValue 2023-07-02 14:12:49 -04:00
Kim Kulling e4cac7d00b
Merge pull request #5153 from feuerste/blender_can_read
Unify way to check readable blender files.
2023-07-01 13:14:55 +02:00
Kim Kulling 8a65dcc19e
Merge branch 'master' into blender_can_read 2023-07-01 12:54:45 +02:00
Kim Kulling 3e74453b69
Merge branch 'master' into gltf_binary 2023-06-30 11:16:08 +02:00
Kim Kulling 42386b829c
Merge pull request #5164 from feuerste/py_read_from_memory
[pyassimp] Fix passing of file extension string.
2023-06-30 00:55:27 +02:00
Kim Kulling b44dfd5ecf
Merge branch 'master' into py_read_from_memory 2023-06-29 21:08:25 +02:00
Kim Kulling b61fc49c30
Merge pull request #5163 from thegeeko/fix-gcc-13
Fix: disabled dangling-reference warning in gcc13
2023-06-29 21:07:27 +02:00
Marco Feuerstein 82d3f47432 Unify way to check readable blender files. 2023-06-29 15:10:28 +02:00
Marco Feuerstein b2cad5c58d Use file system encoding. 2023-06-29 14:56:11 +02:00
Marco Feuerstein d1edaa949b Fix passing of file extension string.
Previously only the first letter of the string was passed to c, now it passes the whole extension.
2023-06-29 14:51:16 +02:00
Abdelhadi ac2cf2f71b Fix: disabled dangling-reference warning in gcc13 2023-06-29 10:02:39 +03:00
Marco Feuerstein 59f2620164 Remove unneeded check for empty extension. 2023-06-29 08:21:09 +02:00
Marco Feuerstein 261c7769b8 Replace static list of supported file extensions with the actually supported ones. 2023-06-29 08:21:08 +02:00
Marco Feuerstein 2875de132f Fix compilation on windows. 2023-06-29 08:20:51 +02:00
Marco Feuerstein 17fac97b04 Fix magic token usage. 2023-06-29 08:20:51 +02:00
Marco Feuerstein 1c0f3c5f87 Fix string length calculation. 2023-06-29 08:20:50 +02:00
Marco Feuerstein a2bdfdd05a Improve binary check for gltf and gltf2.
By checking the magic token we don't depend on the extension any more
and follow the official way to detect a gltf file as binary, see also
https://github.com/KhronosGroup/glTF/blob/main/extensions/1.0/Khronos/KHR_binary_glTF/README.md#header
and https://registry.khronos.org/glTF/specs/2.0/glTF-2.0.html#binary-header.
2023-06-29 08:20:50 +02:00
Kim Kulling 03934128fc
Merge pull request #5149 from mosfet80/UpdatePugiXml
show correct pugixml version
2023-06-28 16:31:48 +02:00
Kim Kulling 7ae88225b3
Merge branch 'master' into UpdatePugiXml 2023-06-28 16:04:49 +02:00
Kim Kulling 5a568d485c
Merge pull request #5147 from mosfet80/UpdateZli
switch to zlib 1.2.13
2023-06-28 16:02:25 +02:00
Kim Kulling 507a3d2f8d
Merge branch 'master' into UpdateZli 2023-06-28 13:06:59 +02:00
Kim Kulling 876b1a0d6e
Merge pull request #5151 from severin-lemaignan/master
[pyassimp] bumped pyassimp version to 5.2.5
2023-06-28 11:40:49 +02:00
Kim Kulling c9111fe89a
Merge branch 'master' into master 2023-06-28 11:24:58 +02:00
Kim Kulling e7a0985886
Merge pull request #5148 from mosfet80/UpdateUtf8cpp
update utf8 from 2.3.4 to 3.2.3
2023-06-28 11:24:16 +02:00
Kim Kulling f55eebad06
Merge branch 'master' into UpdateUtf8cpp 2023-06-27 22:09:20 +02:00
Kim Kulling 8f61427880
Merge pull request #5128 from sashashura/5093294573486080
Fix UNKNOWN READ in Assimp::MDLImporter::ParseSkinLump_3DGS_MDL7
2023-06-27 22:08:29 +02:00
Kim Kulling 1ec3dbd11a
Merge branch 'master' into 5093294573486080 2023-06-27 17:04:58 +02:00
Kim Kulling 1791eac7ff
Merge pull request #5140 from emaame/SupportOBJSpecifiedOnlyAPartOfVertexColors
Fix Objimported supports OBJ partially specified vertex colors
2023-06-27 16:53:46 +02:00
mosfet80 3da92e05eb
Merge branch 'assimp:master' into UpdateUtf8cpp 2023-06-27 16:27:25 +02:00
Kim Kulling f24224fdc5
Merge branch 'master' into SupportOBJSpecifiedOnlyAPartOfVertexColors 2023-06-27 13:44:31 +02:00
Kim Kulling d2411a7ecd
Merge pull request #5127 from sashashura/5921493454815232
Fix Bad-cast to Assimp::D3DS::Material from invalid vptr in Assimp::ASE::Parser::ParseLV2MaterialBlock
2023-06-27 13:43:03 +02:00
Tomas Maly 5d3f3281f4 fix incorrect default for material::get with aiColor3D 2023-06-27 12:40:27 +02:00
Kim Kulling db6c1a8b1c
Merge branch 'master' into 5921493454815232 2023-06-27 11:03:50 +02:00
Kim Kulling 8937248f7c
Merge pull request #5126 from sashashura/5143879191494656
Fix UNKNOWN WRITE in std::__1::list<Assimp::LWO::Envelope, std::__1::allocator<Assimp::LWO::Envelope>
2023-06-27 11:02:07 +02:00
Kim Kulling ef6bf03acd
Merge branch 'master' into 5143879191494656 2023-06-27 10:23:36 +02:00
Kim Kulling 27c4de3419
Merge pull request #5122 from sashashura/5407417422970880
Fix Heap-buffer-overflow READ in Assimp::MD5::MD5Parser::ParseSection
2023-06-27 10:22:46 +02:00
Kim Kulling 141e278e1f
Merge branch 'master' into 5407417422970880 2023-06-27 10:07:21 +02:00
Kim Kulling 41e2b0f5dc
Merge pull request #5121 from sashashura/6521292621217792
Fix Memcpy-param-overlap in unzReadCurrentFile
2023-06-26 23:51:36 +02:00
Kim Kulling 1830a8aad2
Fix; fix old declaration style
- fix compiler warning.
2023-06-26 23:36:20 +02:00
Kim Kulling 47575f759f
Update unzip.c
- Fix compiler warnings
2023-06-26 16:08:12 +02:00
Kim Kulling ff36ea7e23
Merge branch 'master' into 6521292621217792 2023-06-26 09:17:40 +02:00
Kim Kulling bce2fdbbe9
Merge pull request #5119 from sashashura/4508318827937792
Fix unknown write in Assimp::ObjFileMtlImporter::getFloatValue
2023-06-26 09:02:39 +02:00
Kim Kulling b1181b1086
Merge branch 'master' into 4508318827937792 2023-06-25 21:20:02 +02:00
Kim Kulling 96d0c0769e
Merge pull request #5120 from sashashura/6520123362508800
Fix Stack-buffer-overflow READ in aiMaterial::AddBinaryProperty
2023-06-25 21:19:19 +02:00
Kim Kulling 7005a9caa2
Merge branch 'master' into 6520123362508800 2023-06-25 21:07:34 +02:00
Kim Kulling ed0dff2a7e
Merge pull request #5117 from sashashura/6091762766839808
Fix Heap-buffer-overflow READ in Assimp::FileSystemFilter::Cleanup
2023-06-25 21:03:23 +02:00
Kim Kulling 6b1a2e91d5
Merge branch 'master' into 6091762766839808 2023-06-25 20:08:45 +02:00
Kim Kulling 4a658202ca
Merge pull request #5113 from sashashura/6020769077657600
Fix UNKNOWN READ crash in UpdateMeshReferences
2023-06-25 20:06:47 +02:00
Kim Kulling 438f9fe568
Merge branch 'master' into 6020769077657600 2023-06-25 18:11:54 +02:00
Kim Kulling 1477f696e0
Merge pull request #5111 from sashashura/5781186265350144
Fix Heap-buffer-overflow READ in Assimp::ObjFileParser::getFace
2023-06-25 18:11:25 +02:00
Kim Kulling 3545aab937
Merge branch 'master' into 5781186265350144 2023-06-25 17:51:01 +02:00
mosfet80 46ea0a7d7c
Update sanitizer.yml 2023-06-22 21:43:52 +02:00
mosfet80 26c4505c53
Update run-cmake into sanitizer.yml 2023-06-22 21:41:26 +02:00
Séverin Lemaignan a4258929ce [pyassimp] bumped pyassimp version to 5.2.5 2023-06-20 22:33:16 +02:00
Andrea Reale 86c332fec7 show correct pugixml version 2023-06-20 11:52:12 +02:00
Andrea Reale 8a3ec3ca2f updateunzip 2023-06-20 11:40:38 +02:00
Andrea Reale ce59d49dd9 update upf8 from 2.3.4 to 3.2.3
New convenience API for C++ 11 and later compilers. The library still works with C++ 98/03 compliant compilers, just without the new functions.
advance() function works in both directions.
The following deprecated functions were removed:

previous() - deprecated since version 1.02.
is_bom() - deprecated since version 2.3.
Fix of the project version number at CMakeLists.txt
Continuous Integration with Google Tests and CircleCI
A minor release that contains fix for Issue #31 Program fails to link when including utf8.h in multiple files.
This release adds one new API call: unchecked::replace_invalid().
Optional support for C++ 17 std::string_view.
The release contains the fix the inclusion of both cpp11 and cpp17 headers on C++17 compilation. Also some additional tests for using string literals and string objects with modern compilers.
2023-06-20 11:23:28 +02:00
Andrea Reale 8741da2036 switch to zlib 1.2.13
Fix a bug when getting a gzip header extra field with inflateGetHeader(). This remedies CVE-2022-37434.
Fix a bug in block type selection when Z_FIXED used. Now the smallest block type is selected, for better compression.
Fix a configure issue that discarded the provided CC definition.
Correct incorrect inputs provided to the CRC functions. This mitigates a bug in Java.
Repair prototypes and exporting of the new CRC functions.
Fix inflateBack to detect invalid input with distances too far.
Fix a deflate bug when using the Z_FIXED strategy that can result in out-of-bound accesses.
Fix a deflate bug when the window is full in deflate_stored().
Speed up CRC-32 computations by a factor of 1.5 to 3.
Use the hardware CRC-32 instruction on ARMv8 processors.
Speed up crc32_combine() with powers of x tables.
Add crc32_combine_gen() and crc32_combine_op() for fast combines.
2023-06-20 11:12:47 +02:00
Kim Kulling bd65af0d44
Merge branch 'master' into SupportOBJSpecifiedOnlyAPartOfVertexColors 2023-06-20 09:38:53 +02:00
Kim Kulling b94392d199
Merge pull request #5146 from assimp/kimkulling/dxf_handling_for_invisible_faces_issue-2036
Add handling for negative indices.
2023-06-20 09:15:25 +02:00
Kim Kulling 63e1b071df Remove deprecated switch to disable warning. 2023-06-19 23:50:32 +02:00
Kim Kulling 6502b97d3e Fix: Put unused var into comments to later use. 2023-06-19 23:38:57 +02:00
Kim Kulling 3d19cd9362 Fix: Put unused var into comments to later use. 2023-06-19 23:35:50 +02:00
Kim Kulling 9c9d72169f Fix: Put unused var into comments to later use. 2023-06-19 23:34:14 +02:00
Kim Kulling 7f0c388ad8 Fix: Put unused var into comments to later use. 2023-06-19 23:27:32 +02:00
Kim Kulling 10059e6431 Add handling for negative indices. 2023-06-19 23:21:35 +02:00
emaame 22c8d97b54 Support OBJ specified only a part of vertex colors
The omitted vertex colors are treated as (0, 0, 0, 1).

e.g

v  0.0  0.0  0.0
v  0.0  0.0  1.0  0.0  0.0  0.0
v  0.0  1.0  0.0
v  1.0  0.0  0.0  1.0  0.6  0.3
v  1.0  1.0  0.0
2023-06-17 16:31:04 +09:00
Scott Johnston aab3c8010c Correct from full FOV to assimp half-fov in camera. Compute from filmWidth and focalLength if FOV not specified. 2023-06-15 12:16:06 -07:00
Kim Kulling 9c54540a19
Merge pull request #5130 from mosfet80/patch-2
Delete old unused patch
2023-06-15 11:39:12 +02:00
Kim Kulling 693d681813
Merge branch 'master' into patch-2 2023-06-15 10:40:05 +02:00
Kim Kulling 3939d35f18
Merge pull request #5138 from sashashura/4709035804065792
Fix UNKNOWN WRITE in Assimp::SortByPTypeProcess::Execute
2023-06-15 10:39:17 +02:00
Alex 36dfa3bed3 Fix UNKNOWN WRITE in Assimp::SortByPTypeProcess::Execute 2023-06-14 15:50:50 +00:00
Alex b158b716d1 Fix Memcpy-param-overlap in unzReadCurrentFile: bump zlib to 1.2.13 2023-06-14 07:41:41 +02:00
Alex 9ef71fe231
Merge branch 'master' into 5781186265350144 2023-06-14 07:40:47 +02:00
Alex 5bb1c6debd Fix UNKNOWN READ crash in UpdateMeshReferences 2023-06-14 07:40:36 +02:00
Alex b3a1c72c8f Fix Heap-buffer-overflow READ in Assimp::FileSystemFilter::Cleanup 2023-06-14 07:40:28 +02:00
Alex 646d3591b6 Fix memory leak 2023-06-14 07:40:21 +02:00
Alex 496a4bf156 Fix unknown write in Assimp::ObjFileMtlImporter::getFloatValue 2023-06-14 07:40:21 +02:00
Alex 8012657169 Fix Heap-buffer-overflow READ in Assimp::MD5::MD5Parser::ParseSection 2023-06-14 07:38:57 +02:00
Alex dbd15fd351 Fix UNKNOWN WRITE in std::__1::list<Assimp::LWO::Envelope, std::__1::allocator<Assimp::LWO::Envelope> 2023-06-14 07:38:47 +02:00
Alex 86aecf395e Fix Bad-cast to Assimp::D3DS::Material from invalid vptr in Assimp::ASE::Parser::ParseLV2MaterialBlock 2023-06-14 07:38:38 +02:00
Alex c6c95b69f6 Use SizeCheck 2023-06-14 07:38:02 +02:00
Alex 54b0c00418 Fix UNKNOWN READ in Assimp::MDLImporter::ParseSkinLump_3DGS_MDL7 2023-06-14 07:38:02 +02:00
Alex f897b0c461
Merge branch 'master' into 6520123362508800 2023-06-13 22:06:08 +02:00
Kim Kulling 4180b1fd08
Merge pull request #5134 from sashashura/memleak
Fix memory leak
2023-06-13 20:18:37 +02:00
Kim Kulling 3ccf242bdb
Merge branch 'master' into memleak 2023-06-13 19:46:56 +02:00
Kim Kulling feb0303fd0
Merge pull request #5090 from FlorianBorn71/FixSkinnedWeightsAfterVertexRemappingOptimization
Skinning weights in gltf were broken by PR#5003 (vertex remapping)
2023-06-09 00:23:08 +02:00
Kim Kulling bef66deeda
Update glTF2Importer.h 2023-06-08 20:56:14 +02:00
Kim Kulling 1ab4161cd7
Update glTF2Importer.cpp 2023-06-08 20:55:48 +02:00
Kim Kulling 186d7fd606
Merge branch 'master' into FixSkinnedWeightsAfterVertexRemappingOptimization 2023-06-08 13:16:08 +02:00
Kim Kulling 9950bb4ed6
Merge pull request #5110 from sashashura/4890437695700992
Fix Heap-buffer-overflow READ in Assimp::MD5::MD5MeshParser::MD5MeshParser
2023-06-08 13:15:35 +02:00
Kim Kulling 11dede8fc4
Merge branch 'master' into 4890437695700992 2023-06-08 13:02:15 +02:00
Kim Kulling d5844f26b5
Merge pull request #5103 from mosfet80/patch-1
Update cpp-pm / hunter
2023-06-08 13:01:35 +02:00
Kim Kulling 839bed3274
Merge branch 'master' into patch-1 2023-06-07 18:38:57 +02:00
Alex 4c16a6a16b Fix memory leak 2023-06-07 07:02:50 +00:00
Kim Kulling 49a6eec294
Merge pull request #5133 from Biohazard90/Fix-removeEmptyBones-cannot-be-disabled
Fixed missing config property lookup for removal of empty bones.
2023-06-07 08:19:23 +02:00
Kristjan Skutta cb86029153 Fixed missing config property lookup for removal of empty bones. 2023-06-06 14:30:35 +02:00
Kim Kulling d9268dcf96
Merge branch 'master' into patch-1 2023-06-05 18:36:35 +02:00
Kim Kulling 02d5ab294c
Merge pull request #5129 from sashashura/4875566380220416
Fix UNKNOWN READ in aiTexture::~aiTexture
2023-06-05 18:35:56 +02:00
Alex f5683b6f3a
Update MDLMaterialLoader.cpp
Add parentheses
2023-06-05 14:27:21 +02:00
mosfet80 05ab5c2e3b
Delete old unused patch
Remove old file poly2tri_patch.txt
2023-06-04 22:49:12 +02:00
Kim Kulling 513e62e1c9
Merge branch 'master' into 4875566380220416 2023-06-04 20:42:37 +02:00
Alex 23f9990b22 Fix UNKNOWN READ in aiTexture::~aiTexture 2023-06-04 07:50:00 +00:00
Kim Kulling 915e146307
Merge pull request #5125 from mosfet80/updatePugiXML
Update pugiXML library
2023-06-03 21:26:13 +02:00
Alex 5cc4a61d66 Fix Heap-buffer-overflow READ in Assimp::MD5::MD5MeshParser::MD5MeshParser 2023-06-03 16:30:50 +02:00
Alex 6c5fe9d76f Add missing include 2023-06-03 16:28:55 +02:00
Alex 57a55aa4d4 Fix memory leaks 2023-06-03 16:28:55 +02:00
Alex f4d3b6e862 Fix Stack-buffer-overflow READ in aiMaterial::AddBinaryProperty 2023-06-03 16:28:55 +02:00
mosfet80 62cefd5b27 Update pugiXML library
Release highlights:

xml_attribute::set_value, xml_node::set_value and xml_text::set now have overloads that accept pointer to non-null-terminated string and size
Fix error handling in xml_document::save_file that could result in the function succeeding while running out of disk space
Fix memory leak during error handling of some out-of-memory conditions during xml_document::load
2023-06-03 11:16:39 +02:00
Alex d3506c24e7
Update ObjFileParser.cpp 2023-06-02 18:57:53 +02:00
Kim Kulling e30823fb1d
Merge branch 'master' into 5781186265350144 2023-06-01 16:40:46 +02:00
Kim Kulling b6c0fdd6e0
Merge branch 'master' into patch-1 2023-06-01 00:12:26 +02:00
Kim Kulling d9a8837a5b
Merge pull request #5112 from sashashura/6337324114116608
Fix Heap-buffer-overflow WRITE in Assimp::ObjFileImporter::createVertexArray
2023-05-31 23:31:38 +02:00
Kim Kulling 628dde4a91
Merge branch 'master' into 6337324114116608 2023-05-31 21:30:47 +02:00
Kim Kulling c22ddfda2b
Merge pull request #5114 from assimp/kimkulling/update_docker_image
Update_ Use latest ubuntu image and switch to ninja
2023-05-31 21:24:16 +02:00
Kim Kulling 1538669f70 Update_ Use latest ubuntu image and switch to ninja 2023-05-31 20:45:51 +02:00
Alex 4cc70cb73c Optimize 2023-05-31 14:10:57 +00:00
Alex 54f5d01190 Fix Heap-buffer-overflow WRITE in Assimp::ObjFileImporter::createVertexArray 2023-05-31 11:37:15 +00:00
Alex c3e69b5b82 Fix Heap-buffer-overflow READ in Assimp::ObjFileParser::getFace 2023-05-31 08:01:41 +00:00
mosfet80 462755e5ba
Update CMakeLists.txt
fix sha1
2023-05-30 16:26:30 +02:00
mosfet80 1f5c7da822
Update CMakeLists.txt 2023-05-30 16:23:57 +02:00
Kim Kulling bee751b5f9
Merge pull request #5109 from assimp/C-Tech-Development-Corp-gltf2_metadata_export
C tech development corp gltf2 metadata export
2023-05-30 11:38:02 +02:00
Kim Kulling 466f6960ac Merge branch 'gltf2_metadata_export' of https://github.com/C-Tech-Development-Corp/assimp into C-Tech-Development-Corp-gltf2_metadata_export 2023-05-30 08:14:49 +02:00
Kim Kulling 17c1a9125f
Merge branch 'master' into FixSkinnedWeightsAfterVertexRemappingOptimization 2023-05-24 23:36:59 +02:00
Kim Kulling 0b53243b8f
Merge pull request #5083 from Jackie9527/msvc-clang-unused-function
Fix warning related to unused-function.
2023-05-24 23:36:01 +02:00
Kim Kulling f43cfa1fba
Merge branch 'master' into msvc-clang-unused-function 2023-05-24 23:23:40 +02:00
Kim Kulling 0f4667fce4
Merge pull request #5082 from skogler/fix-pbrt-exporter
Fix pbrt exporter coordinate system and FoV
2023-05-24 23:23:00 +02:00
Kim Kulling ca848c5b09
Merge branch 'master' into fix-pbrt-exporter 2023-05-24 22:28:32 +02:00
Kim Kulling 0794b41d55
Merge pull request #5087 from mwestphal/master
Fix librt link
2023-05-24 22:25:34 +02:00
Kim Kulling d73595b85d
Merge branch 'master' into master 2023-05-24 21:35:26 +02:00
mosfet80 e4621a3142
Update cpp-pm / hunter
Fix a lot of CVE vulnerabilities

Update abseil to LTFS 20220623.1 by @butteredmonkey in #656
Fix Hunter on Windows MSVC CMAKE_VS_PLATFORM_TOOLSET_HOST_ARCHITECTURE 'ARM64EC' by @ccmvn in #659
openssl: update openssl to the latest 1.1.1t by @res0nance in #660
ceres-solver: per default disable CUDA support by @NeroBurner in #665
update range-v3 to version 0.12.0 by @alex-tdrn in #670
Update 'pybind11' to 2.10.4 by @hjmallon in #667
cli11: update cli11 to 2.3.2 by @res0nance in #669
openssl: update to v3 as 1.1.1 is almost eol by @res0nance in #668
Fix Hunter on Windows MSVC CMAKE_VS_PLATFORM_TOOLSET_HOST_ARCHITECTURE 'ARM64' by @ccmvn in #655
Boost: Fix building b2 (+ headers) on Apple tvOS with Xcode generator by @hjmallon in #647
assimp: add version 5.2.5 by @NovaSurfer in #640
SuiteSparse: update to v1.6.1 (SuiteSparse v5.4.0), with METIS and OpenBLAS by @NeroBurner in #642
OpenSSL: replace HUNTER_UWP_PLATFORM with CMAKE_SYSTEM_NAME check by @Dargun in #635
asio-grpc: Add version 2.3.0 by @Tradias in #636
Update OpenBLAS to v0.3.21 and add new BUILD_WITHOUT_LAPACK flag by @NeroBurner in #638
OpenBLAS: starting with 0.3.21 build with LAPACK support per default by @NeroBurner in #639
Update 'date' to v3.0.1 by @hjmallon in #615
Update 'SDL_net' package to v2.2.0-p0 by @drodin in #616
Update 'Jpeg' package to v9e-p0 by @drodin in #618
Update 'GTest' package to v1.12.1 by @drodin in #620
Update 'lcms' package to v2.13.1-p0 by @drodin in #621
Update 'giflib' package to v5.2.1-p0 by @drodin in #622
Update package 'WebP' to v1.2.4-p0 by @drodin in #623
Update 'Boost' to 1.80.0 by @tnixeu in #627
Update asio-grpc to 2.2.0 by @Tradias in #629
Update ZLIB to v1.2.13-p0 by @NeroBurner in #628
Add support for iOS simulator only builds by @hjmallon in #610
aws-sdk-cpp: Fix linking OpenSSL Crypto on Linux by @hjmallon in #630 and #631
OpenSSL: Fix build on universal windows platforms, add UWP job to global build matrix by @Dargun in #626
Update asio-grpc to v2.1.0 by @Tradias in #607
Update 'harfbuzz' package to v2.9.1-p0 by @drodin in #608
Update RocksDB to 7.5.3 by @twoentartian in #611
Fix CMAKE_IOS_INSTALL_COMBINED on Xcode 12+ by @hjmallon in #609
CI: Boost: update matrix.json to match general workflow by @NeroBurner in #612
Boost: update to v1.79.0 by @NeroBurner in #599
2023-05-24 17:29:29 +02:00
Samuel Kogler 0fbd2f5894
Merge branch 'master' into fix-pbrt-exporter 2023-05-24 15:24:46 +02:00
Kim Kulling 9f593d70b5
Merge pull request #4786 from Beilinson/refactor/KHR_material_specular
Removed KHR_materials_pbrSpecularGlossiness, added KHR_materials_specular
2023-05-23 12:44:47 +02:00
Kim Kulling b7a8c4ba75
Update glTF2Asset.inl 2023-05-23 10:33:14 +02:00
Kim Kulling 3a09fd0c85
Fix review finding
Test with glossiness disabled and enabled.
2023-05-23 09:50:20 +02:00
Kim Kulling e947471549
Merge branch 'master' into refactor/KHR_material_specular 2023-05-22 09:49:01 +02:00
Kim Kulling 0e06a5f945
Merge pull request #4806 from naota29/master
Updated DirectX Loader to assign appropriate material index in ConvertMaterials Function
2023-05-22 09:48:26 +02:00
Kim Kulling 03163a1dda
Merge branch 'master' into master 2023-05-21 18:26:56 +02:00
Kim Kulling 7e16d4046e
Merge branch 'master' into FixSkinnedWeightsAfterVertexRemappingOptimization 2023-05-21 18:14:29 +02:00
Kim Kulling 0dfd491d97
Merge pull request #5099 from assimp/kimkulling/ase_remove_commented_code
Update ASELoader.cpp
2023-05-20 14:39:40 +02:00
Kim Kulling 9c45f727e3
Update ASELoader.cpp 2023-05-20 14:27:57 +02:00
Kim Kulling 18b6cffe14
Merge pull request #5096 from assimp/FlorianBorn71-SmallAllocationFixInFBXLoader
Florian born71 small allocation fix in fbx loader
2023-05-16 11:00:34 +02:00
Kim Kulling 94905d445f
Revert usage of unique_ptr - error. 2023-05-15 16:06:02 +02:00
Kim Kulling 71a4977dd1
Fix: Try unique_ptr 2023-05-15 15:46:21 +02:00
Kim Kulling 8ad4bb0b2c
Update StackAllocator.inl 2023-05-15 15:09:54 +02:00
Kim Kulling b5b6400320
Fix: Use vector. 2023-05-15 15:08:52 +02:00
Kim Kulling aed43878ef
Merge branch 'master' into FlorianBorn71-SmallAllocationFixInFBXLoader 2023-05-15 14:28:46 +02:00
Kim Kulling ad399adf4b
Add missing include 2023-05-15 13:19:02 +02:00
Kim Kulling 121f09b62a Fix: Fix the build. 2023-05-15 11:02:58 +02:00
Kim Kulling 0c4d5909f8
Merge pull request #5095 from assimp/kimkulling/enable_export_for_fuzzing
Update: Enable export for fuzzer tests
2023-05-15 09:43:48 +02:00
Kim Kulling e627f691a8 Merge branch 'SmallAllocationFixInFBXLoader' of https://github.com/FlorianBorn71/assimp into FlorianBorn71-SmallAllocationFixInFBXLoader 2023-05-15 09:30:57 +02:00
Kim Kulling f3e5a4835d
Merge branch 'master' into kimkulling/enable_export_for_fuzzing 2023-05-15 09:25:56 +02:00
Kim Kulling 478ce8af5a
Update Exporter.cpp 2023-05-15 09:25:44 +02:00
Kim Kulling 9d6b32f5c5 Update: Enable export for fuzzer tests 2023-05-15 09:18:30 +02:00
Kim Kulling 41102eeda6
Merge pull request #5092 from luho383/scene_combiner_copy_metadata_fix
Fix: Copy aiMetadata in SceneCombiner
2023-05-13 12:11:25 +02:00
Lutz Hören 9ea37b5330 copy aiMetadata objects in scene combiner 2023-05-11 08:00:25 +02:00
Kim Kulling ade4514752
Merge branch 'master' into fix-pbrt-exporter 2023-05-10 21:55:00 +02:00
Florian Born d825eb7cf0 Skinning weights i gltf were broken by PR#5003 (vertex remapping) 2023-05-08 20:04:38 +02:00
Mathieu Westphal 69145c8929 Fix librt link 2023-05-05 08:47:14 +02:00
Kim Kulling cb22d531a6
Merge pull request #5086 from assimp/kimkulling/refactoring_geoutils
Kimkulling/refactoring geoutils
2023-05-05 00:08:35 +02:00
Kim Kulling 8cbfb44e9c
Remove dead code 2023-05-04 21:10:51 +02:00
Kim Kulling 1243325f10
Merge branch 'master' into kimkulling/refactoring_geoutils 2023-05-04 21:10:00 +02:00
Kim Kulling 75d024c91b Reafctoring: Add GeoUtils usage 2023-05-04 20:57:20 +02:00
Kim Kulling 167d811ff7 Doc: Add missing doc to GeometryUtils. 2023-05-04 00:04:56 +02:00
Kim Kulling d58201a579 Refactoring: Reuse code from GeometryUtils 2023-05-04 00:00:52 +02:00
Jackie9527 fbf8799cb5 Fix warning related to unused-function.
Signed-off-by: Jackie9527 <80555200+Jackie9527@users.noreply.github.com>
2023-05-03 23:02:38 +08:00
Samuel Kogler 55cb19f924 Fix PBRT exporter coordinate system
Was just mirroring the x axis. This uses aiProcess_ConvertToLeftHanded and
rotates the root node to match PBRT.

The problem is apparent when using an environment map texture.
2023-05-03 16:52:33 +02:00
Samuel Kogler f32c21e6b3 Fix PBRT exporter FoV aspect ratio calculation 2023-05-03 16:46:54 +02:00
Kim Kulling b8877798ed
Merge pull request #5078 from showintime/patch-1
fix unreachable code
2023-05-03 11:35:18 +02:00
Kim Kulling c50b87fa6c
Merge branch 'master' into patch-1 2023-05-03 11:19:28 +02:00
Kim Kulling 92aa22e902
Merge pull request #5075 from Jackie9527/msvc-clang-build-fix
Fix build warnings.
2023-05-03 11:13:38 +02:00
ParkBook a923d1f89b
fix unreachable code
fix unreachable code
2023-05-01 00:38:16 +08:00
Jackie9527 92d426de2b Remove unused -Wno-missing-noreturn.
Signed-off-by: Jackie9527 <80555200+Jackie9527@users.noreply.github.com>
2023-04-29 01:05:25 +08:00
Jackie9527 51494e1b4f Remove unused -Wno-deprecated-copy-with-user-provided-dtor.
Signed-off-by: Jackie9527 <80555200+Jackie9527@users.noreply.github.com>
2023-04-29 00:55:13 +08:00
Jackie9527 cdefc9f7aa Remove unused -Wno-deprecated-copy-with-dtor.
Signed-off-by: Jackie9527 <80555200+Jackie9527@users.noreply.github.com>
2023-04-29 00:43:40 +08:00
Jackie9527 cabf3a5d17 Fix warning related to unreachable-code-return.
Signed-off-by: Jackie9527 <80555200+Jackie9527@users.noreply.github.com>
2023-04-29 00:30:21 +08:00
Jackie9527 a8e7c23605 Fix warning related to unreachable-code.
Signed-off-by: Jackie9527 <80555200+Jackie9527@users.noreply.github.com>
2023-04-29 00:29:33 +08:00
Kim Kulling 5c5b0f97b7
Merge pull request #5073 from sutajo/fix_double_precision_build
Add missing cast
2023-04-28 14:33:01 +02:00
Suhajda Tamás 71043ec164 Add missing cast 2023-04-28 11:44:29 +02:00
Kim Kulling cea40f293a
Merge pull request #5070 from Jackie9527/msvc-clang-missing-variable-declarations
Fix warning related to missing-variable-declarations.
2023-04-26 11:29:49 +02:00
Kim Kulling 230bee2e34
Merge branch 'master' into msvc-clang-missing-variable-declarations 2023-04-26 11:15:32 +02:00
Kim Kulling 6442158676
Merge pull request #5063 from danoli3/master
Build Zlib if missing for other platforms
2023-04-26 11:14:34 +02:00
Kim Kulling cf89990569
Merge branch 'master' into master 2023-04-26 10:58:00 +02:00
Kim Kulling 9c2594a1dc
Merge pull request #5051 from Jackie9527/msvc-clang-deprecated-copy-with-dtor
Remove -Wno-deprecated-copy-with-dtor.
2023-04-26 10:57:28 +02:00
Kim Kulling 07aae9eaee
Merge branch 'master' into msvc-clang-deprecated-copy-with-dtor 2023-04-26 10:42:51 +02:00
Kim Kulling 4dc341955a
Merge pull request #5049 from Jackie9527/msvc-clang-inconsistent-missing-destructor-override
Fix warning related to inconsistent-missing-destructor-override.
2023-04-26 10:41:17 +02:00
Kim Kulling 71366fff8e
Merge branch 'master' into msvc-clang-inconsistent-missing-destructor-override 2023-04-26 09:31:55 +02:00
Kim Kulling ee6e05bb86
Merge pull request #5048 from Jackie9527/deprecated-copy-with-user-provided-dtor
Remove unused -Wno-deprecated-copy-with-user-provided-dtor.
2023-04-26 09:31:00 +02:00
Kim Kulling 965ebaf78b
Merge branch 'master' into deprecated-copy-with-user-provided-dtor 2023-04-26 08:22:51 +02:00
Kim Kulling 97addc7cdc
Merge pull request #5047 from Jackie9527/msvc-clang-missing-noreturn
Fix warning related to missing-noreturn.
2023-04-26 00:13:06 +02:00
Kim Kulling 1ecb8e9196
Merge branch 'master' into msvc-clang-missing-noreturn 2023-04-25 23:56:39 +02:00
Dan Rosser cd9de860ce Build Zlib if missing for other platforms 2023-04-25 17:18:20 +10:00
Kim Kulling 87a288ebd3
Merge pull request #5046 from Jackie9527/msvc-clang-unreachable-code-break
Fix warning related to unreachable-code-break.
2023-04-20 17:13:44 +02:00
Jackie9527 ff17f1fe3d Remove -Wno-missing-variable-declarations.
Signed-off-by: Jackie9527 <80555200+Jackie9527@users.noreply.github.com>
2023-04-19 23:29:03 +08:00
Jackie9527 46677b835c Fix warning related to missing-variable-declarations, add static to global variable.
Signed-off-by: Jackie9527 <80555200+Jackie9527@users.noreply.github.com>
2023-04-19 23:28:36 +08:00
Jackie9527 1244e58274 Fix warning related to missing-variable-declarations, add static to global variable.
Signed-off-by: Jackie9527 <80555200+Jackie9527@users.noreply.github.com>
2023-04-19 23:28:08 +08:00
Jackie9527 5738b3d172 Fix warning related to missing-variable-declarations, add static to global variable.
Signed-off-by: Jackie9527 <80555200+Jackie9527@users.noreply.github.com>
2023-04-19 23:27:23 +08:00
Jackie9527 739cf15a1e Fix warning related to missing-variable-declarations, remove unused global variables.
Signed-off-by: Jackie9527 <80555200+Jackie9527@users.noreply.github.com>
2023-04-19 23:26:03 +08:00
Jackie9527 c0947b704e Fix warning related to missing-variable-declarations, remove unused global variables.
Signed-off-by: Jackie9527 <80555200+Jackie9527@users.noreply.github.com>
2023-04-19 23:24:40 +08:00
Jackie9527 1b826afeda Remove -Wno-unreachable-code-break.
Signed-off-by: Jackie9527 <80555200+Jackie9527@users.noreply.github.com>
2023-04-19 22:26:44 +08:00
Jackie9527 4d962057e5 Fix warning related to unreachable-code-break.
Signed-off-by: Jackie9527 <80555200+Jackie9527@users.noreply.github.com>
2023-04-19 22:18:35 +08:00
Jackie9527 12bc34a45c Fix warning related to unreachable-code-break.
Signed-off-by: Jackie9527 <80555200+Jackie9527@users.noreply.github.com>
2023-04-19 22:18:35 +08:00
Jackie9527 0a05a1f17f Fix warning related to unreachable-code-break.
Signed-off-by: Jackie9527 <80555200+Jackie9527@users.noreply.github.com>
2023-04-19 22:18:34 +08:00
Jackie9527 cec41f6dd5 Fix warning related to unreachable-code-break.
Signed-off-by: Jackie9527 <80555200+Jackie9527@users.noreply.github.com>
2023-04-19 22:18:34 +08:00
Jackie9527 7620a69e3e Fix warning related to unreachable-code-break.
Signed-off-by: Jackie9527 <80555200+Jackie9527@users.noreply.github.com>
2023-04-19 22:18:34 +08:00
Jackie9527 9e80dfc42d Fix warning related to unreachable-code-break.
Signed-off-by: Jackie9527 <80555200+Jackie9527@users.noreply.github.com>
2023-04-19 22:18:34 +08:00
Jackie9527 01488046e6 Fix warning related to unreachable-code-break.
Signed-off-by: Jackie9527 <80555200+Jackie9527@users.noreply.github.com>
2023-04-19 22:18:34 +08:00
Kim Kulling b1afa41047
Merge pull request #5045 from Jackie9527/msvc-clang-unreachable-code-return
Fix warning related to unreachable-code-return.
2023-04-18 19:57:16 +02:00
Kim Kulling 1517983ab5
Merge branch 'master' into msvc-clang-unreachable-code-return 2023-04-17 23:38:29 +02:00
Kim Kulling 45946ec01b
Merge pull request #5068 from assimp/kimkulling/fix_overflow_in_inversion_issue-3424
Fix: Avoid integer overflow in inversion operation
2023-04-17 23:37:54 +02:00
Kim Kulling fd59a2209b
Update fast_atof.h 2023-04-17 22:07:49 +02:00
Kim Kulling 9e056218cf
Merge branch 'master' into msvc-clang-unreachable-code-return 2023-04-17 22:04:07 +02:00
Kim Kulling d51f033e20
Fix: Avoid integer overflow in inversion op
- closes https://github.com/assimp/assimp/issues/3424
2023-04-17 21:30:47 +02:00
Kim Kulling 074af85734
Merge pull request #5043 from tellypresence/create-local-textures
Replace relative paths with local assets/textures
2023-04-17 21:25:15 +02:00
Kim Kulling 133f730c11
Merge branch 'master' into create-local-textures 2023-04-17 20:47:54 +02:00
Kim Kulling 0023f9b09a
Merge pull request #5067 from assimp/kimkulling/fix_memory_leak_in_fbx_scope_issue-3421
Fix: Fix leak in Scope class, FBX
2023-04-17 20:40:46 +02:00
Kim Kulling ca937788ee
Fix: Fix leak in Scope class, FBX
- closes https://github.com/assimp/assimp/issues/3421
2023-04-17 20:08:58 +02:00
Kim Kulling 333f7d5ee0
Merge pull request #5066 from assimp/kimkulling/fix_possible_invalid_dereferencing_of-issue-4918
Fix possible dereferencing of invalid pointer.
2023-04-17 15:59:07 +02:00
Kim Kulling aee4df9be8
Fix possible dereferencing of invalid pointer.
- closes https://github.com/assimp/assimp/issues/4918
2023-04-17 15:40:29 +02:00
Kim Kulling 5d841ec9a5 Refactoring: Cleanup post-processing steps. 2023-04-16 18:20:14 +02:00
Kim Kulling 13c9db2310
Merge pull request #5064 from assimp/kimkulling/remove_empty_file_issue-4957
Delete License.txt
2023-04-15 13:03:02 +02:00
Kim Kulling 8bc64ec147
Delete License.txt
- closes https://github.com/assimp/assimp/issues/4957
2023-04-15 11:53:19 +02:00
Kim Kulling 8cf74c7663
Merge branch 'master' into create-local-textures 2023-04-15 11:52:00 +02:00
Kim Kulling 7e8aabcbb4
Merge pull request #5057 from sutajo/master
ConvertToLHProcess now inverts viewing direction
2023-04-15 11:51:15 +02:00
Adam Beili e193220ad8
Merge branch 'master' into refactor/KHR_material_specular 2023-04-06 02:42:18 +02:00
Suhajda Tamás 3dd08cdd60 Added note 2023-04-05 13:01:38 +02:00
Suhajda Tamás 74509ef8bd Revert "FBXConverter : import FbxCamera correctly"
This reverts commit cdfdd75a66.
2023-04-05 12:19:39 +02:00
Jackie9527 d4c21ba9a8 Fix warning related to error=return-type.
/home/runner/work/assimp/assimp/code/AssetLib/Ogre/OgreXmlSerializer.cpp: In member function ‘T Assimp::Ogre::OgreXmlSerializer::ReadAttribute(Assimp::XmlNode&, const char*) const [with T = bool]’:
  Error: /home/runner/work/assimp/assimp/code/AssetLib/Ogre/OgreXmlSerializer.cpp:131:1: error: control reaches end of non-void function [-Werror=return-type]

Signed-off-by: Jackie9527 <80555200+Jackie9527@users.noreply.github.com>
2023-04-05 07:39:17 +08:00
Jackie9527 116ceeca31 Remove -Wno-unreachable-code-return.
Signed-off-by: Jackie9527 <80555200+Jackie9527@users.noreply.github.com>
2023-04-05 07:39:12 +08:00
Jackie9527 a7cb3b4dbb Fix warning related to unreachable-code-return, remove redundant return.
Signed-off-by: Jackie9527 <80555200+Jackie9527@users.noreply.github.com>
2023-04-05 07:37:49 +08:00
Jackie9527 55c6eaee0c Fix warning related to unreachable-code-return, remove redundant return.
Signed-off-by: Jackie9527 <80555200+Jackie9527@users.noreply.github.com>
2023-04-05 07:37:48 +08:00
Jackie9527 502bceb6e8 Fix warning related to unreachable-code-return, remove redundant return.
Signed-off-by: Jackie9527 <80555200+Jackie9527@users.noreply.github.com>
2023-04-05 07:37:48 +08:00
Jackie9527 a87585668d Fix warning related to unreachable-code-return, disable warning.
Signed-off-by: Jackie9527 <80555200+Jackie9527@users.noreply.github.com>
2023-04-05 07:37:48 +08:00
Steve M 5b2f78ac20
Merge branch 'master' into create-local-textures 2023-04-04 16:01:20 -07:00
Suhajda Tamás 23a3e8cf2d ConvertToLHProcess noew inverts viewing direction 2023-04-04 19:39:32 +02:00
Kim Kulling 679eb972e6
Merge pull request #5056 from sutajo/fix_pretransform_vertices_with_cameras
Fix pretransform vertices with cameras
2023-04-04 17:35:50 +02:00
Kim Kulling 89ccc89298
Merge branch 'master' into fix_pretransform_vertices_with_cameras 2023-04-04 17:21:05 +02:00
Kim Kulling 8705940801
Merge pull request #5042 from Jackie9527/msvc-clang-unreachable-code
Fix warning related to unreachable-code.
2023-04-04 17:18:55 +02:00
Kim Kulling 1733d9f795
Merge branch 'master' into msvc-clang-unreachable-code 2023-04-04 17:02:22 +02:00
Kim Kulling 17d8e991cc
Merge pull request #5041 from Jackie9527/msvc-clang-format-non-iso
Fix warning related to format-non-iso.
2023-04-04 17:01:27 +02:00
Kim Kulling 17bdd5f9b5
Merge branch 'master' into msvc-clang-format-non-iso 2023-04-04 15:59:27 +02:00
Kim Kulling 414091ab11
Merge pull request #5039 from liedtkeInTUM/fix_getenv_uwp
std::getenv is not supported using uwp
2023-04-04 13:49:15 +02:00
Kim Kulling e6f26fc52e
Remove dead code. 2023-04-04 12:54:26 +02:00
Kim Kulling ccbcf15a21
Merge branch 'master' into fix_getenv_uwp 2023-04-04 12:53:29 +02:00
Kim Kulling 4e34e77226
Merge pull request #5025 from inhosens/master
FBX import: Fix camera rotation
2023-04-04 12:51:08 +02:00
Steve M f68f1f6bf2
Merge branch 'master' into create-local-textures 2023-04-03 16:50:43 -07:00
Suhajda Tamás 9d76493ad8 Fix mLookAt with pretransformed vertices
mLookAt is a position vector inside the nodes reference frame, not a direction vector, so translation should be applied to it.
2023-04-04 00:06:09 +02:00
Kim Kulling a259277498
Merge branch 'master' into master 2023-04-03 23:54:28 +02:00
Kim Kulling f2efcd77bc
Merge pull request #5003 from FlorianBorn71/MemoryOptimizationForGLTFWithSharedAttr
GLTF Importer: Build a list of the actual vertices so it works well with shared attribute lists
2023-04-03 23:39:21 +02:00
Suhajda Tamás 9915e875bf glTF2: Fix incorrect camera position 2023-04-03 23:35:04 +02:00
Kim Kulling 8aa959fa19
Merge branch 'master' into MemoryOptimizationForGLTFWithSharedAttr 2023-04-03 20:48:51 +02:00
Kim Kulling ca79916048
Merge pull request #5040 from Jackie9527/msvc-clang-nested-anon-types
Fix warning related to nested-anon-types.
2023-04-03 20:16:14 +02:00
Kim Kulling d6885d4025
Merge branch 'master' into msvc-clang-nested-anon-types 2023-04-03 19:59:59 +02:00
Kim Kulling 19ff57a6c3
Merge branch 'master' into MemoryOptimizationForGLTFWithSharedAttr 2023-04-03 11:28:10 +02:00
Kim Kulling df21b6799f
Merge pull request #5053 from aniongithub/fix-loadfbxasserterror
Fix Issue #4486 using the fix described by @jianliang79
2023-04-03 09:14:31 +02:00
Ani ae121bfbb0
Merge branch 'master' into fix-loadfbxasserterror 2023-04-02 22:13:33 -07:00
Steve M 70aceb203a
Merge branch 'master' into create-local-textures 2023-04-02 19:31:57 -07:00
liedtkeInTUM 97e31a895e
Merge branch 'master' into fix_getenv_uwp 2023-04-01 23:38:48 +02:00
Kim Kulling 9fba0ee31b
Merge branch 'master' into msvc-clang-deprecated-copy-with-dtor 2023-04-01 20:46:34 +02:00
Kim Kulling acdb6684ba
Merge pull request #5052 from Jackie9527/msvc-clang-shadow-field-in-constructor
Remove unused -Wno-shadow-field-in-constructor.
2023-04-01 20:45:43 +02:00
Steve M 9c5ab67b64 Replace provisional image with original historical image 2023-04-01 09:20:36 -07:00
Jackie9527 dacaebc078 Remove unused -Wno-shadow-field-in-constructor.
Signed-off-by: Jackie9527 <80555200+Jackie9527@users.noreply.github.com>
2023-04-01 23:49:22 +08:00
Jackie9527 bddb4559a1 Remove -Wno-deprecated-copy-with-dtor.
Signed-off-by: Jackie9527 <80555200+Jackie9527@users.noreply.github.com>
2023-04-01 22:46:01 +08:00
Jackie9527 7df4efea44 Fix warning related to inconsistent-missing-destructor-override.
Signed-off-by: Jackie9527 <80555200+Jackie9527@users.noreply.github.com>
2023-04-01 21:49:38 +08:00
Jackie9527 e36812a449 Remove unused -Wno-deprecated-copy-with-user-provided-dtor.
Signed-off-by: Jackie9527 <80555200+Jackie9527@users.noreply.github.com>
2023-04-01 19:07:13 +08:00
Jackie9527 87c309566f Fix warning related to missing-noreturn.
Signed-off-by: Jackie9527 <80555200+Jackie9527@users.noreply.github.com>
2023-04-01 18:46:12 +08:00
Steve M 6d668382ec Fix model broken in commit a8a1ca9
Restored broken binary from 4bbc033 (5 Mar 2009)
2023-03-31 23:20:24 -07:00
Steve M e1678f11e6 Replace relative paths with local assets/textures
Relative paths can easily contain typos, lower/upper case errors, and in general are brittle
2023-03-31 22:17:50 -07:00
Jackie9527 20b2f857c5 Remove -Wno-unreachable-code
Signed-off-by: Jackie9527 <80555200+Jackie9527@users.noreply.github.com>
2023-04-01 13:07:30 +08:00
Jackie9527 4d2512dcae Fix warning related to unreachable-code.
Signed-off-by: Jackie9527 <80555200+Jackie9527@users.noreply.github.com>
2023-04-01 13:03:02 +08:00
Jackie9527 04066ece8e Fix warning related to unreachable-code.
Signed-off-by: Jackie9527 <80555200+Jackie9527@users.noreply.github.com>
2023-04-01 13:02:04 +08:00
Jackie9527 1dcb5da1cd Fix warning related to unreachable-code.
Signed-off-by: Jackie9527 <80555200+Jackie9527@users.noreply.github.com>
2023-04-01 13:01:22 +08:00
Jackie9527 94067994cc Fix warning related to format-non-iso.
Signed-off-by: Jackie9527 <80555200+Jackie9527@users.noreply.github.com>
2023-04-01 12:29:42 +08:00
Jackie9527 6b54761310 Fix warning related to nested-anon-types.
Signed-off-by: Jackie9527 <80555200+Jackie9527@users.noreply.github.com>
2023-04-01 10:30:10 +08:00
Sven Liedtke 5cf9d3abf7 std::getenv is not supported using uwp 2023-04-01 01:02:21 +02:00
Kim Kulling 7c64b6c599
Merge pull request #4993 from Jackie9527/clang-cl-15.0.1-support
Add build options to fix issues with clang 15.
2023-03-31 18:28:12 +02:00
Kim Kulling 203e1468df
Merge branch 'master' into clang-cl-15.0.1-support 2023-03-30 22:03:30 +02:00
Kim Kulling 9c17c8c39a
Merge pull request #5037 from liedtkeInTUM/fix_crypt_link_issue_uwp
Fix link issue in UWP builds without functional replacement
2023-03-30 21:59:22 +02:00
liedtkeInTUM d032c3162a
Merge branch 'master' into fix_crypt_link_issue_uwp 2023-03-30 09:37:28 +02:00
Sven Liedtke 6d65e9c393 Fix link issue in UWP builds without functional replacement 2023-03-30 09:21:30 +02:00
Kim Kulling 85b470a3ee
Merge branch 'master' into clang-cl-15.0.1-support 2023-03-29 21:20:25 +02:00
Kim Kulling 6fa2f86d6b
Merge pull request #5032 from assimp/kimkulling-patch-1
Update Readme.md
2023-03-29 21:19:42 +02:00
Kim Kulling 4daf8c36bc
Merge branch 'master' into kimkulling-patch-1 2023-03-29 20:41:54 +02:00
aniongithub 4438b3ecc9 Fix Issue #4486 using the fix described by @jianliang79 2023-03-29 18:36:18 +00:00
Kim Kulling 5d6ca9808d
Merge pull request #5035 from assimp/kimkulling/update-readme
Update Readme.md
2023-03-28 17:04:57 +02:00
Kim Kulling 55fa3d4251
Update Readme.md 2023-03-28 15:19:33 +02:00
Kim Kulling 3801d7e78f
Merge pull request #5034 from assimp/kimkulling/update-readme
Update Readme.md
2023-03-28 14:57:03 +02:00
Kim Kulling f4e9930e50
Update Readme.md 2023-03-28 13:45:09 +02:00
Adam Beili 8ac0af5c58
. 2023-03-26 17:13:16 +02:00
Adam Beili b6ecba9114
fix 2023-03-26 17:03:46 +02:00
Adam Beili 83053f3d56
Made usePbrSpecGloss a exportproperty, fixed mat_specular to spec 2023-03-26 16:55:38 +02:00
Adam Beili fa00571049
fixed compilation bug 2023-03-26 14:52:44 +02:00
Kim Kulling d8201bdb6f
Update Readme.md 2023-03-25 16:00:29 +01:00
Adam Beili c9177b7811
Merge branch 'master' into refactor/KHR_material_specular 2023-03-24 21:47:19 +01:00
Turo Lamminen 6832aa227a Add more DXF files to unit tests 2023-03-24 11:32:06 +02:00
Turo Lamminen bed2cf1a23 Add more BVH files to unit tests 2023-03-24 11:32:06 +02:00
Turo Lamminen e8d4a11af5 Add more 3DS files to unit tests 2023-03-24 11:32:06 +02:00
Turo Lamminen 0e657b575b Add more 3D files to unit tests 2023-03-24 11:32:06 +02:00
Kim Kulling e02a1ff577
Merge pull request #5017 from tellypresence/provide-utf8-IRR-files
Add UTF-8 versions of UTF-16LE IRR/IRRMesh files
2023-03-24 00:10:35 +01:00
Kim Kulling e6c63cbee2
Merge branch 'master' into provide-utf8-IRR-files 2023-03-23 22:53:34 +01:00
Kim Kulling 03aee802b2
Merge pull request #5030 from assimp/kimkulling/add-code-of-conduct-1
Create CODE_OF_CONDUCT.md
2023-03-23 17:59:10 +01:00
inhosens 7095c4f52f
Merge branch 'master' into master 2023-03-23 07:30:49 +01:00
Steve M fc1a88deb4
Merge branch 'master' into provide-utf8-IRR-files 2023-03-22 14:49:08 -07:00
Kim Kulling f43281e89b
Merge branch 'master' into kimkulling/add-code-of-conduct-1 2023-03-22 21:48:34 +01:00
Kim Kulling 7437f20d0a
Merge pull request #5026 from turol/amf-tests
Add more AMF unit tests
2023-03-22 20:06:22 +01:00
Kim Kulling c32f4b71b7
Create CODE_OF_CONDUCT.md 2023-03-22 20:00:09 +01:00
Turo Lamminen 5ddd18d1c7 Add more AMF unit tests 2023-03-22 12:06:30 +02:00
inhosens 7cc0c06fdb
Merge branch 'assimp:master' into master 2023-03-22 08:30:52 +01:00
Steve M 9552769f82
Merge branch 'master' into provide-utf8-IRR-files 2023-03-21 13:35:01 -07:00
Kim Kulling c546a4a73a
Merge pull request #4985 from MakerOfWyverns/master
Two bug fixes in Python port.
2023-03-21 20:43:40 +01:00
Kim Kulling 4e645a0412
Merge branch 'master' into master 2023-03-21 19:42:43 +01:00
Kim Kulling cf3c9d515a
Merge pull request #5019 from tellypresence/revert-possibly-corrupted-ply-file
Revert 3D model corrupted by a8a1ca9
2023-03-21 19:40:42 +01:00
Kim Kulling d8e2fc30a0
Merge branch 'master' into revert-possibly-corrupted-ply-file 2023-03-21 17:36:10 +01:00
Steve M d902c2293d
Merge branch 'master' into provide-utf8-IRR-files 2023-03-21 09:27:44 -07:00
Kim Kulling 6360c90ac0
Merge pull request #4981 from Jackie9527/1-1922
bugfix fails to check if point in triangle.
2023-03-21 13:19:31 +01:00
Kim Kulling f81bb90f89
Merge branch 'master' into 1-1922 2023-03-21 12:58:11 +01:00
Turo Lamminen 65440f17a1 Add more ASE model unit tests 2023-03-21 12:09:27 +02:00
Turo Lamminen ea3cc37890 Check node parents in ValidateDataStructure 2023-03-21 11:36:49 +02:00
Turo Lamminen 48d89622ee Use ASSERT_NE to check that scene has loaded
EXPECT_NE tries to continue so it ended up dereferencing
null pointers and crashed.
2023-03-21 11:36:49 +02:00
Inho Lee cdfdd75a66 FBXConverter : import FbxCamera correctly
FbxCamera's default value is correct but its transformed
values are described in each NodeProperties.
2023-03-21 10:35:24 +01:00
Kim Kulling 6da160f14d
Merge pull request #4980 from Jackie9527/1-3193
bugfix remove duplicated data.
2023-03-20 23:58:16 +01:00
Kim Kulling e7e4e3100f
Merge branch 'master' into 1-3193 2023-03-20 14:01:35 +01:00
Turo Lamminen 3a69e353f3 Make Blender MVert no field optional 2023-03-20 12:00:20 +02:00
Steve M 92409a821d Provide dwarf textures for COB model
Duped from B3D and X dwarf folders
2023-03-18 22:44:20 -07:00
Steve M e2063b3ba6 Revert to commit 13 May 2014 (08bacc7)
Changes were introduced to the binary portion of this file at some point
2023-03-17 22:42:17 -07:00
Steve M 95616cf5b5 Add UTF-8 versions of UTF-16LE files
Also duplicate missing textures for local model access
2023-03-17 22:13:40 -07:00
Kim Kulling e394bda707
Merge branch 'master' into 1-1922 2023-03-17 09:37:37 +01:00
Kim Kulling 5a4f7c0a37
Merge pull request #5007 from malortie/fix_hl1_mdl_importer_bone_hierarchy
Fix Half-Life 1 MDL importer bone hierarchy.
2023-03-16 14:20:49 +01:00
Kim Kulling 435181f5f5
Merge branch 'master' into fix_hl1_mdl_importer_bone_hierarchy 2023-03-15 14:38:09 +01:00
Kim Kulling 88f3b950c7
Merge pull request #5011 from assimp/kimkulling/remove-deprecated-badge
Remove alarm badge
2023-03-15 14:35:50 +01:00
Kim Kulling 16f9ba4935
Remove alarm badge 2023-03-15 13:26:24 +01:00
Kim Kulling b5f68d73ab
Merge branch 'master' into fix_hl1_mdl_importer_bone_hierarchy 2023-03-15 11:36:45 +01:00
Kim Kulling da1ec4de91
Merge pull request #5009 from assimp/kimkulling/refactoring_geoutils
Kimkulling/refactoring geoutils
2023-03-15 00:03:29 +01:00
Kim Kulling 7e5a178637 Update: Add missing geo doc. 2023-03-14 23:49:41 +01:00
Kim Kulling c537bd78d0 Refactoring: Code cleanup post-processing. 2023-03-14 23:39:36 +01:00
Kim Kulling 59d9711928 Refactoring: Code cleanup post-processing. 2023-03-14 23:37:10 +01:00
Kim Kulling 45c1da26b3 Refactoring: Code cleanup post-processing. 2023-03-14 23:34:31 +01:00
Kim Kulling 31ae9cde1c Refactoring: Code cleanup post-processing. 2023-03-14 23:32:03 +01:00
Kim Kulling 1147f0c8bd Refactoring: Code cleanup post-processing. 2023-03-14 21:04:43 +01:00
Kim Kulling 2acfc125c3 Refactoring: Make GeoUtils reusable 2023-03-14 20:03:14 +01:00
Marc-Antoine Lortie eb3b48e523 Invert logic in build_bone_children_hierarchy. 2023-03-14 09:21:45 -04:00
Marc-Antoine Lortie 25ab05eb49 Replace typedef by using. 2023-03-14 09:17:39 -04:00
Marc-Antoine Lortie 4c015077b8 Add missing member initializer. 2023-03-13 19:07:14 -04:00
Marc-Antoine Lortie 054dacd068 Improved comments. 2023-03-13 19:07:14 -04:00
Marc-Antoine Lortie 7bc4c12956 Simplified HL1 MDL nodes tests. 2023-03-13 19:07:13 -04:00
Marc-Antoine Lortie d500f60490 Adjust emptyBonesNames test. 2023-03-13 19:06:18 -04:00
Marc-Antoine Lortie 3c2a425869 Added a test to validate HL1 MDL bone hierarchy. 2023-03-13 19:06:18 -04:00
Marc-Antoine Lortie 4b4cb55f22 Fix HL1MDLLoader flattened bone hierarchy. 2023-03-13 19:06:18 -04:00
Kim Kulling fdcc45d010
Merge pull request #4979 from Jackie9527/1-3458
bugfix the three vertices are collinear
2023-03-12 19:17:22 +01:00
Kim Kulling 3840c8bd8d
Merge branch 'master' into 1-3458 2023-03-12 17:06:09 +01:00
Florian Born 8176c6a0e4 Adjusting the unit tests to pass new gltf 2023-03-10 18:36:43 +01:00
Kim Kulling 6e1959f061
Merge pull request #4991 from Jackie9527/1-4489
upgrade stb_image to v2.28.
2023-03-10 16:20:36 +01:00
Kim Kulling c9539f67e3
Merge branch 'master' into 1-4489 2023-03-10 16:10:51 +01:00
Florian Born 60cefdd549 Jan's fedback 2023-03-10 12:10:38 +01:00
Kim Kulling e308474163
Merge pull request #5004 from assimp/kimkulling/capi-cleanup
C-API: Code cleanup
2023-03-10 11:42:33 +01:00
Kim Kulling ffd222334f
Fix: Remove buggy namespace declaration 2023-03-10 09:00:37 +01:00
Kim Kulling 2f7882cb8d
Update: Small code cleanup 2023-03-10 08:49:58 +01:00
Kim Kulling 63dae0a7f2
Fix: Add security asserts. 2023-03-10 08:48:11 +01:00
Kim Kulling c82a6d05b0
Code cleanup 2023-03-10 08:43:12 +01:00
Florian Born dfd70b5c10 GLTF Importer: Build a list of the actual vertices so it works well with shared attribute lists 2023-03-09 19:06:58 +01:00
Kim Kulling 0ed957f70a
Merge pull request #4978 from Jackie9527/draco_1.5.6
upgrade draco to 1.5.6
2023-03-09 14:09:30 +01:00
Kim Kulling 348e672567
Merge branch 'master' into draco_1.5.6 2023-03-09 13:45:44 +01:00
Turo Lamminen f3767a4eb2 Use unordered_map for subdivision process edge map 2023-03-09 14:33:43 +02:00
Turo Lamminen b534584198 Improve unit tests which load subdivision models 2023-03-09 14:33:43 +02:00
Kim Kulling 980e156251
Merge branch 'master' into draco_1.5.6 2023-03-08 13:52:38 +01:00
Kim Kulling 366243f7ef
Merge pull request #4999 from FlorianBorn71/UseNewMetaDataTypesInFBXConverter
After Kim's addition to meta data types, use it in the FBX converter
2023-03-08 11:54:29 +01:00
Kim Kulling 05249353d4
Merge branch 'master' into UseNewMetaDataTypesInFBXConverter 2023-03-08 10:53:00 +01:00
Kim Kulling 8476a2c832
Merge pull request #4994 from urshanselmann/master
remove debug message from MemoryIOStream
2023-03-08 10:17:26 +01:00
Kim Kulling 8c9580cfd3
Merge branch 'master' into UseNewMetaDataTypesInFBXConverter 2023-03-07 21:32:37 +01:00
Urs Hanselmann 8fb83af079
Merge branch 'master' into master 2023-03-07 19:45:45 +01:00
Kim Kulling 3a73ce37e4
Merge pull request #4986 from assimp/kimkulling/fix_sample_utf8_encoding
Fix: Use C++17 compliant utf8 encoding.
2023-03-07 19:27:06 +01:00
Kim Kulling 4f48348af8 Fix: Move c++ include to c++ section 2023-03-07 18:55:18 +01:00
Florian Born 069b3ecdf8 After Kim's addition to meta data types, use it in the FBX converter 2023-03-07 17:44:48 +01:00
Kim Kulling 44c2785663
Make debug message more professional. 2023-03-07 17:01:08 +01:00
Kim Kulling 5082c940d0 Fix: Replace back_inserter usage. 2023-03-06 21:13:40 +01:00
Kim Kulling 8171e041fa Update utf82utf16. 2023-03-06 20:56:09 +01:00
Kim Kulling c089f11768 Update utf82utf16. 2023-03-06 19:56:11 +01:00
Kim Kulling c305b50f13
Merge branch 'master' into draco_1.5.6 2023-03-05 18:44:26 +01:00
Urs Hanselmann dcb89cf107 fix scan_printf script error code handling 2023-03-04 15:00:43 +01:00
Urs Hanselmann 2efd48dee2 disable another debug print message 2023-03-04 14:53:48 +01:00
Urs Hanselmann 4fa433c8ff improve scan_printf ci script error message 2023-03-04 14:52:49 +01:00
Urs Hanselmann 1520aff680 fix scan_printf script in linux bash 2023-03-04 14:41:10 +01:00
Urs Hanselmann 74c406dd26 add ci script to scan for unexpected printf statements 2023-03-04 14:27:58 +01:00
Jackie9527 424f53b4d6 bugfix remove duplicated data.
Signed-off-by: Jackie9527 <80555200+Jackie9527@users.noreply.github.com>
2023-03-04 16:25:56 +08:00
Urs Hanselmann 011382424b remove debug message from MemoryIOStream (used by public Importer::ReadFileFromMemory method) 2023-03-03 19:31:50 +01:00
Kim Kulling 7916f87404
Merge branch 'master' into kimkulling/fix_sample_utf8_encoding 2023-03-02 23:35:54 +01:00
Jackie9527 a0c29202be Add build options to fix issues with clang 15.
Signed-off-by: Jackie9527 <80555200+Jackie9527@users.noreply.github.com>
2023-03-02 21:12:35 +08:00
Jackie9527 02a4276924 upgrade stb_image to v2.28.
Signed-off-by: Jackie9527 <80555200+Jackie9527@users.noreply.github.com>
2023-03-02 09:11:54 +08:00
Kim Kulling 6ed433d011
Merge pull request #4989 from Jackie9527/SimpleTexturedDirectx11-build-error-with-VS2022
Fix build error when building SimpleTexturedDirectx11 with VS2022.
2023-03-01 22:21:33 +01:00
Kim Kulling b82c193dfd Merge branch 'kimkulling/fix_sample_utf8_encoding' of https://github.com/assimp/assimp into kimkulling/fix_sample_utf8_encoding 2023-03-01 21:41:28 +01:00
Kim Kulling 1092f0d94e Fix:Use correct encoding 2023-03-01 21:40:45 +01:00
Jackie9527 09dd0d0c2e Fix build error when building SimpleTexturedDirectx11 with VS2022.
Signed-off-by: Jackie9527 <80555200+Jackie9527@users.noreply.github.com>
2023-03-01 15:08:02 +08:00
Jackie9527 f7f54036f2 bugfix the three vertices are collinear when converting a polygon to a triangle.
Signed-off-by: Jackie9527 <80555200+Jackie9527@users.noreply.github.com>
2023-03-01 14:26:04 +08:00
Jackie9527 39efe4c832 upgrade draco to 1.5.6
Signed-off-by: Jackie9527 <80555200+Jackie9527@users.noreply.github.com>
2023-03-01 09:43:40 +08:00
Kim Kulling 534ee288c5
Update UTFConverter.h 2023-02-28 23:28:24 +01:00
Kim Kulling 60da5e7e96
Update UTFConverter.cpp 2023-02-28 23:27:46 +01:00
Kim Kulling 7f2760fe2f
Merge branch 'master' into kimkulling/fix_sample_utf8_encoding 2023-02-28 21:54:35 +01:00
Kim Kulling a1aace74e5 Fix: Use C++17 compliant utf8 encoding. 2023-02-28 21:53:18 +01:00
FeeshWyvern f9fcf33aaa Bug fix: We should not be accessing `mPrivate` according to structs.Scene and fixes a crash when `mPrivate` points to invalid data. 2023-02-27 20:06:05 -08:00
FeeshWyvern 94d9773548 Bug fix: Correctly set the name of the attributes. PR #3940 did not seem to update in Master? 2023-02-27 20:02:34 -08:00
Kim Kulling 90333340d6
Merge pull request #4977 from turol/lwo-fixes
LWO fixes
2023-02-27 16:10:27 +01:00
Jackie9527 437958ef91 bugfix fails to check if point in triangle.
Signed-off-by: Jackie9527 <80555200+Jackie9527@users.noreply.github.com>
2023-02-25 19:40:24 +08:00
Turo Lamminen e8f0eb930d Fix loading binary LWO files 2023-02-24 14:40:27 +02:00
Turo Lamminen 3bdc43a216 Add debug logging to LWO node graph generation 2023-02-24 14:40:27 +02:00
Turo Lamminen 657c1d8ad0 Use unique_ptr to store pivot nodes until moved to mapPivot 2023-02-24 14:40:23 +02:00
Turo Lamminen 3bdfecb0ed Destroy mapPivot nodes as we go 2023-02-24 13:26:34 +02:00
Turo Lamminen be28f0949b Whitespace 2023-02-24 13:20:40 +02:00
Turo Lamminen 53c6cc0966 Add a scope so mapPivot is destroyed when no longer used 2023-02-24 13:19:38 +02:00
Turo Lamminen 92f7c50c91 Remove dead code 2023-02-24 13:18:04 +02:00
Turo Lamminen 28d4e394c0 Use std::unique_ptr a bit 2023-02-24 13:17:32 +02:00
Turo Lamminen bb5a6abae0 Add more LWO files to unit tests 2023-02-24 12:43:06 +02:00
Kim Kulling 46ae8534f7
Merge pull request #4963 from avaneyev/fix-fbx-document-duplicate-id-leak
Fix a leak in FBXDocument when duplicate object IDs are found
2023-02-23 10:53:40 +01:00
Kim Kulling eb73464055
Merge branch 'master' into fix-fbx-document-duplicate-id-leak 2023-02-23 10:39:52 +01:00
Kim Kulling a14696b9ec
Merge pull request #4940 from ockeymm123/master
fix regression in join vertices post process.
2023-02-23 10:39:09 +01:00
Kim Kulling 2c3d52a5a1
Merge branch 'master' into master 2023-02-23 10:15:07 +01:00
Kim Kulling 408c41d687
Merge pull request #4971 from mjunix/patch-2
Fix index out of bounds
2023-02-22 21:47:01 +01:00
Kim Kulling c8d50dc83f
Merge branch 'master' into patch-2 2023-02-22 21:33:20 +01:00
Kim Kulling 27225fadc1
Merge pull request #4970 from mjunix/patch-1
Fix index out of bounds
2023-02-22 21:32:56 +01:00
Kim Kulling 4d6b7ff8b4
Merge branch 'master' into patch-1 2023-02-22 20:35:47 +01:00
Kim Kulling 277e19106a
Merge pull request #4974 from assimp/kimkulling/fix_minor_typo_in_doc_issue-4973
Fix: Fix typo in doc
2023-02-22 09:38:16 +01:00
Kim Kulling 009cd6c64a
Merge branch 'master' into patch-2 2023-02-21 21:35:56 +01:00
Kim Kulling 6aac7a2458
Fix: Fix typo in doc
- closes https://github.com/assimp/assimp/issues/4973
2023-02-21 21:34:49 +01:00
Turo Lamminen 2d448616d0 Move string definitions into conditional block to fix unused variable warnings 2023-02-21 12:49:39 +02:00
Kim Kulling 7de21694e9
Merge pull request #4962 from assimp/kimkulling/skeleton_update_doc
Update mesh.h
2023-02-21 10:04:34 +01:00
Kim Kulling 65b0553b8d
Merge branch 'master' into kimkulling/skeleton_update_doc 2023-02-21 09:50:27 +01:00
Johan Mattsson fa4273ee1f
Fix index out of bounds 2023-02-20 19:56:57 +01:00
Johan Mattsson f8132bf17c
Fix index out of bounds 2023-02-20 19:50:06 +01:00
Kim Kulling ad2f0682e7
Merge pull request #4965 from aaronmjacobs/implicit-conversion-fixes
Fix implicit conversion errors on macOS
2023-02-19 20:18:45 +01:00
Kim Kulling 1f0bcdf54c
Merge branch 'master' into implicit-conversion-fixes 2023-02-19 16:00:54 +01:00
Kim Kulling c8a0119e45
Merge pull request #4967 from assimp/kimkulling/add_missing_metadatatypes_issue-4959
Add missing pod types.
2023-02-19 16:00:40 +01:00
Kim Kulling 3ad67771fe Add missing pod types. 2023-02-18 17:09:14 +01:00
Aaron Jacobs 53e5f19b14 Use C++ style casts 2023-02-17 11:20:00 -08:00
Aaron Jacobs e4386d3013 Fix implicit conversion errors on macOS 2023-02-16 15:21:43 -08:00
Anton Vaneev 2cd3da4831
Fix a leak in FBXDocument when duplicate object IDs are found
When a duplicate ID is encountered, existing LazyObject is overwritten. Previously allocated instance leaks.

This change deletes the previously allocated instance before overwriting the pointer.
2023-02-16 11:21:29 +01:00
Kim Kulling 3585dd577d
Fix: Add default parameter to constructor/destructor. 2023-02-16 11:19:23 +01:00
Kim Kulling 7877dab43a
Fix: Fix typo 2023-02-16 10:59:36 +01:00
Kim Kulling bc8a122d88
Review finding: Use constexpr instead of macro 2023-02-16 09:28:35 +01:00
Kim Kulling 4950d02bac
Merge pull request #4960 from shammellee/fix-pyassimp-readme-typo
Fix PyAssimp README typo
2023-02-15 21:22:16 +01:00
Kim Kulling 9898138516
Update mesh.h 2023-02-15 21:02:03 +01:00
Shammel Lee 4c723a4ec8 Fix PyAssimp README typo 2023-02-14 20:21:33 -05:00
Kim Kulling bfa19f6900
Merge pull request #4946 from assimp/kimkulling/skeleton-doc
Add skeleton doc
2023-02-14 21:08:03 +01:00
Kim Kulling 779912e84e
Merge branch 'master' into kimkulling/skeleton-doc 2023-02-13 21:29:32 +01:00
Kim Kulling bb9b583bcf
Merge pull request #4945 from jiannanya/MemoryIOStream-override-mark
the member 'Flush()' need to be marked as override for msvc clang compiling
2023-02-13 10:03:51 +01:00
Kim Kulling 156a393b84
Fix a typo 2023-02-10 08:07:09 +01:00
Kim Kulling bde9a6a3c3
Update mesh.h 2023-02-09 22:36:06 +01:00
Kim Kulling 7b3f70a08b
Add skeleton doc 2023-02-09 21:12:21 +01:00
jiannanya 2390822baf Fix: the member function 'Flush()' of class 'MemoryIOStream' need to be marked as override for msvc clang compiling 2023-02-09 21:30:48 +08:00
Kim Kulling 4cf1ee98f6
Merge pull request #4943 from assimp/kimkulling/fix_leak_issue-3416
Fix: Fix memleak when exiting method by exception
2023-02-08 22:18:01 +01:00
Kim Kulling b7d08fc8f2
Fix review findings. 2023-02-08 21:48:55 +01:00
Kim Kulling b170370e5c Fix: Fix memleak when exiting method by exception 2023-02-08 21:29:54 +01:00
ockeymm123 57fc7144a7
Merge branch 'master' into master 2023-02-08 14:46:27 +08:00
sunjc fb146b7d39 fix typo, use a macro to avoid magic numbers. 2023-02-08 10:13:48 +08:00
Kim Kulling dd6bcecf56
Merge pull request #4941 from assimp/kimkulling/cleanup
Delete .coveralls.yml
2023-02-07 20:54:41 +01:00
Kim Kulling 0c05682baf
Delete .coveralls.yml 2023-02-07 20:02:06 +01:00
sunjc 647f1e47fa fix regression in join vertices post process. 2023-02-07 20:05:39 +08:00
Kim Kulling 487c03f547
Merge pull request #4935 from IOBYTE/master
ACLoader: add support for reading more than one texture per object
2023-02-04 19:28:21 +01:00
Kim Kulling 839cd35a54
Merge branch 'master' into master 2023-02-04 19:08:39 +01:00
Kim Kulling e6877cf20f
Merge pull request #4936 from TinyTinni/issue-4871
Fixes PLY reader when the header ends with \r\n
2023-02-04 19:08:12 +01:00
Kim Kulling e9c95d484e
Update IOStreamBuffer.h 2023-02-04 18:36:36 +01:00
Matthias Möller db72c6ee38 When "getNextBlock" was called after "getNextLine", the pointer could still on the newline.
The pointer to a newline could not advance enough, when the line ended with \r\n. The resulting buffer was correct, as the buffer range went from <start> until \r, but that the pointer increased by just 1 could lead to the problem that the next pointer points at \n, which is still part of the newline and therefore, "getNextBlock" got 1 byte too much.

Refs Issue #4871
2023-02-04 15:16:22 +01:00
Robert Reif 88ef9eecc1 ACLoader: add support for reading more than one texture per object 2023-02-03 20:29:56 -05:00
Kim Kulling 8c6b3fe69a
Merge pull request #4934 from turol/terragen_fix
Fix Terragen loader
2023-02-03 11:42:15 +01:00
Turo Lamminen 9453342491 Re-enable Terragen loader unit test 2023-02-03 11:45:11 +02:00
Turo Lamminen 8d405d60d9 Fix Terragen loader
Fixes e8d2b84017
2023-02-03 11:44:27 +02:00
Kim Kulling dbd0ae8f22
Merge pull request #4932 from turol/unit-test-fix
Unit test warning fixes
2023-02-03 00:15:48 +01:00
Kim Kulling 14b80f1ac4
Merge branch 'master' into unit-test-fix 2023-02-02 22:05:38 +01:00
Kim Kulling ea7321aae2
Merge pull request #4898 from shaunrd0/zlib-nobuild
Don't build zlib if ASSIMP_BUILD_ZLIB=OFF
2023-02-02 20:45:02 +01:00
Turo Lamminen a2273df48e Unit test warning fixes
GCC was warning about possibly uninitialized variables. Initialize them
and use values which are nonzero and distinct from each other and any
real value passed to any set method. This should prevent any false positives
from zero initialization.
2023-02-02 14:07:16 +02:00
Kim Kulling 213b536282
Merge branch 'master' into zlib-nobuild 2023-02-01 20:24:41 +01:00
Kim Kulling 6999caa683
Merge pull request #4899 from PencilAmazing/PLYcomments#4866
Fix issue #4866 by continuing to resetting read loop after hitting a comment
2023-02-01 20:06:59 +01:00
PencilAmazing feb3e9ff7a
Merge branch 'master' into PLYcomments#4866 2023-02-01 13:05:55 -05:00
Kim Kulling ce2f947eb1
Merge branch 'master' into zlib-nobuild 2023-01-31 22:00:49 +01:00
Kim Kulling b55e29b915
Merge pull request #4901 from AdamCichocki/JoinVerticesProcessUsedVerticesMask
Optimized usedVertexIndices in JoinVerticesProcess by using bitmask instead of unordered_set
2023-01-31 21:25:46 +01:00
Kim Kulling 5caae1a86d
Merge branch 'master' into JoinVerticesProcessUsedVerticesMask 2023-01-31 21:03:32 +01:00
Kim Kulling e4c85645c6
Merge pull request #4910 from assimp/kimkulling/ios_remove_deprecated_lib_issue-4906
Fix: Remove deprecated dependency.
2023-01-31 21:02:17 +01:00
Kim Kulling 47303c2d28 Fix:Remove deprecated features from iOS build. 2023-01-31 20:41:18 +01:00
Kim Kulling 5c286b8c13 Fix: Remove deprecated dependency. 2023-01-31 20:12:07 +01:00
Kim Kulling d2d8b84f83
Merge pull request #4880 from krishty/fix-build-without-armaturepopulate-post-process
Fix Build Without ArmaturePopulate Post Process Step
2023-01-31 10:23:44 +01:00
Kim Kulling d6b8d61066
Merge branch 'master' into JoinVerticesProcessUsedVerticesMask 2023-01-30 20:58:21 +01:00
PencilAmazing 527d110917
Merge branch 'master' into PLYcomments#4866 2023-01-30 09:35:57 -05:00
krishty df28e7830f
Merge branch 'master' into fix-build-without-armaturepopulate-post-process 2023-01-29 01:14:33 +01:00
Kim Kulling 77e34eedc0
Merge pull request #4904 from tellypresence/update-morph-documentation
Update morph mesh documentation now that gltf known to work
2023-01-27 10:03:34 +01:00
Steve M eff13f6a40 Update morph mesh documentation now that gltf known to work 2023-01-25 20:52:25 -08:00
Shaun Reed ffbeb2db18 CI 2023-01-25 17:46:10 -05:00
Shaun Reed 37903f8ed2 Don't build zlib if ASSIMP_BUILD_ZLIB=OFF 2023-01-25 17:46:10 -05:00
PencilAmazing 6dc12f57a2
Merge branch 'master' into PLYcomments#4866 2023-01-23 21:50:26 -05:00
Kim Kulling 3e7121e1cc
Merge pull request #4892 from lsnoel/fixLHNormals
Correctly consider aiProcess_FlipWindingOrder and aiProcess_MakeLeftHanded when generating normals
2023-01-24 00:16:21 +01:00
Kim Kulling 57054415cf
Merge branch 'master' into fixLHNormals 2023-01-24 00:04:49 +01:00
Kim Kulling 8463242449
Merge pull request #4889 from krishty/fix-msvc-emplace-warnings
Fix MSVC Warnings With “emplace_back()”
2023-01-24 00:04:21 +01:00
PencilAmazing 4d733d80f1
Merge branch 'master' into PLYcomments#4866 2023-01-23 15:56:04 -05:00
Kim Kulling b31c04e37c
Merge branch 'master' into fix-msvc-emplace-warnings 2023-01-23 21:37:41 +01:00
Kim Kulling 4d5e47a870
Merge pull request #4888 from krishty/clean-up-ctors-dtors
Tidy Up Constructors and Destructors
2023-01-23 21:37:08 +01:00
Kim Kulling f830d7998e
Merge branch 'master' into clean-up-ctors-dtors 2023-01-23 21:21:34 +01:00
Kim Kulling a7c4399c26
Merge pull request #4887 from krishty/remove-stray-semicolon
Remove Stray Semicolon
2023-01-23 20:26:10 +01:00
PencilAmazing cb8320945d Fix issue #4866 by continuing to resetting read loop after hitting a comment 2023-01-23 14:18:50 -05:00
Kim Kulling 036f2b3771
Merge branch 'master' into remove-stray-semicolon 2023-01-23 20:06:43 +01:00
Kim Kulling a9ce8a967d
Merge pull request #4886 from shimaowo/fix_gltf2_camera_fov
Fix: fix incorrect math for calculating the horizontal FOV of a perspective camera in gltf2 import #4435
2023-01-23 20:06:06 +01:00
Kim Kulling 3e20502e0f
Merge branch 'master' into fix_gltf2_camera_fov 2023-01-23 19:14:42 +01:00
Kim Kulling ff9b6c8d79
Merge pull request #4885 from krishty/replace-variables-with-literals
Replace Variables With Literals
2023-01-23 19:10:15 +01:00
Kim Kulling 3bd2f788f6
Merge branch 'master' into replace-variables-with-literals 2023-01-23 18:55:20 +01:00
AdamCichocki 5ed09b7ab6 usedVertexIndicesMask is now based on vector<boo> instead of vector<uint> 2023-01-23 16:39:06 +01:00
AdamCichocki 72b178b9fc Optimized usedVertexIndices by using bitmask instead of unordered_set 2023-01-23 14:51:02 +01:00
Kim Kulling cff81568f3
Merge pull request #4884 from krishty/remove-useless-virtual
Remove Useless “virtual”
2023-01-22 20:40:36 +01:00
Kim Kulling f2f967b8ba
Merge branch 'master' into remove-useless-virtual 2023-01-22 20:25:45 +01:00
Kim Kulling c48507beea
Merge pull request #4882 from krishty/trim-whitespace
Trim Trailing Whitespace
2023-01-22 17:17:53 +01:00
Kim Kulling f8bc8293ce
Update FBXMeshGeometry.h 2023-01-22 16:48:45 +01:00
Kim Kulling 303c30668f
Merge branch 'master' into trim-whitespace 2023-01-22 16:37:43 +01:00
Kim Kulling bf57eef8f2
Merge pull request #4897 from assimp/kimkulling/ensure_initializer_exists
Ensure initializer exists
2023-01-20 20:38:30 +01:00
Kim Kulling 7ad36b8925
Merge branch 'master' into kimkulling/ensure_initializer_exists 2023-01-20 20:01:41 +01:00
Kim Kulling 43d336311e
Merge pull request #4896 from assimp/kimkulling/remove_Zi_flag_msvc_issue-4845
Remove /Zi compiler flag for MSVC, release config
2023-01-20 20:00:51 +01:00
Kim Kulling 5ed01bcfa3
Ensure initializer exists
- Fixing a Codaxy finding.
2023-01-20 20:00:36 +01:00
Kim Kulling 9e1de3ec6e
Remove /Zi compiler flag for MSVC, release config
- closes https://github.com/assimp/assimp/issues/4845
2023-01-20 19:45:45 +01:00
Kim Kulling 288d49b721
Merge pull request #4895 from assimp/kimkulling/make_remove_empty_bones_optional_issue-4840
Update LimitBoneWeightsProcess.cpp
2023-01-20 19:33:41 +01:00
Kim Kulling 81cf1369db
Set correct number of bones in mesh instance 2023-01-20 19:20:06 +01:00
Kim Kulling ab0a119626
Update LimitBoneWeightsProcess.cpp
- Removing empty bones only if AI_CONFIG_IMPORT_REMOVE_EMPTY_BONES is enabled.
- closes https://github.com/assimp/assimp/issues/4840
2023-01-20 19:14:04 +01:00
lsnoel 8d1256f472 Comments about winding order fix for gen normals 2023-01-20 14:55:06 +00:00
Kim Kulling d331a7e5d4
Merge branch 'master' into fix-build-without-armaturepopulate-post-process 2023-01-20 13:52:13 +01:00
lsnoel eb5d3c51e8 Correctly consider aiProcess_FlipWindingOrder AND aiProcess_MakeLeftHanded when generating normals 2023-01-19 16:46:29 +00:00
Krishty 72f360710a Fix MSVC Warnings With “emplace_back()”
Several places in the code call `std::vector<aiVector3D>.emplace_back(0, 0, 0)`. The constructor of `aiVector3D` actually expects arguments of the type `ai_real`, (alias of `float` if compiling without `ASSIMP_DOUBLE_PRECISION`) but the literal `0` is of type `int`.

`emplace_back()` does support promotion, but `int` to `float` is a potentially lossy conversion. tl;dr: On warning level 4, MSVC spits out a very deeply nested `warning C4244: 'argument': conversion from '_Ty' to 'TReal', possible loss of data with _Ty=int and TReal=ai_real`.
2023-01-18 00:08:38 +01:00
shimaowo 20acfeaf97
Merge branch 'master' into fix_gltf2_camera_fov 2023-01-17 14:39:54 -08:00
Kim Kulling 67eae8ee5a
Merge pull request #4878 from MMory/f-FixWhitespaceBetweenTagAndNum
Fix #4877
2023-01-17 20:04:47 +01:00
shimaowo b298b79a46 add missing parens 2023-01-17 10:53:41 -08:00
Martin Mory 7f6e96747b
Merge branch 'master' into f-FixWhitespaceBetweenTagAndNum 2023-01-17 13:32:39 +01:00
Kim Kulling d640a89035
Merge pull request #4879 from krishty/fix-build-with-m3d-import-only
Fix #4262 Build With M3D Import Only
2023-01-17 12:14:23 +01:00
Martin Mory a89d5c7cea
Merge branch 'master' into f-FixWhitespaceBetweenTagAndNum 2023-01-17 12:10:46 +01:00
Kim Kulling e9f95e5ab6
Merge branch 'master' into fix-build-with-m3d-import-only 2023-01-17 11:22:00 +01:00
Kim Kulling 6a8f169103
Merge pull request #4872 from drbct/fixJoinVerticesProcess
Generalize JoinVerticesProcess for multiple UV and color channels
2023-01-17 11:05:57 +01:00
Kim Kulling 19dec716d3
Merge branch 'master' into fixJoinVerticesProcess 2023-01-17 09:11:43 +01:00
Krishty 36305cf987 Tidy Up Constructors and Destructors
This commit does not add or remove c’tors or d’tors, so it is *not* ABI-breaking.

If a c’tor/d’tor does nothing else than the default behavior, this commit replaces it with “= default”.

If an initializer list entry does nothing else than the default behavior, this commit removes it. First and foremost, remove default c’tor calls of base classes (always called by the compiler if no other base c’tor is explicitly called) and c’tor calls of members with complex types (e.g. “std::vector”).

In a few instances, user-defined copy c’tors / move c’tors / assignment operators / move assignment operators were replaced with “= default”, too. I only did this if I had a clear understanding of what’s going on.
2023-01-16 21:47:11 +01:00
Krishty 43a062a5d7 Remove Stray Semicolon 2023-01-16 20:45:00 +01:00
shimaowo 39cbef1e21 Fix: fix incorrect math for calculating the horizontal FOV of a perspective camera in GLTF2 import #4435 2023-01-16 11:39:13 -08:00
Krishty 3d3e856925 Trim Trailing Whitespace 2023-01-16 09:12:35 +01:00
Krishty 793284a766 Fix Build Without ArmaturePopulate Post Process Step
This post process step introduced new attributes into `aiSkeletonBone`. Said attributes are only defined with the process enabled, i.e. when the `ASSIMP_BUILD_NO_ARMATUREPOPULATE_PROCESS` macro has not been defined.

Some code, however, accessed the variables unconditionally, leading to build failures if `ASSIMP_BUILD_NO_ARMATUREPOPULATE_PROCESS` was defined.

This commit adds the missing checks.
2023-01-16 08:42:50 +01:00
Krishty 5cbc00a595 Fix Build With M3D Import Only
`M3DWrapper.h` is designed to omit the definition of `class M3DWrapper` if neither M3D import nor M3D export are compiled.
608bccd9cf touched the corresponding preprocessor checks and introduced a bug:
```
#ifndef ASSIMP_BUILD_NO_M3D_IMPORTER
#if !(ASSIMP_BUILD_NO_EXPORT || ASSIMP_BUILD_NO_M3D_EXPORTER)
class M3DWrapper {
```
When compiling
- with M3D import enabled,
- but with either export generally disabled or M3D export disabled specifically,
These checks evaluate to the wrong result and skip the definition, leading to a build failure in dependent code.
```
#if 1 // import enabled
#if !(1 || 1) // export disabled and M3D export disabled
```
This commit fixes the check to compile the definition if neither import is disabled.
2023-01-16 08:29:49 +01:00
Krishty bad76fd0f1 Replace Variables With Literals 2023-01-16 08:18:36 +01:00
Krishty e5c02e8d45 Remove Useless “virtual”
These functions are already marked “override”, and their neighbors had “virtual” removed as well.
2023-01-16 08:12:24 +01:00
Martin Mory 43c0f8bb3d Remove whitespace between a <v> tag and the first number, otherwise first call to strtoul10() returns 0 and the indices are broken, leading to possible out-of-bound access and memory corruption/crash 2023-01-15 23:03:41 +01:00
Kim Kulling 70edec0efb
Merge pull request #4876 from assimp/kimkulling/remove_deprecated_comment_issue-4869
Remove deprecated comment
2023-01-15 20:42:31 +01:00
Kim Kulling 2d37f49f51
Remove deprecated comment
- closes https://github.com/assimp/assimp/issues/4869
2023-01-15 19:12:24 +01:00
Kim Kulling eb328ce69d
Merge pull request #4873 from tellypresence/improve-mMethod-typing
Change mMethod type to enum aiMorphingMethod
2023-01-13 10:31:45 +01:00
Steve M b2672c082d Change mMethod type to enum aiMorphingMethod
Address sanitizer warning
2023-01-12 12:35:28 -08:00
Daniel Rösner 74af523b3e Generalize JoinVerticesProcess for multiple UV and color channels 2023-01-12 13:13:46 +01:00
Kim Kulling 33c32b6b35
Merge pull request #4855 from asmaloney/spelling
Fix several spelling mistakes
2023-01-08 21:00:39 +01:00
Kim Kulling b393132b58
Merge branch 'master' into spelling 2023-01-08 17:43:55 +01:00
Kim Kulling 9ace81a3d2
Merge pull request #4863 from assimp/kimkulling/update_readme
Update the getting help section
2023-01-05 12:56:17 +01:00
Kim Kulling f6457e1c87
Update Readme.md 2023-01-05 11:34:12 +01:00
Kim Kulling fa7d3aa0c0
Update the getting help section 2023-01-05 11:32:01 +01:00
Kim Kulling 2af29f4836
Merge pull request #4861 from assimp/kimkulling/LWOAnimation_fix_division_by_zero_issue-4860
Fix: Fix possible division by zero
2023-01-04 09:37:41 +01:00
Kim Kulling 96b071bdb1
Fix: Fix possible division by zero
- closes https://github.com/assimp/assimp/issues/4860
2023-01-04 09:19:37 +01:00
Kim Kulling 767644cd3f
Merge pull request #4859 from assimp/kimkulling/fix_signed_unsigned_mismatch_warning-issue-4854
Fix: Fix signed unsigned mismatch
2023-01-03 21:24:17 +01:00
Kim Kulling df8a9bb2b8
Fix: Fix signed unsigned mismatch
- closes https://github.com/assimp/assimp/issues/4854
2023-01-03 21:11:09 +01:00
Kim Kulling 35162c19b2
Merge branch 'master' into spelling 2023-01-03 20:32:41 +01:00
Kim Kulling 8c57382b20
Merge pull request #4858 from asmaloney/cmake-remove-dead-code
{cmake} Remove dead code
2023-01-03 19:30:12 +01:00
Andy Maloney 465566a87e {cmake} Remove dead code
BUILD_LIB_TYPE isn't used anywhere.

I think the intent with "add_definitions" here was to affect cmake (?), but it's actually just adding "#define DDL_STATIC_LIBRARY OFF" which isn't used in the code anywhere.
2023-01-03 05:04:25 -05:00
Andy Maloney e893248e7c Fix several spelling mistakes & a comment 2023-01-01 13:31:48 -05:00
Kim Kulling 05279f8bbd
Merge pull request #4852 from sfjohnston/sfjohnston_mods
sprintf to snprintf with known MAXLEN for buffer.
2022-12-31 15:29:24 +01:00
sfjohnston 25f0146f44 sprintf to snprintf with known MAXLEN for buffer. 2022-12-28 12:32:11 -08:00
Kim Kulling 7eadcebc9f
Merge pull request #4850 from assimp/kimkulling/move_asserthandler_to_include_issue-4779
Refactoring: Move asserthandler header to include
2022-12-23 16:57:37 +01:00
Kim Kulling ef5dd8c451
Merge branch 'master' into kimkulling/move_asserthandler_to_include_issue-4779 2022-12-23 16:29:30 +01:00
Kim Kulling a8e50be781 Refactoring: Move asserthandler header to include 2022-12-23 16:19:39 +01:00
Kim Kulling 883667c61a
Merge pull request #4848 from assimp/kimkulling/unzip_fix_compiler_warning
Update unzip.c
2022-12-23 14:07:04 +01:00
Kim Kulling 89b5011759
Update unzip.c
- Fix compiler warning.
2022-12-23 13:50:16 +01:00
Kim Kulling 022c385571
Merge pull request #4846 from rohit-kumar-j/patch-1
illegal token on right-side-of ::Windows
2022-12-19 09:49:20 +01:00
Kim Kulling 76de8ba1f4
Update material.inl 2022-12-19 08:58:45 +01:00
RKJ 6743274b31
illegal token on right-side-of ::Windows
Error without:
```
assimp\material.inl(101,47): message : error recovery skipped: ') ?'
```

Reference : https://stackoverflow.com/questions/2561368/illegal-token-on-right-side-of
2022-12-19 04:06:36 +05:30
Kim Kulling 1e2cff6383
Merge pull request #4824 from umesh-huawei/master
Fixed bug when exporting binary FBX
2022-12-16 11:25:31 +01:00
Kim Kulling 376f66a06d
Merge branch 'master' into master 2022-12-16 10:11:56 +01:00
Kim Kulling 5c763f471c
Merge pull request #4838 from sashashura/patch-10
Fixes Heap-buffer-overflow READ 1 in Assimp::ObjFileParser::getFace
2022-12-16 09:18:23 +01:00
Kim Kulling c3d15a3f51
Fix minor review findings. 2022-12-16 09:03:40 +01:00
Kim Kulling c92b84e38d
Merge branch 'master' into patch-10 2022-12-16 09:00:41 +01:00
Kim Kulling 7c6e33fef1
Merge pull request #4837 from sashashura/patch-9
Fixes Heap-buffer-overflow READ 1 in Assimp::MD5::MD5Parser::ParseHeader
2022-12-15 15:08:16 +01:00
Kim Kulling db8ff41679
Update MD5Parser.cpp 2022-12-15 14:06:57 +01:00
Kim Kulling 2612950b7b
Merge branch 'master' into patch-9 2022-12-15 14:05:35 +01:00
Kim Kulling ee02c389ca
Merge pull request #4836 from sashashura/patch-8
Fixes Heap-buffer-overflow READ 4 in Assimp::ScenePreprocessor::ProcssMesh
2022-12-15 14:04:19 +01:00
sashashura 917352dd8b
Fixes Heap-buffer-overflow READ 1 in Assimp::ObjFileParser::getFace
https://bugs.chromium.org/p/oss-fuzz/issues/detail?id=49274
2022-12-11 01:54:57 +01:00
Alex 90769ef3e6
Fixes Heap-buffer-overflow READ 1 in Assimp::MD5::MD5Parser::ParseHeader
https://bugs.chromium.org/p/oss-fuzz/issues/detail?id=49422
When it reaches the `SkipSpacesAndLineEnd`, `in` already points past `bufferEnd` and it leads to out of bounds memory read.
2022-12-11 00:02:09 +00:00
Alex d5294be00b
Fixes Heap-buffer-overflow READ 4 in Assimp::ScenePreprocessor::ProcessMesh
https://bugs.chromium.org/p/oss-fuzz/issues/detail?id=49797
2022-12-10 01:22:00 +00:00
Umesh Rajesh Ramchandani 2d372b302f Fixed bug when exporting binary FBX
Fixed vector subscript out of range bug when NULL_RECORD is passed to PutString and is actually null
2022-12-08 14:59:25 +01:00
Kim Kulling 0fdae2879d
Merge pull request #4825 from Gargaj/floatwarnings
fix warnings-as-errors for msvc 2019 x64
2022-12-08 14:48:54 +01:00
Kim Kulling fec39154ed
Merge branch 'master' into floatwarnings 2022-12-08 14:18:35 +01:00
Kim Kulling b2b85bf971
Merge pull request #4832 from assimp/kimkulling/fix_heap_overflow_issue-4831
Ensure face pointer is not nullptr
2022-12-08 09:50:24 +01:00
Kim Kulling 769b47ed0e
Ensure face pointer is not nullptr
- closes https://github.com/assimp/assimp/issues/4831
2022-12-08 09:35:11 +01:00
Kim Kulling 3f66b92797
Merge branch 'master' into master 2022-12-06 20:34:51 +01:00
Kim Kulling 65bedac389
Merge pull request #4829 from assimp/kimkulling/avoid_undefined_shift_issue-4822
Avoid undefined-shift in Assimp::ASE::Parser::ParseLV4MeshFace.
2022-12-05 13:31:31 +01:00
Kim Kulling 9d57ac9cc5 Fix:Add missing semicolon. 2022-12-05 13:15:42 +01:00
Kim Kulling 81f85a6f93 Avoid undefined-shift in Assimp::ASE::Parser::ParseLV4MeshFace. 2022-12-05 13:07:52 +01:00
Gargaj 9c839f2d9a more fixes 2022-12-03 20:44:57 +01:00
Gargaj 07d4e83f43 fix warnings-as-errors for msvc x64 2022-12-03 20:27:00 +01:00
Kim Kulling 28c155bfb4
Merge pull request #4820 from assimp/kimkulling/MDL_fix_division_by_zero_issue-4819
FIX: Fix possible division by zero
2022-12-02 10:00:12 +01:00
Kim Kulling f8bb7704ad
Fix: MAke quaternion check in unittest more robust
Just add an epsilon test by using the correct comparator from gtest.
2022-12-02 09:43:59 +01:00
Kim Kulling 62486c6e7c
FIX: Fix possible division by zero
- closes https://github.com/assimp/assimp/issues/4819
2022-12-02 09:24:51 +01:00
Kim Kulling d8b9e2b64b
Merge branch 'master' into master 2022-12-02 08:41:43 +01:00
Kim Kulling b0987f4513
Merge pull request #4816 from tkoeppe/explspec
[BlenderDNA.h] Declare explicit specializations
2022-11-30 15:07:11 +01:00
Kim Kulling f578b15759
Merge branch 'master' into explspec 2022-11-30 14:03:09 +01:00
Kim Kulling 497e286cfa
Merge pull request #4792 from Skylion007/modernize-smartptrs-literals
Modernize smartptrs and use C++11 literals
2022-11-29 20:32:02 +01:00
Thomas Köppe 7d06d798af [BlenderDNA.h] Declare explicit specializations
It is an ODR violation to use a template specialization for which an
explicit specialization is defined somewhere whose declaration is not
visible at the point of use.

Found via clang's -Wundefined-func-template warning.
2022-11-29 18:38:33 +00:00
Adam Beili 54068637ee
Merge branch 'master' into refactor/KHR_material_specular 2022-11-29 17:35:52 +01:00
Kim Kulling 8fb7ba3444
Merge branch 'master' into modernize-smartptrs-literals 2022-11-29 09:58:17 +01:00
Kim Kulling 6f6f77232e
Merge pull request #4813 from assimp/kimkulling/improve_github_parallel_build
Introduce --parallel instead of .j
2022-11-29 09:57:52 +01:00
Kim Kulling 22cff318dc
Introduce --parallel instead of .j
Just use parallel command to improve the readability.
2022-11-29 09:34:56 +01:00
Kim Kulling f3f533c390
Merge branch 'master' into master 2022-11-23 23:00:29 +01:00
Kim Kulling b6adb9f2dd
Merge pull request #4805 from CMDR-JohnAlex/patch-1
Fixed some grammar and spelling mistakes
2022-11-22 23:49:46 +01:00
Kim Kulling 8f0e2db974
Merge branch 'master' into patch-1 2022-11-22 20:51:07 +01:00
Kim Kulling 10b99dc4ca
Merge pull request #4807 from DavidKorczynski/cifuzz-int
Add CIFuzz GitHub action
2022-11-22 20:46:51 +01:00
Kim Kulling 1476d50c7d
Merge branch 'master' into cifuzz-int 2022-11-22 19:10:03 +01:00
naota29 ab82428bb5
Merge branch 'master' into master 2022-11-22 07:15:38 -08:00
Kim Kulling 88041152ac
Merge pull request #4809 from assimp/kimkulling/fix_possible_overflow_issue-3422
Add overfolow check for invalid data.
2022-11-22 11:04:51 +01:00
Kim Kulling 5689ac7869
Add overfolow check for invalid data.
- closes https://github.com/assimp/assimp/issues/3422
2022-11-22 10:50:52 +01:00
David Korczynski 355ebbedf3 Add CIFuzz GitHub action 2022-11-21 16:45:38 -08:00
Justice Colby 371d5c78f4 Updated ConvertMaterials function to assign appopriate material index when using material references. 2022-11-21 15:49:48 -08:00
Kim Kulling b3daec65a0
Merge pull request #4787 from Beilinson/KHR_materials_emissive_strength
Added support for KHR_materials_emissive_strength
2022-11-21 23:51:55 +01:00
John Alexander Le Roux 80449dd014
Fixed some grammar and spelling mistakes 2022-11-21 15:51:21 -05:00
Kim Kulling 1d1cd93371
Merge branch 'master' into KHR_materials_emissive_strength 2022-11-21 20:55:13 +01:00
Adam Beili 5441f07d05
Merge branch 'master' into refactor/KHR_material_specular 2022-11-19 17:40:22 +02:00
Kim Kulling 6392dbfe4d
Merge pull request #4801 from jakrams/fbx-out-of-memory-fix
Don't hide out-of-memory during FBX import
2022-11-18 20:40:59 +01:00
Adam 1cd5841b2f . 2022-11-18 17:24:37 +02:00
Adam Beili 3b5e34ab30
Merge branch 'master' into refactor/KHR_material_specular 2022-11-18 16:10:39 +02:00
Adam Beili 863637a27e
Merge branch 'master' into KHR_materials_emissive_strength 2022-11-18 16:04:32 +02:00
Jan Krassnigg 08f2f0f82f Don't hide out-of-memory during FBX import 2022-11-18 13:50:33 +01:00
Kim Kulling 11fe77c446
Merge pull request #4800 from assimp/kimkulling/add_missing_header_issue-4720
Add missing header for Ubuntu 16 and Mac
2022-11-18 11:57:57 +01:00
Kim Kulling 3c51eafaf4
Add missing headerh will be needed on Ubuntu
- closes https://github.com/assimp/assimp/issues/4720
2022-11-18 11:39:51 +01:00
Adam Beili b8b515cbed
Merge branch 'master' into refactor/KHR_material_specular 2022-11-17 20:31:40 +02:00
Aaron Gokaslan b2cfe47d4e
Merge branch 'master' into modernize-smartptrs-literals 2022-11-17 12:22:08 -05:00
Kim Kulling 7f35bfb9e3
Merge branch 'master' into KHR_materials_emissive_strength 2022-11-15 21:37:36 +01:00
Kim Kulling 97d7f685ba
Merge pull request #4794 from assimp/kimkulling/prepare_submodule_update
Update dependabot.yml
2022-11-13 20:48:44 +01:00
Kim Kulling 49b3649264
Add submodule update. 2022-11-13 19:33:12 +01:00
Kim Kulling bea3924fce
Update dependabot.yml
- Add update of submodules
2022-11-13 19:32:09 +01:00
Adam ffaf378ee6 fixed misnamed matkey 2022-11-10 20:37:46 +02:00
Adam Beili ce7a52fd19
Merge branch 'master' into refactor/KHR_material_specular 2022-11-10 20:21:30 +02:00
Adam 822b240694 Support both pbrSpecGlos and materials_specular 2022-11-08 23:09:50 +02:00
Adam Beili 95d98ec98b
fixed indentation error 2022-11-08 20:55:20 +02:00
Adam Beili 49bc22ddb5
Merge branch 'master' into KHR_materials_emissive_strength 2022-11-08 20:51:20 +02:00
Aaron Gokaslan 3730b7414f Use make_shared in IFCBoolean 2022-11-08 11:30:53 -05:00
Aaron Gokaslan d635bc6914 Fix some indentation 2022-11-08 11:19:12 -05:00
Aaron Gokaslan ccfb175460 Apply various clang-tidy checks for smartprs and modern C++ types 2022-11-08 11:03:55 -05:00
Kim Kulling cfed74516b
Merge pull request #4785 from Skylion007/add-missing-std-move
chore: add missing std moves and perfect forwards
2022-11-08 15:03:29 +01:00
Kim Kulling b717b1cd3e
Retrigger the build
Fix review findings
2022-11-08 13:39:56 +01:00
Aaron Gokaslan 97cb1c6b15 Fix perfect fowards 2022-11-07 11:01:16 -05:00
Aaron Gokaslan 5a0df03d2b Fix another missing move in glTFCommon.h 2022-11-07 09:34:00 -05:00
Adam Beili 945d93b46a fixed indentation 2022-11-04 09:37:28 -07:00
Adam 852ea8325c Added support for KHR_materials_emissive_strength
according to spec https://github.com/KhronosGroup/glTF/tree/main/extensions/2.0/Khronos/KHR_materials_emissive_strength
2022-11-03 23:11:21 +02:00
Aaron Gokaslan 899f8e1d17 Remove redundant ctor 2022-11-03 12:46:40 -04:00
Aaron Gokaslan 02378b5e70 Add one more missing move 2022-11-03 12:36:58 -04:00
Aaron Gokaslan 8da3d277c7 add missing std moves 2022-11-03 12:35:10 -04:00
Kim Kulling 9a5d628232
Merge pull request #4776 from assimp/kimkulling/fix_nullptr_dereferecing_issue-4771
Fix: Avoid nullptr dereferencing + refactorings.
2022-10-29 17:25:06 +02:00
Kim Kulling 99e515fbfd Fix:Fix possible nullptr dereferencing + refactorings. 2022-10-29 17:08:26 +02:00
Kim Kulling c2967cf79a
Merge pull request #4759 from Let0s/trailing_zero_fix_collada_exporter
Fixed error with trailing zero symbol as placeholder character
2022-10-23 18:34:28 +02:00
Sergey ac87b9ce7e fixed error with trailing zero symbol as placeholder character 2022-10-19 09:30:32 +03:00
Kim Kulling f8f12c8609
Merge pull request #4755 from emvivre/master
* fix bug reading ply file in case of presence of "end_header\n<BINARY_DATA>..." with <BINARY_DATA> starting by "\n"
2022-10-18 21:13:35 +02:00
Kim Kulling 35136bc90c
Merge branch 'master' into master 2022-10-18 19:25:14 +02:00
Kim Kulling 57c156019f
Merge pull request #4761 from assimp/kimkulling/fix_missing_double_export_for_json_issue-4677
Fix: Add missing ahndling for double export in json
2022-10-18 19:22:01 +02:00
Kim Kulling 07aef23d24 Fix: Add missing ahndling for double export in json 2022-10-18 19:05:04 +02:00
emvivre a77dcffb19
Merge branch 'master' into master 2022-10-17 11:20:33 +02:00
Kim Kulling a3c209f2ca
Merge pull request #4757 from assimp/kimkulling/Fix_link_openddl_static_when_enabling_static_lib_issue-4516
Use correct flags for openddl for static libs
2022-10-16 18:46:22 +02:00
Kim Kulling e7cea5a283 Use correct flags for openddl for static libs 2022-10-16 18:30:45 +02:00
emvivre 0bef3a2e0b
Merge branch 'master' into master 2022-10-16 15:05:54 +02:00
Kim Kulling 565539bb68
Merge pull request #4756 from assimp/kimkulling/fix_use_correct_eps_in_interpolation_issue-4751
FIX: Use correct epsilon
2022-10-15 18:12:56 +02:00
emvivre fad49e0d12
Merge branch 'master' into master 2022-10-15 18:08:08 +02:00
Kim Kulling 4ac3b1fef5 FIX: Use correct epsilon 2022-10-15 16:11:02 +02:00
Kim Kulling e2f54d3c48
Merge pull request #4754 from rhabacker/master
Fix build error: ‘temp’ may be used uninitialized in this function
2022-10-15 09:16:36 +02:00
François Lozes e17976e6e2 * fix bug reading ply file in case of presence of "end_header\n<BINARY_DATA>..." with <BINARY_DATA> starting by "\n" 2022-10-14 13:16:18 +02:00
Ralf Habacker 3705336467 Fix build error: ‘temp’ may be used uninitialized in this function [-Werror=maybe-uninitialized]
Fixes #4753
2022-10-13 08:30:04 +02:00
Kim Kulling 5a89d6fee1
Merge pull request #4744 from slinky55/clang-fix
Fixed issue with clang complaining about sprintf and vsprintf being depreciated
2022-10-06 08:13:53 +02:00
Kim Kulling 2e6c2315a2
Merge branch 'master' into clang-fix 2022-10-05 16:54:19 +02:00
Kim Kulling 002d50a54d
Merge pull request #4745 from cwoac/fix_defaults
fix incorrect documentation of defaults
2022-10-04 20:47:04 +02:00
Oliver Matthews 29032b176b
fix incorrect documentation of defaults 2022-10-03 11:49:38 +00:00
slinky55 e0fb1674d1 Merge branch 'clang-fix' of github.com:slinky55/assimp into clang-fix 2022-09-30 22:04:11 -04:00
slinky55 38ccb7e6c9 Used sizeof for buffer sizes instead of hardcoding values 2022-09-30 22:03:59 -04:00
slinky55 5f28370f7f
Merge branch 'master' into clang-fix 2022-09-30 21:57:32 -04:00
Kim Kulling b70277e1ab
Merge pull request #4738 from FlorianBorn71/MakeFBXParserResilientToMissingStreams
Make FBX parser resilient to missing data streams
2022-09-30 10:05:42 +02:00
slinky55 e2e45f7a14 Fixed issue with clang complaining about sprintf being depreciated 2022-09-30 00:34:33 -04:00
Kim Kulling 981677d4b9
Merge branch 'master' into MakeFBXParserResilientToMissingStreams 2022-09-30 00:13:45 +02:00
Kim Kulling 4b65d65af3
Merge pull request #4742 from feishengfei/master
FIX: C++ std::tuple constexpr initial list on old compiler
2022-09-29 22:20:15 +02:00
felix 0be5c567c9 FIX: C++ std::tuple constexpr initial list on old compiler [cont 1] 2022-09-29 23:34:23 +08:00
Kim Kulling 232d809ecc
Merge branch 'master' into master 2022-09-29 16:48:45 +02:00
Kim Kulling 816b8e6156
Update utglTF2ImportExport.cpp
Needed some change of scenery and optimized this a little bit.
2022-09-29 16:48:15 +02:00
feishengfei 789168ba31 FIX: C++ std::tuple constexpr initial list on old compiler 2022-09-29 09:38:40 +08:00
Kim Kulling ca11fceb65
Merge pull request #4734 from sashashura/patch-7
GitHub Workflows security hardening
2022-09-27 15:31:54 +02:00
Kim Kulling 92c7419a28
Merge branch 'master' into patch-7 2022-09-27 14:37:18 +02:00
Kim Kulling e477533a6d
Merge pull request #4737 from p12tic/prefix-stb-image-symbols
Prefix symbols from stb_image.h
2022-09-27 13:58:32 +02:00
Povilas Kanapickas f6a590065c Prefix symbols from stb_image.h
This makes it possible to link assimp statically into an executable with
another static library that includes stb_image.h without hiding its
symbols.
2022-09-23 04:08:21 +03:00
Povilas Kanapickas 22494bde17 Don't include stm_image implementation if using stb library from Hunter
Hunter compiles its own stb library binaries. Currently a second copy is
compiled by defining STB_IMAGE_IMPLEMENTATION in Assimp.cpp. This may
cause hard to understand bugs if this compiled copy ever becomes
different from what Hunter supplies.
2022-09-23 04:08:20 +03:00
Kim Kulling 9510132f3d
Merge branch 'master' into MakeFBXParserResilientToMissingStreams 2022-09-21 14:40:37 +02:00
Kim Kulling 9a11cabb06
Merge pull request #4739 from assimp/kimkulling/update-newer-visualsudio-versions
Introduce newer versions for MSVC Version
2022-09-21 14:39:38 +02:00
Kim Kulling 18cbe89a4c
Introduce newer versions for MSVC Version 2022-09-21 13:45:21 +02:00
Florian Born 7eb9edf0b9 Make FBX parser resilient to missing data streams 2022-09-21 11:45:54 +02:00
Kim Kulling 65b14ef79d
Merge pull request #4736 from assimp/kimkulling/fix_heap-buffer-overflow_in_md5_issue-4965
FIX: Fix head overflow in MD5-parser.
2022-09-20 21:52:13 +02:00
Kim Kulling 6415c0bfc9 FIX: Use attribute to fix warning. 2022-09-20 21:39:09 +02:00
Kim Kulling 1f61f0c3de FIX: Caculate buffer end pointer after initing all attributes 2022-09-20 21:35:44 +02:00
Kim Kulling f1766c4bd5 FIX: Fix head overflow in MD5-parser. 2022-09-20 21:03:58 +02:00
Alex 79c9c82026 build: harden sanitizer.yml permissions
Signed-off-by: Alex <aleksandrosansan@gmail.com>
2022-09-19 23:32:11 +02:00
Alex f39606589e build: harden ccpp.yml permissions
Signed-off-by: Alex <aleksandrosansan@gmail.com>
2022-09-19 23:31:58 +02:00
Kim Kulling a165dbc6ff
Merge pull request #4732 from assimp/kimkulling/reorganize_doc
IMP: Reorganize doc
2022-09-18 21:05:07 +02:00
Kim Kulling 295b0f4dbf
Merge branch 'master' into kimkulling/reorganize_doc 2022-09-18 20:50:40 +02:00
Kim Kulling c976ceec90
Merge pull request #4730 from waebbl/fix-version
Adjust cmake version
2022-09-18 19:32:53 +02:00
Kim Kulling be2eaac5a7 IMP: Reorganize doc 2022-09-18 19:31:48 +02:00
Kim Kulling 9d797c1489
Merge branch 'master' into fix-version 2022-09-18 19:11:34 +02:00
Kim Kulling 8d9a0f777d
Merge pull request #4731 from assimp/kimkulling/add_check_for_wall_enable_issue-4652
Add check for wall switch from cmake
2022-09-18 18:57:44 +02:00
Kim Kulling 704a187c90 FIX: Fix not initialized enums in unittest. 2022-09-18 18:10:56 +02:00
Kim Kulling 34eaf2d092 FIX: Initialize uninitialized enum in unittest. 2022-09-18 17:36:21 +02:00
Kim Kulling f59dd695c8 FIX: try to undefined behaviour by static_cast. 2022-09-18 16:03:54 +02:00
Kim Kulling 128922a798 FIX: Update unity build include file for gtest 2022-09-18 13:17:35 +02:00
Kim Kulling 2324e1ea51 Add missing file from gtest 2022-09-18 10:08:14 +02:00
Kim Kulling 09fe87b6d4 Googletest: Update to 1.12.1 2022-09-18 09:58:12 +02:00
Kim Kulling b3c7bdbdd6 Add check for wall switch from cmake 2022-09-17 18:16:42 +02:00
Bernd Waibel 8ce6f5ad27 Adjust cmake version
Closes: https://github.com/assimp/assimp/issues/4729
Signed-off-by: Bernd Waibel <waebbl-gentoo@posteo.net>
2022-09-17 15:21:57 +02:00
Kim Kulling 1944c45944
Merge pull request #4728 from assimp/kimkulling/fix_treeview_issue-4726
Fix: Use ASCII treeview in assimp-cmd.
2022-09-17 08:57:23 +02:00
Kim Kulling 93e356b47d
Merge branch 'master' into kimkulling/fix_treeview_issue-4726 2022-09-17 01:34:36 +02:00
Kim Kulling ff0c50236b
Merge pull request #4723 from ranpro/patch-1
Missing path
2022-09-16 23:55:04 +02:00
Kim Kulling c67ff12b06
Merge branch 'master' into patch-1 2022-09-16 23:12:19 +02:00
Kim Kulling 4804101f1d
Merge pull request #4721 from assimp/kimkulling/fix-pointcloud-config-doc
Fix config documentation for STL pointcloud export
2022-09-16 23:12:05 +02:00
Kim Kulling 7ebe21958d FIX: Fix review findings 2022-09-16 22:13:58 +02:00
Kim Kulling e4c77aa4fa Fix: Use ASCII treeview in assimp-cmd. 2022-09-16 21:55:14 +02:00
曾是然 9fab0af16a
Missing path 2022-09-16 14:54:20 +08:00
Kim Kulling 0dd5cfe3bf
Fix config documentation for STL pointcloud export 2022-09-12 18:32:28 +02:00
Kim Kulling 7be7e5d93e
Merge pull request #4717 from Skylion007/perfect-forward-utMaybe
Perfect forward val to utMaybe.cpp
2022-09-12 10:15:03 +02:00
Kim Kulling b2ea018fd5
Use user-define element destructor. 2022-09-11 17:04:58 +02:00
Aaron Gokaslan 20755f4200 Perfect forward val to utMaybe 2022-09-09 10:55:45 -04:00
Kim Kulling 7b874983d0
Merge branch 'master' into SmallAllocationFixInFBXLoader 2022-09-08 20:15:52 +02:00
Kim Kulling 9519a62dd2
Merge pull request #4715 from assimp/kimkulling/cleanup_after_review
Kimkulling/cleanup after review
2022-09-08 20:13:43 +02:00
Kim Kulling 6a1a7c43cc
Update utMaybe.cpp 2022-09-08 19:32:42 +02:00
Kim Kulling ad1d0fcb45
Merge branch 'master' into kimkulling/cleanup_after_review 2022-09-08 19:09:49 +02:00
Kim Kulling 3af53a42aa
Fix typo 2022-09-08 19:06:05 +02:00
Kim Kulling fff977c0b5
Fix review findings. 2022-09-08 18:54:08 +02:00
Kim Kulling d475c132bf
Merge pull request #4716 from HiMemX/master
Minor obj export bugfix
2022-09-08 12:51:31 +02:00
HiMemX 4c9d270a5e
-Vertex export fix 2022-09-07 23:10:31 +02:00
HiMemX 7872297ab7
Delete ObjExporter.cpp 2022-09-07 23:10:06 +02:00
HiMemX 396e7bcdb4
-Obj vertex fix 2022-09-07 23:09:50 +02:00
Kim Kulling 7116f46672 Add missing file 2022-09-07 21:28:04 +02:00
Kim Kulling 8895ecf243
Merge branch 'master' into kimkulling/cleanup_after_review 2022-09-07 21:26:54 +02:00
Kim Kulling 362ff08855 Add doc + small unittest 2022-09-07 21:25:46 +02:00
Kim Kulling edaf7fb7eb
Merge pull request #4713 from ChrisBlueStone/master
Fix aiBone.mOffsetMatrix documentation
2022-09-05 19:47:02 +02:00
Kim Kulling af0b29f30d
Merge branch 'master' into master 2022-09-05 19:09:19 +02:00
Kim Kulling 57f4163c67
Merge pull request #4702 from Gargaj/assbinlights
add missing light data to assbin import/export
2022-09-05 18:29:59 +02:00
Chris 4b0e38e44f Fix aiBone.mOffsetMatrix documentation
Fixed the comment on the `mOffsetMatrix` property to be correct.
See https://assimp-docs.readthedocs.io/en/latest/API/API-Documentation.html#_CPPv46aiBone
See also https://stackoverflow.com/a/73603994
2022-09-05 11:00:57 -05:00
Gargaj d15b4ad7ef add missing light data to assbin import/export 2022-09-05 16:09:24 +02:00
Kim Kulling fd6c534efc
Merge pull request #4707 from Gargaj/patch-1
fix vertices being joined duplicating weights
2022-09-04 10:51:07 +02:00
Kim Kulling 2a667cc637
Merge branch 'master' into patch-1 2022-09-04 09:52:42 +02:00
Kim Kulling de83245f42
Merge pull request #4703 from Skylion007/explicitly-default-dtors
clang-tidy: explicitly default all empty ctors and dtors
2022-09-03 21:25:20 +02:00
Aaron Gokaslan 411171fa45 Apply some more modernize-use-emplace 2022-09-02 11:20:02 -04:00
Aaron Gokaslan e3b01e10db apply fixes to more headers 2022-09-01 12:28:45 -04:00
Aaron Gokaslan 4c6652f5b0 Add a handful of missing fixes 2022-09-01 11:37:53 -04:00
Gargaj a22aa75bca
fix vertices being joined duplicating weights
This bug causes weights to duplicate, i.e. one bone will have several (equal) weights assigned to the same vertex - which then has the potential to cause even bigger problems when combined with `LimitBoneWeightsProcess`.
2022-08-31 22:27:34 +02:00
Kim Kulling f527e56f22
Merge branch 'master' into explicitly-default-dtors 2022-08-30 22:21:06 +02:00
Kim Kulling 80ae9afe4e Add missing documentation. 2022-08-30 21:55:52 +02:00
Kim Kulling 2c3538fc46
Merge pull request #4705 from assimp/kimkulling/cleanup_after_review
[WIP] Code cleanup and some new unittests for edgecases.
2022-08-30 21:54:14 +02:00
Kim Kulling fbb69df8be
Update utBaseProcess.cpp 2022-08-30 20:54:23 +02:00
Kim Kulling 25d7510b8c
Merge branch 'master' into kimkulling/cleanup_after_review 2022-08-29 22:17:39 +02:00
Kim Kulling 6539b8685f
Update utBaseProcess.cpp 2022-08-29 17:48:57 +02:00
Kim Kulling e34becff62
Enable portable linkage to fix build 2022-08-29 11:43:32 +02:00
Kim Kulling 8352f0478a
Merge pull request #4704 from JG-Adams/patch-1
Wrong object is created here!
2022-08-29 11:23:38 +02:00
Kim Kulling 0571ee21fb Introduce unittest for BaseProcess. 2022-08-28 20:58:52 +02:00
Kim Kulling 02e6c425f9 Fix ordering of initalizer list 2022-08-27 15:20:53 +02:00
Kim Kulling e4c383324a Use string for constexpr 2022-08-27 15:11:54 +02:00
Kim Kulling 14186bcd6b Code cleanup and some new unittests for edgecases. 2022-08-27 14:07:45 +02:00
J.G.Adams 9cd723e282
Wrong object is created here!
If I'm not mistaken. Because this is originally push_back(aniMeshVertex) instead of push_back(v).
And the fact that aniMeshVertex is just getting created and destroyed for nothing.
It need to be replaced with this then? A Clang-tidy syntax to create the same aniMeshVertex.

I found this in pull request #4527 I think it may need to be reviewed too.
2022-08-26 19:12:11 -04:00
Aaron Gokaslan e93fa6699a Manually fix up 100 more instances where it should be defaulted 2022-08-25 12:20:13 -04:00
Aaron Gokaslan 6fa21dcc6e Explicitly default all empty dtors 2022-08-25 11:32:59 -04:00
Kim Kulling 46e571e497
Merge pull request #4700 from Skylion007/skylion007/modernize-use-emplace
Apply modernize-use-emplace clang-tidy rule
2022-08-25 10:50:11 +02:00
Kim Kulling 2b30b7e062
Merge branch 'master' into skylion007/modernize-use-emplace 2022-08-24 11:48:30 +02:00
Kim Kulling 066f3f5f14
Merge pull request #4701 from turol/x3d-fixes
Fix out of bounds reads in X3D importer
2022-08-24 11:44:50 +02:00
Kim Kulling 659195d852
Fix the fixme
- Based on the implementation in top of the last one I guess I know how to fix that.
- Replacing push_back by emplace_back
2022-08-24 11:17:10 +02:00
Turo Lamminen 0d8723a3eb Add FIXME comment 2022-08-24 10:43:40 +03:00
Turo Lamminen 654ae3af4e Fix out of bounds access in X3D loader 2022-08-24 10:42:01 +03:00
Kim Kulling 88c69d4edc
Merge pull request #4693 from vkaytsanov/master
Remove exception on glTF 2.0 loading
2022-08-23 23:36:26 +02:00
Aaron Gokaslan 25add7baa2
Merge branch 'master' into skylion007/modernize-use-emplace 2022-08-23 15:14:48 -04:00
Kim Kulling 87f601531c
Merge branch 'master' into master 2022-08-23 21:14:45 +02:00
Kim Kulling aa521569f7
Merge pull request #4699 from turol/smd-fixes
SMD fixes
2022-08-23 21:08:42 +02:00
Aaron Gokaslan b176061c41 Remove extra space in emplace insertions 2022-08-23 11:46:30 -04:00
Aaron Gokaslan 27edb43600 Apply modernize-use-emplace clang-tidy rule 2022-08-23 11:41:49 -04:00
Turo Lamminen f890bc791f Fix out of bounds write 2022-08-23 14:38:27 +03:00
Turo Lamminen 68bc6a06b9 Use unique_ptr for aaiBones instead of explicit delete[] 2022-08-23 14:17:56 +03:00
Turo Lamminen 03397d42e2 Use unique_ptr for aaiFaces instead of explicit delete[] 2022-08-23 14:15:06 +03:00
Turo Lamminen 795c0abcc8 Apply modernize-loop-convert to the simplified loop 2022-08-23 14:10:23 +03:00
Turo Lamminen 1ca44acebc Simplify a for loop 2022-08-23 14:10:23 +03:00
Turo Lamminen 712671e81a Apply modernize-loop-convert again 2022-08-23 14:10:20 +03:00
Turo Lamminen 5f28c51c03 Apply clang-tidy modernize-loop-convert transformation 2022-08-23 13:59:42 +03:00
Kim Kulling 04997ccbf3
Merge pull request #4697 from assimp/kimkulling/patch-issue-4676
[WIP] Use ai_Real to write correct accuracy
2022-08-18 19:04:28 +02:00
Kim Kulling 2013ae114a
[WIP] Use ai_Real to write correct accuracy
- closes https://github.com/assimp/assimp/issues/4676
2022-08-18 17:41:07 +02:00
Turo Lamminen 94c3ec57af
Merge pull request #4679 from turol/blender-fixes
(Mostly) Blender fixes
2022-08-18 15:49:16 +03:00
vkaytsanov 4c143eb581
Merge branch 'master' into master 2022-08-17 12:01:44 +03:00
Turo Lamminen 1c59de42fc Make some blender fields warn if missing instead of error 2022-08-17 11:42:32 +03:00
Turo Lamminen d2dc0401c3 Use weak pointer for ModifierData prev to avoid memory leak 2022-08-17 11:42:32 +03:00
Turo Lamminen 30555282fe Use weak pointer for ElemBase last to avoid memory leak 2022-08-17 11:42:32 +03:00
Turo Lamminen 219dbbd4af Fix crash of "assimp info" with no parameters 2022-08-17 11:42:32 +03:00
Turo Lamminen 56b6446913 Use weak pointer for MirrorModifierData mirror_ob to avoid memory leak 2022-08-17 11:42:32 +03:00
Turo Lamminen 90d1464405 Remove set but unused variables 2022-08-17 11:42:32 +03:00
Turo Lamminen 2e64880abf Inherit SubsurfModifierData and MirrorModifierData from SharedModifierData
This makes the cast in BlenderModifierShowcase::ApplyModifiers work
correctly and not invoke UB.
2022-08-17 11:42:32 +03:00
Turo Lamminen e43e3e11b9 Move SharedModifierData definition to BlenderScene.h 2022-08-17 11:42:32 +03:00
Turo Lamminen 2c1943cd10 Improve BlenderDNA error message 2022-08-17 11:42:32 +03:00
Kim Kulling a0f375162d
Merge pull request #4453 from Promit/master
Added support for more bone weights in GLTF2
2022-08-16 21:20:23 +02:00
Kim Kulling 89c4640744
Merge branch 'master' into master 2022-08-16 20:53:45 +02:00
vkaytsanov d469c7b161 Remove exception on glTF 2.0 loading 2022-08-16 15:52:43 +03:00
Kim Kulling 0dabe020a9
Merge pull request #4681 from Koekto-code/master
Fix problems setting DirectX_LIBRARY
2022-08-15 15:25:41 +02:00
Kim Kulling c9fc957535
Merge branch 'master' into master 2022-08-15 15:05:19 +02:00
Kim Kulling bd64cc88df
Merge pull request #4678 from villevoutilainen/master
Use unqualified uint32_t everywhere in FBXBinaryTokenizer
2022-08-13 08:33:46 +02:00
Kim Kulling baf14f6c16
Merge branch 'master' into master 2022-08-12 14:09:04 +02:00
Koekto-code 0e4ba1fdd1
Fix problems setting DirectX_LIBRARY
DirectX_LIBRARY was always clearing, though DirectX_PREFIX_PATH was not changed. This is because I had some semicolons at begin of DirectX_PREFIX_PATH and the macro `clear_if_changed` discarded them. Now it saves all extra semicolons and check passes.
2022-08-11 22:10:16 +03:00
Kim Kulling 888468e8f7
Merge pull request #4680 from sashashura/patch-6
Fixes Heap-buffer-overflow READ in Assimp::ASE::Parser::ParseLV1SoftSkinBlock
2022-08-11 11:47:48 +02:00
Bengt Rosenberger 76daadb95d
Merge branch 'master' into gltf2_metadata_export 2022-08-10 23:06:41 +02:00
Aleks L 4b85eb59c2
Fixes Heap-buffer-overflow READ in Assimp::ASE::Parser::ParseLV1SoftSkinBlock 2022-08-10 15:30:07 +01:00
Ville Voutilainen 253f8bfa62 Use unqualified uint32_t everywhere in FBXBinaryTokenizer
The use of qualified std::uint32_t requires including <cstdint> instead
of <stdint.h> on some implementations, and that breaks the build of Qt 6
on GCC 13. Just use the unqualified name everywhere.
2022-08-09 01:54:31 +03:00
Kim Kulling 17c6491c91
Merge pull request #4674 from assimp/kimkulling/do_not_add_dot_when_extension_is_empty_issue-4670
Kimkulling/do not add dot when extension is empty issue 4670
2022-08-06 21:22:54 +02:00
Kim Kulling e419d6898c Merge branch 'master' into kimkulling/do_not_add_dot_when_extension_is_empty_issue-4670 2022-08-06 18:40:07 +02:00
Kim Kulling 4aaa807704 Add dot only when the extension is not empty. 2022-08-06 18:37:12 +02:00
Kim Kulling b3b064eb69
Merge pull request #4673 from assimp/kimkulling/introduce-fallthroughs_issue-4654
Use  [[fallthrough]]; to mark whished fallthroughs
2022-08-06 09:07:30 +02:00
Kim Kulling ec131d0345
Update CMakeLists.txt 2022-08-05 21:47:58 +02:00
Kim Kulling 1b0682297d
Update to c++17 2022-08-05 21:06:10 +02:00
Kim Kulling 5084a4d155
Use [[fallthrough]]; to mark whished fallthroughs
- closes https://github.com/assimp/assimp/issues/4654
2022-08-05 20:49:37 +02:00
Kim Kulling 0422dff537
Merge pull request #4668 from Fiskmans/patch-1
Fixed typo
2022-08-03 21:15:59 +02:00
Kim Kulling 2c4f51e863
Merge branch 'master' into patch-1 2022-08-03 14:53:39 +02:00
Kim Kulling 9e0261ea7a
Merge pull request #4669 from assimp/kimkulling/parallel-github-action
Experiment: try to enable parallel build
2022-08-03 14:53:31 +02:00
Bengt Rosenberger abfe8ad413 Added suggested changes and fixed automated check errors 2022-08-01 14:39:10 +02:00
Bengt Rosenberger f20071d740 Merge remote-tracking branch 'origin/gltf2_metadata_export' into gltf2_metadata_export 2022-08-01 14:12:33 +02:00
Bengt Rosenberger da58fbe8fb Got rid of gltf2::ExtrasValue and used gltf2::CustomExtension instead 2022-08-01 14:12:27 +02:00
Bengt Rosenberger cb4d0ab7aa Added missing member copy in gltf2::ExtrasValue ctor. 2022-08-01 14:12:27 +02:00
Bengt Rosenberger 233198baef Fixed extras presence check in gltf2 import. 2022-08-01 14:12:27 +02:00
Bengt Rosenberger 99c3104588 Rewrote gltf2 node extras import and added node extras export.
No support for AI_AIVECTOR3D metadata type. No support for json arrays of metadata, just json objects.
2022-08-01 14:12:27 +02:00
Kim Kulling 8c63ed0455
Experiment: try< to enable parallel build 2022-08-01 09:46:08 +02:00
Måns Andersen 0ada8b3b5e
Fixed typo 2022-07-31 22:08:27 +02:00
Kim Kulling dabaa7bdae
Merge pull request #4666 from assimp/kimkulling/waveform_obj_optimizations
Improvements and optimizations for the obj-parsers.
2022-07-31 21:09:44 +02:00
Kim Kulling eac0876c9b Refactoring: Use correct prefix for attributes in ObjImport. 2022-07-31 20:54:58 +02:00
Kim Kulling dddfb74902 Fix another mem-leak 2022-07-31 13:37:42 +02:00
Kim Kulling c349035cd1 Fix face memleak. 2022-07-31 12:10:43 +02:00
Kim Kulling 85f86ec076 Revert using face as pod type 2022-07-30 21:52:33 +02:00
Kim Kulling 0513eff44f
Merge branch 'master' into kimkulling/waveform_obj_optimizations 2022-07-30 13:15:42 +02:00
Kim Kulling f6bcb160d0 Improvements of obj-parsers. 2022-07-30 12:58:09 +02:00
Kim Kulling 75e678a0c5
Merge pull request #4656 from waebbl/update-version-tag
Update version tag
2022-07-30 09:31:14 +02:00
Bernd Waibel fb653e8381 Update version tag
Closes: https://github.com/assimp/assimp/issues/4655
Signed-off-by: Bernd Waibel <waebbl-gentoo@posteo.net>
2022-07-29 23:10:42 +02:00
Kim Kulling 46aa7a548c
Merge pull request #4632 from enginmanap/master
Fix warnings that are causing build fails with specific build flags
2022-07-29 21:20:07 +02:00
Kim Kulling 340d800739
Merge branch 'master' into master 2022-07-29 20:42:56 +02:00
Kim Kulling 8abacebad7
Merge pull request #4635 from Koekto-code/Koekto-code-patch-1
Fix mingw include in assimp_cmd.rc
2022-07-29 20:37:34 +02:00
Kim Kulling 173fad738f
Merge branch 'master' into Koekto-code-patch-1 2022-07-29 19:54:41 +02:00
Kim Kulling cb43690aad
Merge pull request #4538 from luca-della-vedova/fix/collada_parser_sid
ColladaParser - Store sid in mSID field
2022-07-29 19:47:57 +02:00
Kim Kulling 4f6640278a
Merge branch 'master' into fix/collada_parser_sid 2022-07-29 19:17:43 +02:00
Kim Kulling 53a4b43ec1
Merge pull request #4643 from sashashura/patch-1
Fixes Heap-buffer-overflow in SuperFastHash
2022-07-29 19:15:58 +02:00
Kim Kulling b0210cb3cf
Merge branch 'master' into patch-1 2022-07-29 17:48:14 +02:00
Bengt Rosenberger 2b804c638f
Merge branch 'master' into gltf2_metadata_export 2022-07-25 21:48:46 +02:00
Engin Manap 7c75a4c59b
Merge branch 'master' into master 2022-07-24 12:31:36 -07:00
Kim Kulling 3c253ca3e5
Merge pull request #4644 from sashashura/patch-2
Fixes Heap-use-after-free in Assimp::DXFImporter::ExpandBlockReferences
2022-07-24 12:23:34 +02:00
Kim Kulling 73542f3830
Merge branch 'master' into patch-2 2022-07-24 12:11:18 +02:00
Kim Kulling 9bd2b4da50
Merge pull request #4645 from sashashura/patch-3
Fixes Heap-buffer-overflow in std::__1::basic_string<char, std::__1::…
2022-07-24 12:08:51 +02:00
Bengt Rosenberger bdee65e577 Got rid of gltf2::ExtrasValue and used gltf2::CustomExtension instead 2022-07-22 01:33:05 +02:00
Bengt Rosenberger 517fd3c76c Added missing member copy in gltf2::ExtrasValue ctor. 2022-07-22 01:07:42 +02:00
Bengt Rosenberger 5a2b811ba3 Fixed extras presence check in gltf2 import. 2022-07-22 01:04:05 +02:00
Bengt Rosenberger 417481d17f Rewrote gltf2 node extras import and added node extras export.
No support for AI_AIVECTOR3D metadata type. No support for json arrays of metadata, just json objects.
2022-07-22 00:44:51 +02:00
Kim Kulling f07bc2c5b9
Merge branch 'master' into patch-3 2022-07-18 15:19:27 +02:00
Kim Kulling 749fe898b1
Merge pull request #4646 from sashashura/patch-4
Fixes Heap-buffer-overflow in Assimp::ObjFileParser::getFace
2022-07-18 15:18:59 +02:00
Kim Kulling 05ececc387
Merge branch 'master' into patch-4 2022-07-18 14:06:29 +02:00
Kim Kulling 316f6e841c
Merge pull request #4647 from sashashura/patch-5
Fixes Crash in Assimp::ObjFileMtlImporter::getFloatValue
2022-07-18 14:05:50 +02:00
sashashura 9ddc3a64d7
Fixes Crash in Assimp::ObjFileMtlImporter::getFloatValue 2022-07-16 13:55:08 +01:00
sashashura 772cfdc757
Fixes Heap-buffer-overflow in Assimp::ObjFileParser::getFace 2022-07-16 13:50:54 +01:00
sashashura 94c0e9d890
Fixes Heap-buffer-overflow in std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<ch 2022-07-16 13:48:39 +01:00
sashashura a4274930e4
Fixes Heap-use-after-free in Assimp::DXFImporter::ExpandBlockReferences 2022-07-16 13:46:50 +01:00
sashashura 0c07ea7c71
Fixes Heap-buffer-overflow in SuperFastHash 2022-07-16 13:44:46 +01:00
Kim Kulling 0a9a23a056
Merge pull request #4642 from assimp/kimkulling/fix_stb_header
Fix uninitialized variable.
2022-07-16 14:15:53 +02:00
Kim Kulling bc6acedb33
Fix uninitialized variable. 2022-07-16 13:57:51 +02:00
Engin Manap 684909a691 Fix comments on PR
1) Use default instead of empty destructor
2) Remove debug code
2022-07-09 17:23:40 +02:00
Engin Manap 3e424f8119
Merge branch 'assimp:master' into master 2022-07-09 17:17:01 +02:00
Koekto-code d109db152c
Use winresrc.h for mingw 2022-07-09 15:32:24 +03:00
Kim Kulling d8f42279a6
Merge pull request #4630 from tanolino/fix_stl_for_over_4GB
Fix stl for over 4 gb
2022-07-09 10:46:34 +02:00
Kim Kulling 6ad8ea395a
Merge branch 'master' into fix_stl_for_over_4GB 2022-07-09 09:58:10 +02:00
Engin Manap e63426b89c Fix collada parser fails on Mixamo exports 2022-07-08 23:42:41 +02:00
Engin Manap 8a90ba8a39 Don't optimize on debug builds 2022-07-08 23:42:16 +02:00
Kim Kulling b2d0ac18cf
Merge pull request #4631 from robertosfield/master
Build fix for compiling against minizip.
2022-07-08 20:53:40 +02:00
Engin Manap 3890b5dff5 Add missing = operator
implicit assignment operator is depricated, these classes were missing
explicit definitions of this operator.
It is causing warnings, specifically  -Werror=deprecated-copy
2022-07-08 18:16:02 +02:00
Engin Manap c3a89fd2d0 Fix non virtual destructor use 2022-07-08 18:16:02 +02:00
Engin Manap ae276987a0 Remove unnecessary const qualifiers
These changes are part of enable -Wall, this specific changes are for
-Werror=ignored-qualifiers
2022-07-08 18:16:02 +02:00
Engin Manap a10abe0283 Add fallthrough comment to switch case
This allows gcc to identify intentional fallthroughs, which are part all
-Wall. Specifically -Werror=implicit-fallthrough
2022-07-08 18:16:02 +02:00
Robert Osfield 8e062792cd Build fix for compiling against minizip. 2022-07-08 12:46:27 +01:00
Kim Kulling 1c646057ce
Merge pull request #4621 from hectorPiteau/patch-1
Fix typo in installation instructions for ubuntu.
2022-07-08 11:43:11 +02:00
Kim Kulling ee3aaf7446
Merge branch 'master' into patch-1 2022-07-08 11:14:22 +02:00
Kim Kulling ab4223f671
Merge pull request #4629 from assimp/kimkulling/fix_leak_in_D3MFOpcPackage_issue-4628
Fix memory leak in D3MFOpcPackage
2022-07-08 11:13:41 +02:00
tanolino c23146bb20
Use size_t for the file size in cpp file
This pointer juggling in combination with STL files >4GB caused some nasty illegal memory access bugs here. So let's fix it.
2022-07-08 10:26:03 +02:00
Kim Kulling c5dfcac08a
Update D3MFOpcPackage.cpp 2022-07-08 10:25:40 +02:00
tanolino 24d110199a
Use size_t for file size instead of unsigned int
This is one step to help us open files with more then 4 GB size.
2022-07-08 10:19:50 +02:00
Kim Kulling e254f80a3a
Fix memory leak in D3MFOpcPackage
- closes https://github.com/assimp/assimp/issues/4628
2022-07-08 10:17:11 +02:00
Kim Kulling a1f9a299e9
Merge pull request #4627 from assimp/kimkulling/remove_assert_from_parser_issue-4626
Remove assertion test
2022-07-08 10:11:44 +02:00
Kim Kulling e59b8fb448
Fix typo 2022-07-08 09:50:04 +02:00
Kim Kulling 70b2db19a8
Remove assertion test
- Code cleanup
- closes https://github.com/assimp/assimp/issues/4626
2022-07-08 09:47:33 +02:00
Hector Piteau e77ab52dba
Merge branch 'master' into patch-1 2022-07-08 14:56:21 +09:00
Kim Kulling 7e4a20f843
Merge pull request #4541 from blackhorse-reddog/master
I ran into an error while processing coloured binary stl. Just a type but better be fixed
2022-07-07 14:37:24 +02:00
Kim Kulling e9b08f35b2
Merge branch 'master' into master 2022-07-07 13:21:08 +02:00
Kim Kulling bac3432733
Merge pull request #4611 from assimp/dependabot/github_actions/actions/checkout-3
Bump actions/checkout from 2 to 3
2022-07-07 11:10:49 +02:00
Hector Piteau 579bd6b13e
Fix typo in installation instructions for ubuntu. 2022-07-07 17:11:58 +09:00
Kim Kulling e3c94c6412
Merge branch 'master' into dependabot/github_actions/actions/checkout-3 2022-07-07 09:26:05 +02:00
Kim Kulling 3ae1a37a41
Merge pull request #4610 from assimp/dependabot/github_actions/actions/upload-artifact-3
Bump actions/upload-artifact from 2 to 3
2022-07-07 09:25:51 +02:00
Kim Kulling 8d5ed5dfe5
Merge branch 'master' into dependabot/github_actions/actions/upload-artifact-3 2022-07-07 09:09:51 +02:00
Kim Kulling 395b9f535e
Merge pull request #4619 from assimp/kimkulling/fix_texture_loading_3mp_issue-4568
Kimkulling/fix texture loading 3MF, reladed issue-4568
2022-07-06 21:21:55 +02:00
Kim Kulling 77a2cdee76 Fix texture fetch for embedded textures in 3mf-files. 2022-07-06 20:59:42 +02:00
Kim Kulling 0db8b3daae Use default destructor. 2022-07-06 20:59:17 +02:00
dependabot[bot] 9a3bde0e6d
Bump actions/upload-artifact from 2 to 3
Bumps [actions/upload-artifact](https://github.com/actions/upload-artifact) from 2 to 3.
- [Release notes](https://github.com/actions/upload-artifact/releases)
- [Commits](https://github.com/actions/upload-artifact/compare/v2...v3)

---
updated-dependencies:
- dependency-name: actions/upload-artifact
  dependency-type: direct:production
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>
2022-07-06 11:41:23 +00:00
Kim Kulling 422ed5279a
Merge branch 'master' into dependabot/github_actions/actions/checkout-3 2022-07-06 13:40:51 +02:00
Kim Kulling 44fad544e6
Merge pull request #4612 from assimp/dependabot/github_actions/actions/cache-3
Bump actions/cache from 2 to 3
2022-07-06 13:40:40 +02:00
dependabot[bot] 15030fb7b1
Bump actions/checkout from 2 to 3
Bumps [actions/checkout](https://github.com/actions/checkout) from 2 to 3.
- [Release notes](https://github.com/actions/checkout/releases)
- [Changelog](https://github.com/actions/checkout/blob/main/CHANGELOG.md)
- [Commits](https://github.com/actions/checkout/compare/v2...v3)

---
updated-dependencies:
- dependency-name: actions/checkout
  dependency-type: direct:production
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>
2022-07-06 07:37:31 +00:00
Kim Kulling 744ed2256b
Merge branch 'master' into dependabot/github_actions/actions/cache-3 2022-07-06 09:37:07 +02:00
Kim Kulling ec2db278e3
Merge pull request #4613 from assimp/dependabot/github_actions/JesseTG/rm-1.0.3
Bump JesseTG/rm from 1.0.2 to 1.0.3
2022-07-06 09:36:49 +02:00
Kim Kulling 2ee7727d86
Merge branch 'master' into dependabot/github_actions/JesseTG/rm-1.0.3 2022-07-06 08:59:58 +02:00
Kim Kulling 13bee0d5e6
Merge pull request #4614 from assimp/kimkulling/fix_bad_alloc_issue-3417
Fix possible bad_alloc exception for invalid file
2022-07-06 00:10:02 +02:00
Kim Kulling eeae6eac26
Update Q3DLoader.cpp 2022-07-05 23:01:18 +02:00
Kim Kulling 2d994e1a28
Fix possible bad_alloc exception for invalid file
- Fuzzer finding
- closes https://github.com/assimp/assimp/issues/3417
2022-07-05 22:50:54 +02:00
dependabot[bot] b05ff26569
Bump JesseTG/rm from 1.0.2 to 1.0.3
Bumps [JesseTG/rm](https://github.com/JesseTG/rm) from 1.0.2 to 1.0.3.
- [Release notes](https://github.com/JesseTG/rm/releases)
- [Commits](https://github.com/JesseTG/rm/compare/v1.0.2...v1.0.3)

---
updated-dependencies:
- dependency-name: JesseTG/rm
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2022-07-05 20:00:56 +00:00
dependabot[bot] 200e43b99d
Bump actions/cache from 2 to 3
Bumps [actions/cache](https://github.com/actions/cache) from 2 to 3.
- [Release notes](https://github.com/actions/cache/releases)
- [Changelog](https://github.com/actions/cache/blob/main/RELEASES.md)
- [Commits](https://github.com/actions/cache/compare/v2...v3)

---
updated-dependencies:
- dependency-name: actions/cache
  dependency-type: direct:production
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>
2022-07-05 20:00:53 +00:00
Kim Kulling c1012b4af0
Merge pull request #4569 from turrisxyz/Dependabot-GitHub-Actions
chore: Included githubactions in the dependabot config
2022-07-05 22:00:22 +02:00
Kim Kulling 4a5ad50828
Merge branch 'master' into Dependabot-GitHub-Actions 2022-07-05 20:50:28 +02:00
Kim Kulling f4c8b55b33
Merge pull request #4597 from luca-della-vedova/fix/collada_empty_animation_name
Fix nested animation name being lost in Collada
2022-07-05 20:50:03 +02:00
Kim Kulling 90b75cd6e7
Merge branch 'master' into fix/collada_empty_animation_name 2022-07-05 20:39:19 +02:00
Kim Kulling 50638f98f5
Merge pull request #4609 from assimp/kimkulling/fix-issue-4238
Try to fix issue 4238
2022-07-05 20:36:57 +02:00
Kim Kulling 5bce9e8ce5
Update MDLMaterialLoader.cpp 2022-07-05 20:09:16 +02:00
Kim Kulling a6b1a35748
Try to fix issue 4238
- Fix possible nullptr dereferencing.
- closes https://github.com/assimp/assimp/issues/4238
2022-07-05 20:05:10 +02:00
Kim Kulling 6d26e91fc1
Merge branch 'master' into fix/collada_empty_animation_name 2022-07-05 09:28:39 +02:00
Kim Kulling 245cd66d11
Merge pull request #4605 from assimp/kimkulling/fix_memleak_in_xmlparser
Fix a memory leak
2022-07-03 08:33:27 +02:00
Kim Kulling 636d8bffe5
Merge branch 'master' into kimkulling/fix_memleak_in_xmlparser 2022-07-02 21:32:24 +02:00
Kim Kulling 9063216893 Fix a memory leak 2022-07-02 21:21:31 +02:00
Kim Kulling 43f060663f
Merge pull request #4601 from assimp/kimkulling/fix_mingw_compilation_issue4586
Use mingw.include
2022-06-30 21:46:55 +02:00
Kim Kulling 55625d1af5 Use mingw.include 2022-06-30 20:58:34 +02:00
Kim Kulling be700a0480
Merge pull request #4598 from assimp/kimkulling/fix-win32-build-with-no-dxsdk9-issue4593
Disable build for tools per default
2022-06-29 15:20:41 +02:00
Kim Kulling eee6269cd1
Diable build for tools per default
- closes https://github.com/assimp/assimp/issues/4593
2022-06-29 11:15:29 +02:00
Luca Della Vedova 0924c4710b
Fix nested animation name being lost in Collada
Signed-off-by: Luca Della Vedova <luca@openrobotics.org>
2022-06-29 11:09:54 +08:00
Kim Kulling e1e8477732
Merge pull request #4596 from assimp/kimkulling/fix_invalid_opengex_token_match
Kimkulling/fix invalid opengex token match
2022-06-28 20:59:37 +02:00
Kim Kulling 96ccaa03a0
Merge branch 'master' into kimkulling/fix_invalid_opengex_token_match 2022-06-28 20:39:54 +02:00
Kim Kulling f76be1a631
Replace debug code by a real test 2022-06-28 20:38:36 +02:00
kimmi 3d692c72ba Fix name of test 2022-06-28 20:31:55 +02:00
kimmi d3c8201614 Fix token match string checks. 2022-06-28 20:31:03 +02:00
Kim Kulling b6f3c8eb15
Merge pull request #4595 from assimp/kimkulling/fix-doc
Update name of package
2022-06-28 18:04:22 +02:00
Kim Kulling 2de95c77a4
Update name of package
- closes https://github.com/assimp/assimp/issues/4594
2022-06-28 17:48:06 +02:00
Kim Kulling 33b672288c
Merge pull request #4542 from hgdagon/master
Fix GNUC check on Windows
2022-06-24 11:02:25 +02:00
Kim Kulling 5598356157
Merge branch 'master' into master 2022-06-24 09:56:09 +02:00
Kim Kulling 6cebe2c1f1
Merge pull request #4581 from Gargaj/w32fix
Fix Windows 32-bit builds
2022-06-24 09:04:47 +02:00
Kim Kulling 855537f232
Merge branch 'master' into master 2022-06-24 09:04:37 +02:00
Kim Kulling be2e6a1b24
Merge branch 'master' into w32fix 2022-06-24 08:31:41 +02:00
Kim Kulling 038ae8c028
Merge pull request #4585 from onurtore/otore19/sandbox
Utilizies AI_CONFIG_IMPORT_REMOVE_EMPTY_BONES flag for Collada meshes.
2022-06-23 16:03:02 +02:00
Onur Berk Töre b392ff5ad1
Merge branch 'master' into otore19/sandbox 2022-06-21 21:34:50 +03:00
Onur Berk Tore 4f06c41802
Fix: Collada header updated 2022-06-21 21:08:11 +03:00
Kim Kulling 3f3f4dc6b7
Merge pull request #4534 from tanolino/patch-2
Inifinite loop on bad import files
2022-06-21 14:01:18 +02:00
Gargaj bca5650578 fix windows 32 bit builds 2022-06-21 13:40:49 +02:00
Kim Kulling fff74a4ac0
Merge branch 'master' into patch-2 2022-06-21 13:39:23 +02:00
Kim Kulling ad2a1546eb
Merge pull request #4584 from kovacsv/delete_unused_variable
Remove unused variable.
2022-06-21 13:38:08 +02:00
Onur Berk Tore c2060a1f7e
Deletion: Removed unnessary header 2022-06-20 23:48:00 +03:00
Onur Berk Tore 1b53f41787
Feature: Utilizes removeEmptyBones flag for Collada 2022-06-20 23:46:29 +03:00
kovacsv 2486a681c1 Remove unused variable. 2022-06-20 21:07:34 +02:00
Kim Kulling 67fe6643c3
Merge pull request #4578 from PercentBoat4164/master
Add support for GCC v12
2022-06-20 00:03:59 +02:00
PercentBoat4164 487a9aca2f Add support for GCC v12 2022-06-16 19:23:55 -04:00
Luca Della Vedova 079b7deb33 Merge branch 'master' of https://github.com/assimp/assimp into fix/collada_parser_sid 2022-06-13 10:20:46 +08:00
hgdagon ce8081bd0a
Merge branch 'master' into master 2022-06-13 00:15:31 +04:00
Kim Kulling b8812d2b4f
Merge pull request #4552 from assimp/kimkulling/create_skeleton_data_issue_4015
[Experimental] New skeleton container for bones
2022-06-11 21:57:41 +02:00
Kim Kulling 5adea2dbcf
Merge branch 'master' into kimkulling/create_skeleton_data_issue_4015 2022-06-11 21:40:44 +02:00
Kim Kulling aaa19903c6 Fix merge conflicts 2022-06-11 18:50:18 +02:00
naveen a5a38775f1 chore: Included githubactions in the dependabot config
This should help with keeping the GitHub actions updated on new releases. This will also help with keeping it secure.

Dependabot helps in keeping the supply chain secure https://docs.github.com/en/code-security/dependabot

GitHub actions up to date https://docs.github.com/en/code-security/dependabot/working-with-dependabot/keeping-your-actions-up-to-date-with-dependabot

https://github.com/ossf/scorecard/blob/main/docs/checks.md#dependency-update-tool
Signed-off-by: naveen <172697+naveensrinivasan@users.noreply.github.com>
2022-06-10 01:30:07 +00:00
Kim Kulling 0768a13057
Merge pull request #4567 from assimp/kimkulling/fix_nullptr_exception_opnglb_export_issue4418
Fix  possible nullptr exception
2022-06-08 08:13:16 +02:00
Kim Kulling 02b0c89fa4
Fix usage of validation 2022-06-08 00:10:13 +02:00
Kim Kulling 4fb5cf4ba6
Fix possible nullptr exception
- closes https://github.com/assimp/assimp/issues/4418
2022-06-07 23:33:56 +02:00
Kim Kulling 34cb936844
Merge pull request #4546 from matthewclendening/fix_FBXConverter_double_precision
Fixed FBXConverter build error when using double precision
2022-06-07 22:30:33 +02:00
Kim Kulling b9fdf6d3ca
Merge branch 'master' into fix_FBXConverter_double_precision 2022-06-07 22:08:56 +02:00
Kim Kulling bc2786d830
Merge pull request #4564 from ethaninfinity/master
Pragma warnings cause build fail with MinGW
2022-06-07 22:08:03 +02:00
Kim Kulling e7daa5759b
Merge branch 'master' into master 2022-06-07 22:01:00 +02:00
Kim Kulling 7a64f751ab
Merge branch 'master' into master 2022-06-07 21:29:33 +02:00
Kim Kulling 988b5c1f36
Merge pull request #4565 from assimp/kimkulling-create-security-vulnerability
Create SECURITY.md
2022-06-07 21:10:44 +02:00
Kim Kulling 096aee2c25
Create SECURITY.md
- Prepare a first contact point for security vulnerability
2022-06-07 20:58:45 +02:00
ethaninfinity d018c3b555 Added back pragma warnings and changed to be MSVC-specific 2022-06-07 11:42:09 -04:00
ethaninfinity c5b6b26b8b Revert "Removed pragma warnings"
This reverts commit 4961241c09.
2022-06-07 11:27:12 -04:00
ethaninfinity 4961241c09 Removed pragma warnings 2022-06-06 14:53:03 -04:00
Matthew Clendening aca02190a7
Merge branch 'master' into fix_FBXConverter_double_precision 2022-06-06 10:01:13 -04:00
Kim Kulling 49fdd12fdf
Merge pull request #4554 from Nor-s/fix_fbx
Fix Import a specific FBX model will freeze the app #4395
2022-06-03 13:48:35 +02:00
Kim Kulling 680ea6b0e0
Merge branch 'master' into fix_fbx 2022-06-03 11:21:41 +02:00
Kim Kulling 39a4627519
Merge branch 'master' into kimkulling/create_skeleton_data_issue_4015 2022-06-02 21:47:29 +02:00
Kim Kulling 530ae2b192
Merge pull request #4555 from Underdisc/issue4516
Remove dllexport tags from static library builds.
2022-06-02 20:01:51 +02:00
Kim Kulling 638fda66da
Merge branch 'master' into issue4516 2022-06-01 20:47:13 +02:00
nsg 96d2052ed0
Merge branch 'master' into fix_fbx 2022-06-02 02:31:32 +09:00
Kim Kulling 7fcd961a20
Merge pull request #4549 from Gargaj/msvcfix
fix msvc warnings-as-errors
2022-06-01 17:39:01 +02:00
Kim Kulling 03532eaec3
Merge branch 'master' into msvcfix 2022-06-01 17:11:06 +02:00
Underdisc 17289985a4 Update comment 2022-06-01 12:45:40 +02:00
Underdisc 02e0d1d05c Remove dllexport tags from static library builds. 2022-06-01 12:26:04 +02:00
nsg 681eb3e91e Fix Import a specific FBX model 2022-06-01 17:41:27 +09:00
Kim Kulling 2e944686f8
Merge pull request #4478 from assimp/kimkulling/link_stb_image_statically_issue_4467
Link static linkage for std_image.
2022-06-01 00:01:00 +02:00
Kim Kulling b7a70ac707 Add compiler switgxh for using static linkage for std_image 2022-05-31 23:24:31 +02:00
Kim Kulling 43c767dd62
Merge branch 'master' into msvcfix 2022-05-31 22:06:57 +02:00
Kim Kulling 05867f4752 Merge branch 'kimkulling/link_stb_image_statically_issue_4467' of https://github.com/assimp/assimp into kimkulling/link_stb_image_statically_issue_4467 2022-05-31 20:08:39 +02:00
Kim Kulling de4fe01c94 Fix clang build 2022-05-31 20:08:26 +02:00
Kim Kulling e28becbaf5
Update Assimp.cpp 2022-05-31 19:17:08 +02:00
Kim Kulling e5cd85ac0c
Update M3DWrapper.h 2022-05-31 19:16:46 +02:00
Kim Kulling 4b25eb6c4b
Update Assimp.cpp 2022-05-31 19:09:22 +02:00
Kim Kulling c0e141a6a9
Update StbCommon.h 2022-05-31 19:08:46 +02:00
Kim Kulling b00923ebcd
Update Assimp.cpp 2022-05-31 19:08:29 +02:00
Kim Kulling 4e22635406
Update PbrtExporter.cpp 2022-05-31 18:31:19 +02:00
Kim Kulling 472e15c405
Merge branch 'master' into kimkulling/link_stb_image_statically_issue_4467 2022-05-31 17:47:43 +02:00
Kim Kulling 4b923f0603
Merge pull request #4537 from assimp/kimkulling/fix_compiler_warning
Cleanups
2022-05-31 17:47:21 +02:00
Kim Kulling 234e55fbb1
Use size_t 2022-05-31 07:29:54 +02:00
Gargaj f612865f22 fix msvc warnings-as-errors 2022-05-29 01:35:48 +02:00
Matthew Clendening 26233f1b77 Fixed FBXConverter build error (warning as error) when ASSIMP_DOUBLE_PRECISION is defined 2022-05-26 15:06:23 -04:00
Piroska Gabor ddc63119b5 Using hex instead of decimal 2022-05-26 10:11:30 +02:00
hgdagon efbcdccac9
Fix GNUC check on Windows (2nd attempt) 2022-05-25 09:18:42 -07:00
hgdagon affa85a36b
Fix GNUC check on Windows 2022-05-25 07:59:01 -07:00
Piroska Gabor 7ce447294f I ran into an error while processing colored binary stl. Just a type but
better be fixed.
2022-05-24 19:47:24 +02:00
Luca Della Vedova 6b0a7a21a4
Store SID in SID field
Signed-off-by: Luca Della Vedova <luca@openrobotics.org>
2022-05-23 14:24:56 +08:00
Kim Kulling ed3e218550 Bugfix: fix not initialized member attributes 2022-05-21 19:08:43 +02:00
Kim Kulling e0696486b2 Update gtest 2022-05-21 11:09:46 +02:00
Kim Kulling e5a2b00719 Fix comparison signed unsigned warning. 2022-05-21 09:47:54 +02:00
tanolino 002d6dc016
Inifinite loop on bad import files
I had an import file that caused an infinite loop. I don't exactly know how this algorithm works here but maybe we should change it more.
Probably calculate the amount of steps and chop linear.
2022-05-18 15:22:11 +02:00
Kim Kulling 4d451fe437
Merge pull request #4532 from assimp/kimkulling/fix_undefined_behaviour_in_superfasthast_issue4531
Add unittest to reproduce undefined behaviour
2022-05-17 22:08:54 +02:00
Kim Kulling c623a363a6 Add unittest to reproduce undefined behaviour: left shift on negative value 2022-05-17 20:48:35 +02:00
Kim Kulling c8dafe0d28
Merge pull request #4527 from motazmuhammad/master
Accelerate the Merge vertex post processing step
2022-05-14 11:54:06 +02:00
Kim Kulling 58af6ba9db
Fix compier warning 2022-05-14 09:59:07 +02:00
Kim Kulling deb1698cbe
Fixed formattings. 2022-05-14 09:56:38 +02:00
motazmuhammad 78dbef8711
Merge branch 'master' into master 2022-05-13 20:15:55 +01:00
motazmuhammad 36d730fc4e add more comments 2022-05-13 20:10:19 +01:00
motazmuhammad 5d8b1649a4 Revert "use unordered_set to accelerate the vertix merging"
This reverts commit 0ffb91fbf1.
2022-05-13 19:59:16 +01:00
Kim Kulling 1b3e9e4e01 Add testmodel 2022-05-13 19:44:14 +02:00
Kim Kulling e284fe67b8 Adapt file for skeleton unittest 2022-05-13 19:43:46 +02:00
motazmuhammad 0ffb91fbf1 use unordered_set to accelerate the vertix merging 2022-05-13 18:14:49 +01:00
Kim Kulling f44a94e118
Merge pull request #4510 from hgdagon/assimp_resource
[Feedback needed]Resource script updates
2022-05-12 11:30:39 +02:00
Kim Kulling 9e4fc9a40c
Merge branch 'master' into assimp_resource 2022-05-12 10:38:03 +02:00
Kim Kulling 16b7b35b04
Merge pull request #4484 from RedSkittleFox/MMD_Fixes
MMD (pmx) fixes
2022-05-12 10:36:40 +02:00
Kim Kulling 0f780fe141
Merge branch 'master' into MMD_Fixes 2022-05-12 10:00:00 +02:00
Kim Kulling eeb524a76b
Merge pull request #4525 from Skylion007/skylion007/assimp-perf-clang-tidy
Clang-Tidy performance fixes (make values const-ref where needed).
2022-05-12 09:56:19 +02:00
Aaron Gokaslan 787fcc160a Clang-Tidy performance fixes 2022-05-11 14:03:45 -04:00
hgdagon cd9f417b84
Merge branch 'master' into assimp_resource 2022-05-10 23:19:36 +04:00
Kim Kulling ff43768d24
Merge pull request #4524 from assimp/kimkulling/update-readme
Add badge to show open issue in percentage
2022-05-10 10:00:01 +02:00
Kim Kulling 31c9a8b0ed
Add badge to show open issue in percentage 2022-05-10 09:15:57 +02:00
Kim Kulling 6c943471f9
Merge pull request #4511 from hgdagon/assimp_viewer
[Fedback needed]Minor updates to ASSIMP Viewer
2022-05-09 21:33:33 +02:00
hgdagon 7338833f3b
Merge branch 'master' into assimp_viewer 2022-05-07 18:04:18 +04:00
hgdagon 85d47dc359
Merge branch 'master' into assimp_resource 2022-05-07 18:03:44 +04:00
Kim Kulling 25118d230e
Merge pull request #4509 from hgdagon/assimp_warnings_as_errors
Add an option to treat warnings as errors
2022-05-06 19:41:06 +02:00
Kim Kulling 39f5b723f3
Merge branch 'master' into assimp_warnings_as_errors 2022-05-06 19:28:17 +02:00
Kim Kulling 1f68f66162
Merge pull request #4514 from ALittleStardust/master
Update pugixml dependency to  v1.12.1
2022-05-06 13:43:58 +02:00
ALittleStardust 7bda8b7a77
Updated pugixml to version 1.12.1 2022-05-06 13:39:05 +07:00
hgdagon f86700f6f4
Merge branch 'master' into assimp_resource 2022-05-04 02:12:08 +04:00
hgdagon 1c2caec2bd
Reverted copyright text back to static text
Windres handles it just fine, with the intended result, but RC doesn't seem to like it.
2022-05-03 14:45:24 -07:00
hgdagon 26ab3ce480
Update assimp_view.rc
Removed dead link and updated copyright string in the About dialog.
2022-05-03 14:16:51 -07:00
hgdagon e59326a738
Merge branch 'master' into assimp_viewer 2022-05-04 00:44:53 +04:00
hgdagon 936cc791f2
Move `ASSIMP_WARNINGS_AS_ERRORS` check 2022-05-03 13:01:20 -07:00
hgdagon e1f0f50010
Update CMakeLists.txt 2022-05-03 12:57:45 -07:00
hgdagon 18bfbaeee1
Actually set `ASSIMP_WARNINGS_AS_ERRORS` to ON by default
Whoops....
2022-05-03 12:31:09 -07:00
hgdagon e97e7574ae
Merge branch 'master' into assimp_warnings_as_errors 2022-05-03 23:24:52 +04:00
hgdagon 4faae3d0e9
Updated build options in Build.md 2022-05-03 12:24:34 -07:00
hgdagon 209c302f56
Merged `ASSIMP_WARNINGS_AS_ERRORS` and `ASSIMP_WARNINGS_MAX`
And set it ON by default.
2022-05-03 12:23:33 -07:00
Kim Kulling abfb26ab6f
Merge pull request #4508 from hgdagon/master
Fixed library names for MinGW/MSYS2
2022-05-03 17:48:22 +02:00
Kim Kulling 3dd2dbd916
Merge branch 'master' into master 2022-05-03 17:19:06 +02:00
Kim Kulling f4b1a23010
Merge branch 'master' into assimp_viewer 2022-05-03 17:18:05 +02:00
Kim Kulling bfb46ca5ef
Fix protocol type. 2022-05-03 17:16:25 +02:00
Kim Kulling e8abb0fc1c
Merge pull request #4512 from umlaeute/aiTextureTypeToString
Rename TextureTypeToString() to aiTextureTypeToString()
2022-05-02 10:14:41 +02:00
IOhannes m zmölnig 1d3d5c4bb6 Rename TextureTypeToString() to aiTextureTypeToString()
Closes: https://github.com/assimp/assimp/issues/4493
2022-05-01 13:27:42 +02:00
Kim Kulling d5c798f325 Fix leak 2022-04-30 21:02:48 +02:00
hgdagon bf32c4c408
Fixed `ASSIMP_WARNINGS_MAX` reference 2022-04-30 08:40:48 -07:00
U-DESKTOP-0R560PH\George a7e2b3ad30 Fixed library names for MinGW/MSYS2 2022-04-30 08:14:16 -07:00
U-DESKTOP-0R560PH\George 63183a048c Minor updates to ASSIMP Viewer 2022-04-30 08:10:47 -07:00
U-DESKTOP-0R560PH\George 694dc8a0c3 Add an option to treat warnings as errors 2022-04-30 08:08:34 -07:00
U-DESKTOP-0R560PH\George 94ebe71969 Resource script updates 2022-04-30 08:01:15 -07:00
Kim Kulling 64a6968254 Add skeleton generation to aiScene 2022-04-28 21:43:02 +02:00
Kim Kulling 0afb594f40 Generate container for skeleton during FBX-Import 2022-04-28 21:19:10 +02:00
Kim Kulling 6cdd1d3cc6 Generate container for skeleton during FBX-Import 2022-04-28 21:12:26 +02:00
Kim Kulling 461370946c
Merge pull request #4506 from assimp/kimkulling/remove_deprecated_readme_issue4505
Delete README
2022-04-28 10:41:37 +02:00
Kim Kulling 1a47f52eb8
Merge branch 'master' into kimkulling/remove_deprecated_readme_issue4505 2022-04-28 10:26:27 +02:00
Kim Kulling 92bdb993e9
Merge pull request #4507 from assimp/kimkulling/disable_ifc_curve_floating_assertion_issue4450
Disable assertion tests floating point against inf for Intel oneAPI
2022-04-28 10:26:13 +02:00
Kim Kulling 1ac9173e8c
Disable assertion tests floating point against inf for Intel oneAPI
- closes https://github.com/assimp/assimp/issues/4450
2022-04-28 10:08:01 +02:00
Kim Kulling 0b3232ce10
Delete README
- closes https://github.com/assimp/assimp/issues/4505
2022-04-28 09:22:02 +02:00
Kim Kulling 66cfe0cdf4
Merge pull request #4502 from assimp/kimkulling/out_of_range_access_error_issue4495
Fix out-of-range access in ASE-Parser
2022-04-27 20:33:06 +02:00
Kim Kulling 174b2fcf59
Fix invalid use of material reference. 2022-04-27 20:21:30 +02:00
Kim Kulling 37ec378b60
Fixx out-of-range access in ASE-Parser
- closes https://github.com/assimp/assimp/issues/4495
2022-04-27 19:52:23 +02:00
Kim Kulling 458a0314aa
Merge pull request #4501 from assimp/kimkulling-patch-1
Document fuzz folder
2022-04-27 15:34:36 +02:00
Kim Kulling 6c2f1378e3
Document fuzz folder
- closes https://github.com/assimp/assimp/issues/4497
2022-04-27 15:09:30 +02:00
Kim Kulling d3a8306f59
Merge pull request #4481 from hgdagon/master
Some Windows/MSYS2-specific fixes
2022-04-27 10:31:27 +02:00
Kim Kulling cce62fded1
Merge branch 'master' into master 2022-04-27 08:45:16 +02:00
Kim Kulling 88a9598ded
Merge pull request #4490 from Mykhailo418/master
FbxConverter: update bone mOffsetMatrix
2022-04-25 21:35:34 +02:00
Kim Kulling d14bff5a9f
Merge branch 'master' into master 2022-04-24 18:17:33 +02:00
Kim Kulling f3c9c7b413
Merge branch 'master' into SmallAllocationFixInFBXLoader 2022-04-22 08:37:58 +02:00
Florian Born a415f33fb5 merge failure, parts in this file were missing 2022-04-21 16:09:28 +02:00
Florian Born 7f0509ae87 Stack allocator is now inline 2022-04-21 11:33:04 +02:00
Kim Kulling 02f070667a
Merge pull request #4483 from lgmcode/master
Fix draco building error when import assimp with cmake add_subdirectory #3663
2022-04-20 23:22:05 +02:00
Kim Kulling d6aa3db4ef
Merge branch 'master' into master 2022-04-20 21:59:17 +02:00
Kim Kulling 41fbc5e715
Merge pull request #4488 from HadesD/patch-1
Fix ogre xml serializer
2022-04-20 21:58:49 +02:00
Florian Born 0355ae967f compile fix on other platforms 2022-04-20 17:57:03 +02:00
Florian Born 320775b939 Compile fix 2022-04-20 16:39:36 +02:00
Florian Born d3646c3118 Proper destruction of individual objects 2022-04-20 16:11:09 +02:00
Florian Born 2b3c49cb93 All allocation changes 2022-04-20 12:33:39 +02:00
Florian Born 1d6ed840fb Replace single allocations in fbx loader by block allocation 2022-04-20 12:14:35 +02:00
Kim Kulling 37be87b0bd Some minor findings 2022-04-19 23:37:16 +02:00
Kim Kulling 7f913c180b
Merge branch 'master' into master 2022-04-19 15:23:09 +02:00
Mykhailo418 8a1dc87b4c remove absolute_transform in FBXConverter 2022-04-18 18:10:59 +03:00
Mykhailo418 e3def37f42 assing absolute_transform to matrix 2022-04-18 17:26:37 +03:00
Mykhailo418 863e3e0ccb FbxConverter, bone mOffsetMatrix update 2022-04-18 16:02:17 +03:00
Ichiro 9ab6ebd363
Fix foreach 2022-04-18 04:11:06 +09:00
Ichiro 128242e371
Fix ogre xml serializer 2022-04-18 01:28:03 +09:00
RedSkittleFox feec92022f
Merge branch 'master' into MMD_Fixes 2022-04-13 21:07:58 +02:00
RedSkittleFox 5ab1be8d04 Fixed deprecated class usage; removed unsupported C++17 feature 2022-04-13 11:38:57 +02:00
Kim Kulling b699d3a26a
Merge pull request #4440 from sacereda/obj-pbr-explicit
Avoid setting PBR properties when they are not found on mtl file
2022-04-13 10:11:53 +02:00
RedSkittleFox f26dc74f21 Fixed MMD Importer not loading files from buffer and enabled unit test 2022-04-13 02:51:12 +02:00
RedSkittleFox b38c25fe09 Reuploaded (fixed) mmd model 2022-04-13 02:50:31 +02:00
Kim Kulling aa814a522d
Merge branch 'master' into obj-pbr-explicit 2022-04-12 11:12:58 +02:00
Kim Kulling dc8ba61095
Merge pull request #4463 from jakrams/user/jakras/bitangent-fuzzer-fix
Prevent nullptr access to normals-array in bitangent computation
2022-04-12 11:10:47 +02:00
Kim Kulling ae9f5b6fc5
Merge branch 'master' into user/jakras/bitangent-fuzzer-fix 2022-04-12 10:41:43 +02:00
Kim Kulling 26e471ad62
Merge pull request #4454 from mpcarlos87/Android-Script-Update
Updated Android build script
2022-04-12 10:41:13 +02:00
Guangmo Lin 778ac976b2
Fix draco building error when import assimp with cmake add_subdirectory #3663 2022-04-11 15:08:20 +08:00
Kim Kulling 6943e59886
Merge branch 'master' into obj-pbr-explicit 2022-04-08 14:36:57 +02:00
hgdagon 518d50d2e6 Fixes for Windows/MSYS2 2022-04-07 03:07:57 -07:00
Kim Kulling e5747dad9b First concepts 2022-04-05 20:07:22 +02:00
Kim Kulling 5c438963c0
Disable correct compiler-warning: unused-function. 2022-04-05 19:59:36 +02:00
Kim Kulling 97c7ab3c05 Move stb_image header into its own header file. 2022-04-05 19:53:41 +02:00
Kim Kulling fa5a8476ee Fix gcc warning: unused function 2022-04-05 19:04:29 +02:00
Kim Kulling b8658cefe0 Link std_image statically. 2022-04-05 18:48:45 +02:00
Carlos Martinez Perez 2bfb78f91d
Merge branch 'master' into Android-Script-Update 2022-04-03 12:25:04 +02:00
Kim Kulling 75ab2beb06
Merge pull request #4466 from ifiddynine/patch-3
Detect Roughness factor exported by Blender
2022-04-02 21:54:06 +02:00
Kim Kulling 88dadd6c40
Merge branch 'master' into patch-3 2022-04-02 11:22:33 +02:00
Kim Kulling 8109689dc2
Merge branch 'master' into Android-Script-Update 2022-04-01 14:57:47 +02:00
Kim Kulling 42adc82354
Merge pull request #4473 from xiaohunqupo/master
Fix compile error: When enable macro ASSIMP_DOUBLE_PRECISION
2022-03-31 18:35:07 +02:00
xiaohunqupo a050dee096 Fix compile error:When enable macro ASSIMP_DOUBLE_PRECISION 2022-03-31 16:08:39 +08:00
xiaohunqupo de6e90a657 Fix commit error 2022-03-31 15:36:57 +08:00
xiaohunqupo 2152aae2a3 Fix compile error due to namespace conflicts in VC140. 2022-03-31 15:34:49 +08:00
xiaohunqupo b08c04b87a Fix compile errro in VC140 2022-03-31 15:08:12 +08:00
xiaohunqupo cc515746f7 Fix v140 compile errror 2022-03-31 14:58:31 +08:00
Danny许 8e075ce713
Update ObjFileParser.cpp 2022-03-31 14:53:33 +08:00
Danny许 18c4ebaa13
Fix compile in VC140 2022-03-31 14:28:35 +08:00
Danny许 f985fe12cc
Fix compile error
When enable macro ASSIMP_DOUBLE_PRECISION
2022-03-31 11:20:18 +08:00
Danny许 422a45694a
Merge pull request #4 from assimp/master
Merge
2022-03-31 11:18:37 +08:00
Filip Lundgren 4175198d04
Detect Roughness factor exported by Blender
Matches the logic used by Blender's own FBX exporter / importer.
2022-03-26 22:33:10 +01:00
Carlos Martinez Perez 257927d7cf
Merge branch 'master' into Android-Script-Update 2022-03-24 18:59:16 +01:00
Kim Kulling ba6c67c328
Merge pull request #4464 from assimp/kimkulling/revert_static_runtime_Selection_for_all
Use static runtime only on option is selected
2022-03-24 08:01:49 +01:00
Kim Kulling 0a56065962
Use static runtime only on option is selected 2022-03-24 00:41:07 +01:00
Jan Krassnigg 537c46a42a Prevent nullptr access to normals-array in bitangent computation 2022-03-23 15:45:09 +01:00
Carlos Martinez Perez 90a24440db - Adapted bat file to new NDK and toolchain
- Able to build x86, x86_64, armv8, armv7 for android
- Automatically detects latest ndk on your system
2022-03-18 17:01:45 +01:00
Promit Roy 5ec7e57b99
Merge branch 'assimp:master' into master 2022-03-17 15:00:09 -04:00
Promit Roy 68d33a6e13 Added support for more bone weights in GLTF2
The GLTF2 importer doesn't actually read beyond the first four bone weights (first attribute). This patch expands the parser to store as many bone weights as are available in the file.
2022-03-17 14:55:26 -04:00
Kim Kulling 19f2a624a9
Merge pull request #4451 from Promit/promit/gltf-attrib-bug-fix
GLTF2 attribute name/parse bug fix
2022-03-17 11:35:44 +01:00
Promit Roy 765b38cf04 Update glTF2Asset.inl
Fixing mistakes in attribute names for GLTF. This causes attribute index to not be parsed out correctly (e.g. JOINTS_1) and fails the scene load.
2022-03-16 16:49:45 -04:00
Kim Kulling a916a0eda5
Merge pull request #4448 from assimp/kimkulling/MDL-fix_stackoverflow-issue4447
Fix stack-overflow in MDLLoader
2022-03-16 14:14:46 +01:00
Kim Kulling c2b05acaa6
Fix stack-overflow in MDLLoader
- Use correct len to copy filename.
- Closes https://github.com/assimp/assimp/issues/4447
2022-03-16 13:59:21 +01:00
Kim Kulling a828114a1d
Merge pull request #4446 from assimp/kimkulling/mdlimporter_fix_nullptr_dereferencing
Fix nullptr dereferencing
2022-03-16 10:23:29 +01:00
Kim Kulling 552f3a308d
Fix nullptr dereferencing
- Check if we have any texture coordinates before calculating them
- closes https://github.com/assimp/assimp/issues/4445
2022-03-16 10:08:20 +01:00
Kim Kulling 784d9615f5
Merge pull request #4444 from EYHN/windows-crt
Add USE_STATIC_CRT option
2022-03-15 21:55:21 +01:00
Kim Kulling 6484dd6825
Merge branch 'master' into windows-crt 2022-03-15 21:29:21 +01:00
Kim Kulling d594e6eea4
Merge branch 'master' into obj-pbr-explicit 2022-03-15 14:30:24 +01:00
Kim Kulling bcee205542
Merge pull request #4437 from jaefunk/issue_4349
add ifndef guard for resolve to fails to compile
2022-03-15 14:28:43 +01:00
Kim Kulling 0904490150
Merge branch 'master' into issue_4349 2022-03-15 14:11:57 +01:00
Kim Kulling 7919461951
Merge pull request #4441 from assimp/kimkulling/fix_doxygen_version
Update version in doxy-config
2022-03-15 14:11:38 +01:00
Kim Kulling e4fb0e0960
Merge branch 'master' into kimkulling/fix_doxygen_version 2022-03-15 13:33:54 +01:00
Kim Kulling d87111983a
Merge pull request #4431 from TerenceRussell/master
Added missing ObjMaterial.h to CMakeLists
2022-03-15 13:33:13 +01:00
Kim Kulling b1dc8cfe56
Merge branch 'master' into master 2022-03-15 11:58:45 +01:00
Kim Kulling 7296ffc3f5
Merge pull request #4426 from sacereda/info-material-properties
Add properties information on assimp info command line
2022-03-15 11:57:58 +01:00
Kim Kulling b567497a17
Merge branch 'master' into info-material-properties 2022-03-15 10:57:14 +01:00
Kim Kulling e1dae1402e
Merge pull request #4425 from sacereda/metallic-roughness-split
glTF2: Metallic roughness split
2022-03-15 10:56:43 +01:00
Kim Kulling 68f3386c7b
Merge branch 'master' into metallic-roughness-split 2022-03-15 08:38:38 +01:00
Kim Kulling 9e0357a8b6
Merge pull request #4423 from youkeyao/parse_obj_anisotropy
Fix getting anisotropy in obj
2022-03-15 08:38:13 +01:00
Kim Kulling 72888c49f6
Merge branch 'master' into parse_obj_anisotropy 2022-03-15 08:13:35 +01:00
eyhn cd7df53a72 Add USE_STATIC_CRT option 2022-03-15 14:50:01 +08:00
jaefunk 4457d9300a
Merge branch 'master' into issue_4349 2022-03-14 15:41:20 +09:00
Kim Kulling 0ef830d2b1
Update version in doxy-config 2022-03-12 16:57:27 +01:00
Sergio Acereda 729ab8ae33 Trying to fix reorder error 2022-03-12 08:15:11 +01:00
Sergio Acereda 26bb601d8f Fix includes 2022-03-12 08:03:27 +01:00
Sergio Acereda 51e248909f Avoid setting metallic/roughness/sheen/clearcoat properties when they are not found on mtl file. 2022-03-11 22:29:59 +01:00
jaefunk e02d51ec24 add ifndef guard for resolve to fails to compile 2022-03-11 10:51:13 +09:00
Kim Kulling a305d14b8f
Merge pull request #4421 from RichardTea/update_ai_texture_type_max
Update AI_TEXTURE_TYPE_MAX
2022-03-10 13:54:55 +01:00
Kim Kulling 5e69517742
Merge branch 'master' into update_ai_texture_type_max 2022-03-10 11:37:46 +01:00
Kim Kulling 1b3ae63527
Merge pull request #4434 from karjonas/always_true
Fix 'i >= 0' always true bug
2022-03-10 11:37:03 +01:00
Kim Kulling 47f004517f
Add missing cast. 2022-03-10 10:33:29 +01:00
Jonas Karlsson c14eccefaf Fix 'i >= 0' always true bug
If 'disk_filename' does not contain a dot (.) then 'i' would overflow.
Making 'i' an int makes sure the for loop works as intended.
2022-03-09 23:05:47 +01:00
Terence Russell efe92e9ec1
Merge branch 'assimp:master' into master 2022-03-09 10:15:41 -07:00
Kim Kulling 1bf5dd2731
Merge pull request #4432 from assimp/kimkulling/init_fbx_texture_members_issue4429
Fix missing members and do some small refactorings.
2022-03-09 11:35:01 +01:00
kimkulling 26598dc6bd Forget to save file. 2022-03-09 11:00:05 +01:00
kimkulling 76e10b96fc Fix missing members and do some small refactorings. 2022-03-09 10:51:37 +01:00
Terence Russell b35879989c Added missing ObjMaterial.h to CMakeLists 2022-03-08 20:00:22 -07:00
Kim Kulling 7aa87a9765 Merge branch 'master' into kimkulling/create_skeleton_data_issue_4015 2022-03-08 19:10:53 +01:00
Kim Kulling 40d896ccc1
Merge pull request #4403 from JaroslavPribyl/fix/obj_with_bspline_crash
Fix parsing OBJ with free-form curve/surface body statements
2022-03-07 21:39:38 +01:00
Kim Kulling ba379c20e1
Merge branch 'master' into fix/obj_with_bspline_crash 2022-03-06 17:39:57 +01:00
Kim Kulling 92b5c284ce
Merge pull request #4203 from RichardTea/deprecated_gltfpbr_macros
Reinstate a deprecated gltfpbr macro: AI_MATKEY_GLTF_PBRSPECULARGLOSSINESS
2022-03-06 17:39:35 +01:00
Kim Kulling 9ca9254445
Merge branch 'master' into deprecated_gltfpbr_macros 2022-03-06 11:15:49 +01:00
Kim Kulling 7eb5fd0e4e
Merge pull request #4427 from assimp/smartday-master
Smartday master
2022-03-05 23:00:21 +01:00
Kim Kulling 80a8807c47 Fix compiler warnings 2022-03-05 20:37:34 +01:00
Kim Kulling d4527d4e87
Merge branch 'master' into master 2022-03-05 14:00:32 +01:00
Sergio Acereda a2543e7151 Add properties information on assimp info command line 2022-03-04 17:09:29 +01:00
Sergio Acereda a1e03e3481 clang-format 2022-03-04 14:31:06 +01:00
Sergio Acereda cfe84b9260 Use generic METALNESS and DIFFUSE_ROUGHNESS texture types 2022-03-03 16:18:25 +01:00
Sergio Acereda 52008ec989 Apply clang-format 2022-03-03 15:42:23 +01:00
youkeyao 9b227fc262 Fix getting anisotropy in obj 2022-03-03 01:01:34 +08:00
RichardTea 8a6a1fc2df Update AI_TEXTURE_TYPE_MAX
Must be equal to the largest aiTextureType_XXX enum
2022-03-01 12:12:07 +00:00
RichardTea d704824be3 Merge branch 'master' into deprecated_gltfpbr_macros 2022-03-01 10:01:43 +00:00
Kim Kulling bbcefbd034
Merge pull request #4417 from rbsheth/rbsheth_fix_hunter
Update version of Hunter to v0.24.0 that supports VS 2022
2022-02-28 23:48:19 +01:00
Jaroslav Pribyl 62930076af
Merge branch 'master' into fix/obj_with_bspline_crash 2022-02-26 04:03:59 +01:00
Rahul Sheth e368a69824
Merge branch 'master' into rbsheth_fix_hunter 2022-02-25 14:58:07 -06:00
Kim Kulling 3957fbba8b
Merge pull request #4416 from SolaToucher/master
Optimize the problem of excessive memory allocation in FBX import
2022-02-25 21:03:47 +01:00
Rahul Sheth 8e59287b94 Update version of Hunter to v0.24.0 that supports VS 2022 2022-02-25 13:52:18 -06:00
sola c73ff82fc4 FBXConvert::ConvertMeshMultiMaterial: allocate memory using variable count_vertices 2022-02-25 19:58:44 +08:00
Kim Kulling 04858c5d89
Merge pull request #4409 from TerenceRussell/master
Expose the original OBJ "illum" value
2022-02-25 00:06:12 +01:00
Kim Kulling 94178df61b
Merge branch 'master' into master 2022-02-24 19:31:31 +01:00
Kim Kulling 1b2f705ee4
Merge pull request #4415 from assimp/kimkulling/fix_negative_offset_in_hast_access-issue4414
Fix possible negative array access
2022-02-24 17:20:03 +01:00
Kim Kulling 0dc24ab3a7
Fix declaration of offset 2022-02-24 17:04:39 +01:00
Kim Kulling cf96639119
Fix possible negative array access
- Return when the calculated offset gets negative
- closes https://github.com/assimp/assimp/issues/4414
2022-02-24 16:49:35 +01:00
Kim Kulling 72da1e6d7b
Merge branch 'master' into master 2022-02-23 21:20:39 +01:00
Kim Kulling e3001f1eb7
Merge pull request #4408 from assimp/kimkulling/fix_ordering_of_gltf2_issue4407
Fix ordering of member initialization
2022-02-23 21:19:33 +01:00
Kim Kulling 6f31254ae1 Ensure dictionary for LazyDics is created before adding content to it 2022-02-23 20:57:15 +01:00
Terence Russell 3a09d19374
Merge branch 'master' into master 2022-02-22 18:43:11 -07:00
Terence Russell 4ddacdb5df Expose the original OBJ illum model as a material property. 2022-02-22 17:55:41 -07:00
Kim Kulling 466b34cf53
Merge branch 'master' into kimkulling/fix_ordering_of_gltf2_issue4407 2022-02-22 21:09:11 +01:00
Kim Kulling aa04ee89f1 Fix init order to fix build 2022-02-22 21:07:42 +01:00
Kim Kulling a6808b868c Small code cleanup 2022-02-22 21:07:23 +01:00
Jaroslav Přibyl 480d6fee2a cleanup 2022-02-22 01:46:47 +01:00
Jaroslav Přibyl 62c9347985 fixed obj parsing with cstype 2022-02-22 01:32:41 +01:00
Kim Kulling ba785910d1
Merge pull request #4402 from assimp/kimkulling/warn_when_viewer_shall_be_build_on_non_win32
Show warning when assimp_viewer cannot be build on target platform
2022-02-21 15:39:11 +01:00
Kim Kulling caaeef2b56
Update CMakeLists.txt
- Show a cmake-warning if assimp_view shall be build for linux / mac
2022-02-21 15:17:23 +01:00
Kim Kulling a34688230d
Merge pull request #4393 from TerenceRussell/master
Added support for "map_Bump -bm"
2022-02-20 20:14:21 +01:00
Kim Kulling 52b106bf7e
Merge branch 'master' into master 2022-02-20 19:04:32 +01:00
Kim Kulling eed5570c39
Merge pull request #4399 from assimp/kimkulling/fix_typo_in_cmake
Update CMakeLists.txt
2022-02-20 18:45:06 +01:00
Kim Kulling 3e7294feeb
Merge branch 'master' into kimkulling/fix_typo_in_cmake 2022-02-20 15:33:54 +01:00
Kim Kulling 2c33ed1087
Merge pull request #4397 from youkeyao/issue_3191
update the calculation and orthogonalization for bitangent
2022-02-20 15:32:41 +01:00
Kim Kulling b625961197
Merge branch 'master' into issue_3191 2022-02-20 15:14:46 +01:00
Kim Kulling 03f44cd983
Merge branch 'master' into kimkulling/fix_typo_in_cmake 2022-02-20 14:17:27 +01:00
Kim Kulling 5c53726c8e
Merge pull request #4394 from BA7LYA/master
udpate build script to fit "Visual Studio 16 2019" Generator
2022-02-20 14:07:49 +01:00
Kim Kulling 96522bc114
Update CMakeLists.txt 2022-02-20 14:06:11 +01:00
Kim Kulling b825740df7
Merge branch 'master' into master 2022-02-20 12:53:26 +01:00
Kim Kulling f952100dbb
Merge pull request #4398 from assimp/kimkulling-patch-1
Fix stat for 32-biut linuxes
2022-02-20 12:19:06 +01:00
Kim Kulling 14874d26f4
Fix stat for 32-biut linuxes
- Reenable fix to ensure that stat works correctly on 32-bit linuxes again
  - stat will return 32-bit inodes when checking a file. So when this call will be used on a 64-bit linux this will cause errors like:
Error writing to foo: Value too large for defined data type
File I/O error: foo
- closes https://github.com/assimp/assimp/issues/4390
2022-02-20 11:53:26 +01:00
youkeyao ad766cb738 update the calculation and orthogonalization for bitangent 2022-02-20 17:15:11 +08:00
ChenJunshuai efc60076dc udpate build script to fit "Visual Studio 16 2019" Generator 2022-02-18 19:01:47 +08:00
Terence Russell 17123ed4a1 Add support for bump -bm (bump/normal multiplier) 2022-02-17 22:10:46 -07:00
Kim Kulling dff3620138
Merge pull request #4391 from jcfr/fix-assimp-target-install-rule-fully-specifying-components
cmake: Fix assimp target install rule fully specifying component
2022-02-17 23:13:43 +01:00
Jean-Christophe Fillion-Robin 33a48c6ca6
cmake: Fix assimp target install rule fully specifying component
This commit ensures generated install rules for the assimp target are
all consistently associated with components named after LIBASSIMP_COMPONENT
or LIBASSIMP-DEV_COMPONENT CMake variables.

It streamlines the packaging of specific components of assimp in client
projects leveraging the CPACK_INSTALL_CMAKE_PROJECTS variable.

Failing to do so leads to "/path/to/assimp-build/code/cmake_install.cmake"
file having install rules associated with a component called "Unspecified".

See https://cmake.org/cmake/help/v3.10/command/install.html#installing-targets
and https://cmake.org/cmake/help/v3.22/module/CPack.html#variable:CPACK_INSTALL_CMAKE_PROJECTS
2022-02-17 05:47:34 -05:00
Kim Kulling 510504a2c6
Merge pull request #4387 from assimp/kimkulling/fbx_use_ai_epsilon
Refactoring: add usage of ai_epsilon to fbx.
2022-02-16 22:38:34 +01:00
Kim Kulling 9bf5d01469 Fix invalid initialization of constexpr. 2022-02-16 21:22:35 +01:00
Kim Kulling 9e23d771bc Fix invalid initialization of constexpr. 2022-02-16 21:19:17 +01:00
Kim Kulling 76a7614c4b Adapt ai_epsilon to code 2022-02-16 20:07:27 +01:00
Kim Kulling 50d7e6fc61 Add definition for skeleton 2022-02-16 00:18:32 +01:00
Kim Kulling 067c5d9ec4 Refactoring: add usage of ai_epsilon to fbx. 2022-02-16 00:17:26 +01:00
Kim Kulling 884bb39391
Merge pull request #4381 from assimp/kimkulling/introduce_compression
Kimkulling/introduce compression
2022-02-15 19:09:52 +01:00
Kim Kulling 5d8e5fd130
Update XFileParser.cpp
Fix typo
2022-02-15 16:10:33 +01:00
Kim Kulling 7c13b16d30 Add missing flush modes supported by zlib 2022-02-14 20:51:06 +01:00
Kim Kulling 416f823866 Merge branch 'kimkulling/introduce_compression' of https://github.com/assimp/assimp into kimkulling/introduce_compression 2022-02-14 20:25:27 +01:00
Kim Kulling c718500c55 Fix last review findings and finish windows bits 2022-02-14 20:25:18 +01:00
Kim Kulling 9a585d7b3c
Merge branch 'master' into kimkulling/introduce_compression 2022-02-13 19:58:22 +01:00
Kim Kulling 52b6c4f7c0 Fix broken importer and add some review findings2 2022-02-13 18:44:22 +01:00
Kim Kulling 3e09d462fa Fix compression for fbx 2022-02-12 09:25:45 +01:00
Kim Kulling 97c7e084c2
Merge pull request #4380 from malytomas/tomas/fixsizet
fix missing include for size_t
2022-02-11 08:55:35 +01:00
Kim Kulling 23b43d1825 Fix X-Importer decompress algorithm 2022-02-08 21:43:14 +01:00
Kim Kulling 27bcddfb1a Migrate more importers to compression class 2022-02-08 20:43:47 +01:00
Tomas Maly acf73659d8 fix missing include for size_t 2022-02-08 00:08:46 +01:00
Kim Kulling dcd5c1dcfd
Merge pull request #4375 from assimp/kimkulling/introduce_compression
Introduce compression class to encapsulate compression via zlib
2022-02-07 10:23:23 +01:00
Kim Kulling ce61ea56a5
Merge branch 'master' into kimkulling/introduce_compression 2022-02-07 10:02:51 +01:00
Kim Kulling ed8612ea35
Merge pull request #4376 from assimp/kimkulling-lwo-enum-validation_issue4236-1
LWO: validate enum value before parsing it
2022-02-07 10:02:13 +01:00
Kim Kulling 389fc11e5b
Merge branch 'master' into kimkulling-lwo-enum-validation_issue4236-1 2022-02-07 09:38:36 +01:00
Kim Kulling a9e2864cb4
Merge pull request #4378 from assimp/kimkulling-temporary-disable-hunter
Update ccpp.yml
2022-02-07 09:36:16 +01:00
Kim Kulling 836d12b9af
Update ccpp.yml
- Temporary disable hunter for windows
- closes https://github.com/assimp/assimp/issues/4377
2022-02-07 09:23:59 +01:00
Kim Kulling 9a15ca1007
LWO: validate enum value before parsing it
- Check for valid enum values
- closes https://github.com/assimp/assimp/issues/4236
2022-02-07 09:08:23 +01:00
Kim Kulling eb5a7938e0 Remove dead code 2022-02-06 21:16:04 +01:00
Kim Kulling 9335cc30ab INtroduce compression class to encapsulate compression via zlib 2022-02-06 20:42:58 +01:00
Kim Kulling ecfb9757d0
Merge pull request #4371 from assimp/kimkulling-remove_travis
Delete .travis.sh
2022-02-03 14:24:53 +01:00
Kim Kulling d643146192
Delete .travis.yml 2022-02-03 14:03:50 +01:00
Kim Kulling a595cdad06
Delete .travis.sh 2022-02-03 14:03:20 +01:00
Kim Kulling ce880331df
Merge pull request #4366 from malytomas/master
fix compilation with clangcl on windows
2022-02-02 22:36:01 +01:00
Kim Kulling 4141260fc9
Merge branch 'master' into master 2022-02-02 21:21:01 +01:00
Kim Kulling 6c4addf158
Merge pull request #4367 from umlaeute/bugfix/bigendian
use fully qualified namespace in byteswap macros
2022-01-31 23:48:41 +01:00
IOhannes m zmölnig (Debian/GNU) ed6b6cd65c use fully qualified namespace in byteswap macros
Closes: https://github.com/assimp/assimp/issues/4358
2022-01-31 14:42:59 +01:00
Tomas Maly 3976f9a092 fix compilation with clangcl on windows 2022-01-30 22:04:41 +01:00
Kim Kulling a214b0833f
Merge pull request #4359 from assimp/kimkulling-hmp_fix_override_issue4235
HMP: Fix override during copying position data
2022-01-27 00:09:20 +01:00
Kim Kulling f217bd4b5f
Update HMPLoader.cpp 2022-01-26 19:42:09 +01:00
Kim Kulling 305d1f45aa
Add some constants and fix compile 2022-01-26 19:36:38 +01:00
Kim Kulling 50b00d33b5
HMP: Fix override during copying position data
- Fix override
- closes https://github.com/assimp/assimp/issues/4235
2022-01-26 19:22:52 +01:00
Kim Kulling 5698d41bf9
Merge pull request #4355 from assimp/kimkulling_fix_win64_warning_unreachable_code
ASE: Fix warning unreachable code
2022-01-24 20:43:34 +01:00
Kim Kulling 06fffb4f83 ASE: Fix warning unreachable code 2022-01-24 20:05:25 +01:00
Kim Kulling 83d4ab8563
Merge pull request #4353 from assimp/kimkulling-preparation_v5.2.0
Udate version to 5.2.0
2022-01-23 23:30:08 +01:00
Kim Kulling 91737f1cc9
Fix copyright: last year 2022-01-23 21:18:31 +01:00
Kim Kulling c4a66ae988
Update utVersion.cpp 2022-01-23 21:10:19 +01:00
Kim Kulling 1d34cb2c72
Udate version to 5.2.0 2022-01-23 21:09:20 +01:00
Kim Kulling c5634be708
Merge pull request #4338 from leonvictor/respect-cmake-output-variables
CMAKE: Respect top-level CMAKE_*_OUTPUT_DIRECTORY variables
2022-01-23 19:03:36 +01:00
Kim Kulling 6cc469a5ae
Merge branch 'master' into respect-cmake-output-variables 2022-01-23 18:11:47 +01:00
Kim Kulling 8b1d94d6b1
Merge branch 'master' into deprecated_gltfpbr_macros 2022-01-23 12:16:49 +01:00
Kim Kulling d45af75a5e
Merge pull request #4344 from revu-design/bensewell-fixifcopening4343
IFC Reading: Fix opening reading.
2022-01-23 12:15:38 +01:00
Ben Sewell 3e6fc3a64b Merge remote-tracking branch 'origin/master' into bensewell-fixifcopening4343 2022-01-20 09:43:45 +00:00
Kim Kulling c142676908
Merge pull request #4346 from assimp/kimkulling-fuzzer_ase_outofbounds_issue_4232
ASE: Fix material parsing
2022-01-20 10:40:00 +01:00
Kim Kulling c1968823ad
ASE: Fix material parsing
- Fuzzer error found when material access get's an out-of-bound access.
- Break parsing when material index gets out of range.
- closes https://github.com/assimp/assimp/issues/4232
2022-01-20 10:25:52 +01:00
Kim Kulling 985a5b9667
Merge pull request #4342 from assimp/krishty-new-file-detection
Krishty new file detection
2022-01-19 23:05:27 +01:00
Kim Kulling cbc4459dda Fix compile error: missing var 2022-01-19 22:03:11 +01:00
Kim Kulling 43763f53d6 Fix compile error: missing var 2022-01-19 22:00:53 +01:00
Kim Kulling 15b08f643a Fix warning: unused variable 2022-01-19 21:55:24 +01:00
Kim Kulling 17d5633a5b Add missing SImpleExtensionCheck 2022-01-19 21:42:14 +01:00
Kim Kulling 4cb76e6a18
Update UnrealLoader.cpp 2022-01-18 22:29:55 +01:00
Kim Kulling 12b01dd575
Update SMDLoader.cpp 2022-01-18 22:28:54 +01:00
Kim Kulling 7b24437f06
Update SIBImporter.cpp 2022-01-18 22:27:19 +01:00
Kim Kulling ec63fe74ee
Update RawLoader.cpp 2022-01-18 22:26:16 +01:00
Kim Kulling 088658b359
Update Q3BSPFileImporter.cpp 2022-01-18 22:25:43 +01:00
Kim Kulling b4dee9220d
Update Q3BSPFileImporter.cpp 2022-01-18 22:25:22 +01:00
Kim Kulling ffc13f18ba
NFF: reenable canRead 2022-01-18 22:24:11 +01:00
Kim Kulling 331cb5ac72
Update M3DImporter.cpp 2022-01-18 22:23:01 +01:00
Kim Kulling c3b91dd766
C4D. Fix merge conflicts 2022-01-18 22:21:58 +01:00
Kim Kulling ea5996307a
Update B3DImporter.cpp 2022-01-18 22:20:37 +01:00
Kim Kulling efd1d36aa9
Merge branch 'master' into krishty-new-file-detection 2022-01-18 22:17:50 +01:00
Kim Kulling 959af1ac4d
Revert change 2022-01-18 21:37:49 +01:00
Kim Kulling 7350baea93
Revert change 2022-01-18 21:36:55 +01:00
Kim Kulling cf47411742
Revert change 2022-01-18 21:36:02 +01:00
Kim Kulling 1e80630d5d
Revert change. 2022-01-18 21:35:09 +01:00
Kim Kulling 037732c429
Revert change 2022-01-18 21:34:18 +01:00
Kim Kulling cff213d4dd
Revert change 2022-01-18 21:33:05 +01:00
Kim Kulling 9d0006fecb
Revert change 2022-01-18 21:32:06 +01:00
Kim Kulling 5af79cac1d Fix unittests + small refactorings 2022-01-18 21:23:43 +01:00
Kim Kulling 141c6ca270
Merge pull request #4339 from Esri/jere9309/read_collada_materials
Collada: Read all instance_material child nodes
2022-01-18 20:28:39 +01:00
Jeremy Sigrist 59f28e168e
Merge branch 'master' into jere9309/read_collada_materials 2022-01-18 09:55:33 -08:00
Kim Kulling 3cca102531
Merge pull request #4265 from Garux/IQM
add Inter-Quake Model (IQM) Importer
2022-01-17 21:43:33 +01:00
Kim Kulling 6e50b04ae0
Merge branch 'master' into IQM 2022-01-17 18:33:37 +01:00
Kim Kulling f21ff66505
Merge pull request #4323 from tanolino/patch-1
Locale independent meter scale
2022-01-17 18:32:24 +01:00
Kim Kulling f16e4fadc7
Merge branch 'master' into patch-1 2022-01-17 18:18:16 +01:00
Ben Sewell 415b0e19d9 Changes for gcc compatibility 2022-01-17 16:39:50 +00:00
Ben Sewell 65f2353105 IFC Reading: Fix opening reading. 2022-01-17 15:49:11 +00:00
Kim Kulling cbde086bfb Merge branch 'krishty-new-file-detection' of https://github.com/assimp/assimp into krishty-new-file-detection 2022-01-16 20:58:07 +01:00
Kim Kulling acd70b35a0 Fix merge issues 2022-01-16 20:57:56 +01:00
Kim Kulling 6ad7505376
Merge branch 'master' into krishty-new-file-detection 2022-01-16 20:43:57 +01:00
Kim Kulling 05746acb07 Merge branch 'new-file-detection' of https://github.com/krishty/assimp into krishty-new-file-detection 2022-01-16 20:41:24 +01:00
Léon db162939b2
Merge branch 'master' into respect-cmake-output-variables 2022-01-16 16:19:03 +01:00
Kim Kulling 41cfcc7d16
Merge pull request #4336 from kovacsv/common_base64
Move Base64 encode/decode functionality to the common folder
2022-01-16 14:44:54 +01:00
Kim Kulling f8253c3e3c
Update Base64.hpp 2022-01-16 13:21:01 +01:00
Kim Kulling 7eec3f0d8f
Update copyrights. 2022-01-16 13:19:25 +01:00
Viktor Kovacs c8ab39dd04
Merge branch 'master' into common_base64 2022-01-15 23:42:56 +01:00
Léon fe40ddf9a9
Merge branch 'master' into respect-cmake-output-variables 2022-01-14 16:45:27 +01:00
Kim Kulling 5976d54437
Merge pull request #4204 from TThulesen/so-unloading
Allow dlclose of so library by avoiding unique symbols.
2022-01-13 20:32:02 +01:00
Kim Kulling d3e24196c0
Merge branch 'master' into so-unloading 2022-01-13 20:19:23 +01:00
Jeremy Sigrist 5aac72791d
Merge branch 'master' into jere9309/read_collada_materials 2022-01-12 10:12:58 -08:00
Jeremy Sigrist e671d087e1 Collada: Read all instance_material child nodes 2022-01-12 09:52:12 -08:00
Léon 8a7576b85c Check for variable definition rather than empty string 2022-01-12 15:04:41 +01:00
Viktor Kovacs c71f4bc95a
Merge branch 'master' into common_base64 2022-01-11 18:46:08 +01:00
Léon 7f2ab47b5a Respect top-level CMAKE_*_OUTPUT_DIRECTORY variables 2022-01-11 18:36:05 +01:00
Kim Kulling 6a640a2de8
Merge pull request #4330 from danoli3/master
Assimp Patch Android LTS NDK 23 Fix
2022-01-11 10:30:40 +01:00
Kim Kulling 9d06bd4678
Merge branch 'master' into master 2022-01-11 10:13:22 +01:00
Kim Kulling 5dcaf445c3
Merge pull request #4337 from lopsided98/patch-1
Fix imported target include directory
2022-01-11 10:13:02 +01:00
tanolino f8abb015de
Merge branch 'master' into patch-1 2022-01-11 09:55:19 +01:00
Dan Rosser e6cc187a7e
Merge branch 'master' into master 2022-01-11 13:51:59 +11:00
Kim Kulling d68224f2ed
Merge branch 'master' into patch-1 2022-01-10 23:45:03 +01:00
Kim Kulling a2c2b64877
Merge pull request #4335 from assimp/update_copyrights
Update copyrights
2022-01-10 21:53:59 +01:00
Kim Kulling f63b10bf45 OpenGEX: Fix usage of texture specular token 2022-01-10 21:22:44 +01:00
Viktor Kovacs 6b9732721a
Merge branch 'assimp:master' into common_base64 2022-01-10 21:15:31 +01:00
Kim Kulling 50c7301a38 Update copyrights 2022-01-10 21:13:43 +01:00
Dan Rosser 00bf74ad6d
Merge branch 'master' into master 2022-01-10 14:04:24 +11:00
Ben Wolsieffer 629c8850ec Fix imported target include directory
Fix the imported target include directory when the headers are not installed in '${CMAKE_INSTALL_PREFIX}/include'.
2022-01-09 20:59:14 -05:00
Kim Kulling 8134cae998
Merge pull request #4333 from assimp/kimkulling-prepare_v5.1.6
Update to 5.1.6
2022-01-09 23:45:44 +01:00
Kim Kulling 30f1583dde
Update utVersion.cpp 2022-01-09 21:06:05 +01:00
Kim Kulling 1d8667bfdc
Update to 5.1.6 2022-01-09 18:06:33 +01:00
Dan Rosser 9c4255b486 Assimp Android LTS NDK 23 Fix 2022-01-09 18:19:33 +11:00
Kim Kulling cb3e846a19
Merge pull request #4318 from vpzomtrrfrt/fix-bone-fit-check
Fix bone fitted check in gltf2 exporter
2022-01-08 12:59:21 +01:00
Kim Kulling 8cb5ab69b0
Merge branch 'master' into fix-bone-fit-check 2022-01-08 11:35:59 +01:00
Kim Kulling b40d9abdb9
Merge pull request #4328 from assimp/kimkulling-x3d_fix_nullptr_exception
Fix nullptr-dereferencing
2022-01-08 11:35:45 +01:00
Kim Kulling 776130534b
Fix nullptr-dereferencing
- Fix a possible nullptr-exception.
2022-01-06 22:35:32 +01:00
Kim Kulling 6a1f720f68
Merge pull request #4324 from alpire/master
Fix fuzzer crashes
2022-01-06 20:43:38 +01:00
Alex Rebert b14b34d2b8
LWSLoader: Fix out of bounds iterator access
Fix https://bugs.chromium.org/p/oss-fuzz/issues/detail?id=38947
Fix #4222
2022-01-05 15:43:16 -05:00
Alex Rebert 310c81aaa2
Add support for spanned archives
Without it, assimp would crash on some inputs by jumping to a NULL
opendisk function. This commit adds an opendisk implementation, which
required adding a filename member to ZipFile.

Fix https://bugs.chromium.org/p/oss-fuzz/issues/detail?id=38873
Fix #4229
2022-01-05 15:43:10 -05:00
Alex Rebert 34d8fba100
Fix stack overflow in ZipArchiveIOSystem::MapArchive
The function allocates a filename buffer of 256, and copies the filename
extracted from the zip file into it. However, a filename might be larger
than 256 characters, in which case the function would write out of bounds.

This commit skips any file whose name is larger than 256 to avoid the
overflow.

Fix https://bugs.chromium.org/p/oss-fuzz/issues/detail?id=38870
Fix #4228
2022-01-05 10:01:46 -05:00
tanolino 089fc7311a
GCC might have an issue with value type Errors 2022-01-05 10:34:27 +01:00
tanolino 04d2d13172
Locale independent meter scale
`XmlParser::getRealAttribute(...)` will call `strtod` (or `wcstod`) which are both locale dependent. So on a German locale system a scale of 0.01 meter will be parsed to 0. In order to avoid that I use the `fast_atoreal_move<ai_real>()` method.
2022-01-05 10:10:38 +01:00
Kim Kulling 1d815fc23e
Merge pull request #4321 from assimp/kimkulling_update_morphing_method_doc_issue4320
Add link to used enum for a better understandability
2022-01-04 17:46:37 +01:00
Kim Kulling a591944c04 Add link to used enum for a better understandability for the mesh morphing method. 2022-01-04 17:32:18 +01:00
Colin Reeder 87e9dbac40
Fix bone fitted check in gltf2 exporter 2022-01-03 16:32:34 -07:00
kovacsv 125acf9ec8 Merge remote-tracking branch 'origin/master' into common_base64 2022-01-02 19:47:57 +01:00
kovacsv bbe12240ca Move Base64 encode/decode functionality to the common folder. 2022-01-02 19:47:43 +01:00
Kim Kulling c2375a4ff0
Merge pull request #4272 from errissa/pbr-obj
Support PBR properties/maps in Obj importer
2021-12-31 10:38:50 +01:00
Kim Kulling ab19cff328
Merge branch 'master' into pbr-obj 2021-12-31 08:33:30 +01:00
Kim Kulling 049a241855
Merge pull request #4314 from pseiderer/ps-devel-fix-namespace-001
RFC: BlenderScene: use explicit namespace instead of using namespace
2021-12-31 08:32:54 +01:00
Kim Kulling a86ab45161
Merge branch 'master' into ps-devel-fix-namespace-001 2021-12-31 08:20:24 +01:00
Peter Seiderer a099fe7cd3 BlenderScene: use explicit namespace instead of using namespace
Fixes (using g++ Sourcery CodeBench Lite 2014.05-29 - 4.8.3 20140320):

  .../build/assimp-5.1.4/code/AssetLib/Blender/BlenderScene.cpp:101:33: error: specialization of 'template<class T> void Assimp::Blender::Structure::Convert(T&, const Assimp::Blender::FileDatabase&) const' in different namespace [-fpermissive]
           const FileDatabase &db) const {
                                   ^
 In file included from .../build/assimp-5.1.4/code/AssetLib/Blender/BlenderScene.h:49:0,
                   from .../build/assimp-5.1.4/code/AssetLib/Blender/BlenderScene.cpp:47:
  .../build/assimp-5.1.4/code/AssetLib/Blender/BlenderDNA.h:266:10: error:   from definition of 'template<class T> void Assimp::Blender::Structure::Convert(T&, const Assimp::Blender::FileDatabase&) const' [-fpermissive]
       void Convert(T &dest, const FileDatabase &db) const;
            ^
  .../build/assimp-5.1.4/code/AssetLib/Blender/BlenderScene.cpp:121:33: error: specialization of 'template<class T> void Assimp::Blender::Structure::Convert(T&, const Assimp::Blender::FileDatabase&) const' in different namespace [-fpermissive]
           const FileDatabase &db) const {
                                   ^
  In file included from .../build/assimp-5.1.4/code/AssetLib/Blender/BlenderScene.h:49:0,
                   from .../build/assimp-5.1.4/code/AssetLib/Blender/BlenderScene.cpp:47:
  .../build/assimp-5.1.4/code/AssetLib/Blender/BlenderDNA.h:266:10: error:   from definition of 'template<class T> void Assimp::Blender::Structure::Convert(T&, const Assimp::Blender::FileDatabase&) const' [-fpermissive]
       void Convert(T &dest, const FileDatabase &db) const;
            ^

Signed-off-by: Peter Seiderer <ps.report@gmx.net>
2021-12-30 18:01:54 +01:00
Kim Kulling 85dd84cc78
Merge pull request #4259 from VyacheslavVanin/fix-fbx-metalness-import
fix fbx import metalness
2021-12-29 20:35:46 +01:00
Kim Kulling 0a5bd792de
Merge branch 'master' into fix-fbx-metalness-import 2021-12-29 19:08:16 +01:00
Kim Kulling c882731688
Merge pull request #4311 from SirLynix/fix-mingw
CMake: Replace CMAKE_COMPILER_IS_MINGW by MINGW
2021-12-29 17:31:12 +01:00
Jérôme Leclercq 81fc50f612 CMake: Replace CMAKE_COMPILER_IS_MINGW by MINGW
See https://discourse.cmake.org/t/cmake-compiler-is-mingw-removed/4539 and https://cmake.org/cmake/help/latest/variable/MINGW.html
2021-12-28 15:58:37 +01:00
Vyacheslav Vanin 2da06dd41a
Merge branch 'master' into fix-fbx-metalness-import 2021-12-26 17:31:33 +03:00
Kim Kulling 54a8da1d55
Merge pull request #4293 from assimp/add_colsole_progresshandler_issue_963
Add console progresshandler
2021-12-26 11:38:24 +01:00
Kim Kulling d44641398f Add console progresshandler 2021-12-26 11:16:02 +01:00
Garux d11d2fc60d fix Inter-Quake Model (IQM) Importer MSVC warnings 2021-12-24 18:36:25 +03:00
Kim Kulling 4d7e817bd8
Merge pull request #4284 from assimp/kimkulling-skip_empty_embedded_textures_issue4238
MDL: Do not try to copy empty embedded texture
2021-12-23 13:03:43 +01:00
Kim Kulling db2500c393
MDL: Do not try to copy empty embedded texture
- When an embedded texture is empty, skip it instead of trying to copy it. This must fail.
- closes https://github.com/assimp/assimp/issues/4238
- Found from the Google fuzzer.
2021-12-23 12:28:43 +01:00
Kim Kulling 64af16c427
Merge pull request #4283 from assimp/kimkulling-avoid_invalid_string_access_issue4222
LWS-Import: Avoid access to empty string token
2021-12-22 21:28:42 +01:00
Kim Kulling 635153b3a4
LWS-Import: Avoid access to empty string token
- Fix invalid access to string pointer when string token is empty
- closes https://github.com/assimp/assimp/issues/4222
2021-12-22 21:08:28 +01:00
Kim Kulling 7ec52e9e02
Merge pull request #4282 from assimp/kimkulling-fix_heap_overflow_during_utf8_issue4230
Make sure no overflow can happen
2021-12-22 20:56:39 +01:00
Kim Kulling 2c66d4d3a2
Optimize the check 2021-12-22 20:43:44 +01:00
Kim Kulling 215f4e1f4d
Fix typo 2021-12-22 20:02:29 +01:00
Kim Kulling 2eb86d75b8
Make sure no overflow can happen
- During UTF32 LE with BOM make sure that the byteswap operation will have enough space when iterating through the text buffer, which shall get encoded.
- closes https://github.com/assimp/assimp/issues/4230
2021-12-22 19:45:19 +01:00
Rene Sepulveda 19371af6e6 Support PBR properties/maps in Obj importer 2021-12-20 13:43:46 -05:00
Kim Kulling cab7b330ee
Merge branch 'master' into so-unloading 2021-12-20 17:58:18 +01:00
Kim Kulling 80b0b897ed
Merge pull request #4266 from assimp/kimkulling-patch-1
Update version to 5.1.4
2021-12-18 21:42:19 +01:00
Kim Kulling 572e31ddcb
Update version to 5.1.4 2021-12-18 21:30:04 +01:00
Kim Kulling 9dfd401624
Merge pull request #4263 from RivIs-sssa01/fix_X3DImporter.cpp_closingBraces
Fix compile error when ASSIMP_BUILD_NO_X3D_IMPORTER is define.
2021-12-18 21:28:32 +01:00
Kim Kulling 5a46597e47
Merge branch 'master' into fix_X3DImporter.cpp_closingBraces 2021-12-18 21:17:23 +01:00
Kim Kulling 01f68dd916
Merge pull request #4264 from Garux/IMAGE1.bmp_jpg
fix test/models/3DS/IMAGE1.bmp: is jpg
2021-12-18 21:16:59 +01:00
Garux 46f618a6ef add Inter-Quake Model (IQM) Importer 2021-12-18 15:34:58 +03:00
Garux 7fc4603579 fix test/models/3DS/IMAGE1.bmp: is jpg 2021-12-18 14:32:46 +03:00
sssaoi d7bf8d6e07 Fix compile error when ASSIMP_BUILD_NO_X3D_IMPORTER is define. 2021-12-18 14:50:22 +09:00
Vyacheslav Vanin 53968550e4
Merge branch 'master' into fix-fbx-metalness-import 2021-12-17 12:08:55 +03:00
Kim Kulling 6693e7e08c
Merge pull request #4256 from rumgot/cmake_no_known_features_error_fix
Fixed cmake error: No known features for C compiler when using the assimp library from another project
2021-12-16 21:35:52 +01:00
Kim Kulling 3e97329fa1
Merge branch 'master' into cmake_no_known_features_error_fix 2021-12-16 20:27:58 +01:00
Kim Kulling c72e3905c2
Merge pull request #4261 from assimp/kimkulling-enable_language_support_issue4257-2
Enable C++11 and C99
2021-12-16 20:27:17 +01:00
Kim Kulling 2ffa0c59eb
Switch to C++11 until gtest gets an update. 2021-12-16 19:54:40 +01:00
Kim Kulling af42d53c92
Enable C++17 and C99
- closes https://github.com/assimp/assimp/issues/4257
2021-12-16 19:41:15 +01:00
Kim Kulling c4d858cf4d
Merge pull request #4260 from assimp/kimkulling-patch-1
Fix a typo in the Visual-Studio Dll-Versions
2021-12-16 15:39:01 +01:00
Kim Kulling 7a29147095
Fix a typo 2021-12-16 14:55:23 +01:00
Kim Kulling efdaf603b0
Merge branch 'master' into so-unloading 2021-12-16 14:52:58 +01:00
Kim Kulling 46b28a442b
Merge pull request #4226 from umlaeute/bugfix/import-crashes
Bugfix/import crashes
2021-12-16 14:51:34 +01:00
Vyacheslav.Vanin 1afe7e6255 fix fbx import metalness
Can't import metalness textures in fbx importer
2021-12-16 12:09:06 +03:00
Kim Kulling 26dc168449
Merge branch 'master' into bugfix/import-crashes 2021-12-15 07:54:48 +01:00
rumgot 92aef9236f Fixed cmake error: No known features for C compiler when using the assimp library from another project. 2021-12-14 23:54:36 +03:00
Kim Kulling 8322e393c5
Merge pull request #4244 from kovacsv/copyscene_fix
Bug: Export crashes when any of the meshes contains texture coordinate names #4243
2021-12-14 00:14:42 +01:00
Kim Kulling 003942aafe
Merge branch 'master' into copyscene_fix 2021-12-13 21:19:08 +01:00
Kim Kulling 0491eb3591
Merge pull request #4253 from assimp/kimkulling_fix_double_prec_build_issue4248
Use correct XmlParser-methods and add some missing casts
2021-12-13 21:17:15 +01:00
Viktor Kovacs d619f7015a
Merge branch 'master' into copyscene_fix 2021-12-13 20:08:45 +01:00
Kim Kulling 65bc801734 Some fixes for possible divisions by zero 2021-12-13 18:48:58 +01:00
Kim Kulling e4f38810ca Add missing static casts 2021-12-13 18:12:19 +01:00
Kim Kulling cb657e4c13 Use correct XmlParser-methods and add some missing casts 2021-12-13 18:06:23 +01:00
Kim Kulling 052594568a
Merge pull request #4247 from inhosens/master
Revert "FBXConverter : Fix timescales of FBX animations"
2021-12-12 21:42:14 +01:00
Kim Kulling 54e60b031e
Merge branch 'master' into master 2021-12-12 21:12:37 +01:00
Viktor Kovacs 4959924dab
Merge branch 'master' into copyscene_fix 2021-12-10 20:10:25 +01:00
Kim Kulling 819d9f7257
Merge pull request #4250 from assimp/kimkulling-fix_division_by_zero_issue4235-1
Update HMPLoader.cpp
2021-12-10 15:03:01 +01:00
Kim Kulling 33c6762272
Update HMPLoader.cpp
- Fix possible division by zero
- closes https://github.com/assimp/assimp/issues/4235
2021-12-10 14:32:45 +01:00
Kim Kulling 6bb856335f
Merge pull request #4249 from assimp/kimkulling-fix_nullptr_dereferencing_issue4237
Fix nullptr dereferencing from std::shared_ptr
2021-12-10 11:02:32 +01:00
Kim Kulling 68682d75b5
Fix nullptr dereferencing from std::shared_ptr
- Finding from fuzzer
- closes https://github.com/assimp/assimp/issues/4237
2021-12-10 08:39:21 +01:00
Inho Lee c2297e9199 Revert "FBXConverter : Fix timescales of FBX animations"
The previous patch was made by misunderstanding about mTime.
It is not real time value, but time ticks.

This reverts commit b8bf1eac04.
2021-12-09 10:57:39 +01:00
Viktor Kovacs d2c8cb755e
Merge branch 'master' into copyscene_fix 2021-12-08 14:29:31 +01:00
Kim Kulling ea2e442046
Merge pull request #4245 from assimp/kimkulling-fix-division-by-zero-issue4240
Fix division by zero in PointInTriangle2D
2021-12-07 21:37:50 +01:00
Kim Kulling e51feac2c5
Update PolyTools.h 2021-12-07 21:19:01 +01:00
Kim Kulling 1e4861f86e
Fix division by zero in PointInTriangle2D
- closes https://github.com/assimp/assimp/issues/4240
2021-12-07 20:45:21 +01:00
kovacsv 2be6bac4b0 Bug: Export crashes when any of the meshes contains texture coordinate names #4243 2021-12-07 20:42:43 +01:00
IOhannes m zmölnig 9a7ee0ac14 Throw a DeadlyImportError rather than an assertion if all materials are redundant and thus removed
Closes: https://github.com/assimp/assimp/issues/4224
Closes: https://github.com/assimp/assimp/issues/4225
2021-12-07 12:35:15 +01:00
IOhannes m zmölnig 6e090c88b8 fix index variable for surfaces
Closes: https://github.com/assimp/assimp/issues/4209
2021-12-07 12:13:31 +01:00
RichardTea 75e7d0f6ef
Merge branch 'master' into deprecated_gltfpbr_macros 2021-12-07 09:01:50 +00:00
Kim Kulling 70f5cca9c3
Merge pull request #4219 from assimp/kimkulling-v5.1.3
Update CMakeLists.txt
2021-12-04 21:01:52 +01:00
Kim Kulling 5b4829155c
Merge branch 'master' into so-unloading 2021-12-04 20:28:12 +01:00
Kim Kulling 983b20cda6
Update CMakeLists.txt
- tag v5.1.3
2021-12-04 20:26:29 +01:00
Kim Kulling 16149348ed
Merge pull request #4217 from umlaeute/bugfix/x3d-extension-check
Fix file-extension check for X3D-files
2021-12-01 16:07:12 +01:00
IOhannes m zmölnig 0e2ac2a91c X3D: simplistic attempt to avoid crashes due to nullptr access
Related: https://github.com/assimp/assimp/issues/4201

while the crashes go away, i'm not sure whether this is the correct fix.
also, afaict the X3D importer produces wrong results anyhow
2021-12-01 12:21:29 +01:00
IOhannes m zmölnig c8cdf3009e X3D: replace 'here' debugging printout by an assertion.
if mNodeElementCur is NULL, we get a crash anyhow...
2021-12-01 12:19:19 +01:00
IOhannes m zmölnig 23d7811276 X3D: consistent initialization with nullptr 2021-12-01 11:35:06 +01:00
IOhannes m zmölnig 836963428e Fix file-extension check for X3D-files
using the pre-existing and well-tested GetExtension() (which happens
to also normalize the extension), rather than attempting our own
buggy one...

Closes: https://github.com/assimp/assimp/issues/4177
2021-12-01 11:17:42 +01:00
Kim Kulling 8c9a148776
Merge pull request #4216 from inhosens/master
Interpolate euler rotations for quaternion animations
2021-12-01 00:24:15 +01:00
Kim Kulling 834ec20008
Merge branch 'master' into master 2021-11-30 23:44:42 +01:00
Kim Kulling cc05b4c8f1
Merge pull request #4211 from ms-maxvollmer/ms-maxvollmer/crashfixes2
Added checks for out of bounds data access/writing
2021-11-30 23:44:00 +01:00
Kim Kulling d6f3f292f2
Merge branch 'master' into ms-maxvollmer/crashfixes2 2021-11-30 23:17:59 +01:00
Inho Lee 4a37aa2ef8 Interpolate euler rotations for quaternion animations
FBX uses euler rotation but assimp library's base type is
quaternion. When assimp convert FBX some animation information
can be lost.
This patch interpolates euler-angle rotations and insert
additional keyframes for the FBX format.
2021-11-30 12:49:59 +01:00
Kim Kulling 745f5e7e65
Merge pull request #4193 from PencilAmazing/BlenderCollections
Update blender importer to work with Blender 2.8+ files
2021-11-28 23:51:06 +01:00
Pencil Amazing 095bd67e10 Fix memory leaks in CollectionObject by making ob a weak pointer and removing prev pointer.
Something was cyclic in CollectionObject and we don't traverse backwards anyways
2021-11-26 22:09:06 -04:00
Pencil Amazing e831ecf3c2 Add a separate test case for Blender 276 and update Box.blend to be 293 2021-11-26 22:09:06 -04:00
Pencil Amazing 44fa1ec6a7 Make Blender importer aware of collections, and use them when available. Also add the default startup file for Blender 2.93 2021-11-26 22:09:06 -04:00
Kim Kulling 70c1aec7c7
Merge pull request #4212 from assimp/kimkulling-remove_deprecated_data
Delete test/models/3DS/UVTransformTest directory
2021-11-26 19:34:02 +01:00
Kim Kulling 34daf87428
Delete test/models/3DS/UVTransformTest directory
- Remove deprecated data
2021-11-26 19:17:42 +01:00
Max Vollmer (Microsoft Havok) 5e1188c44e Check that positions exist before accessing them 2021-11-26 13:01:38 +00:00
Max Vollmer (Microsoft Havok) 0015823bef Reject files with an invalid byteLength value 2021-11-26 13:01:15 +00:00
Max Vollmer (Microsoft Havok) 38382715f7 Ensure we don't access the vector with an out of bounds index 2021-11-26 13:01:00 +00:00
Kim Kulling da8772c57b
Merge pull request #4207 from jakrams/msft-jakras-fix-corrupted-accessor
Prevent out-of-range memory writes by sparse accessors
2021-11-26 09:02:17 +01:00
Jan Krassnigg 1a5d66714f Prevent out-of-range memory writes by sparse accessors
This turned up during fuzz testing. Corrupted data would make assimp write to random memory locations, leading to subsequent crashes.
2021-11-25 11:20:26 +01:00
Kim Kulling 690e558b88
Update IOSystem.cpp 2021-11-25 09:32:52 +01:00
Thomas Nicky Thulesen 8b78a63b50 Allow dlclose of so library by avoiding unique symbols. 2021-11-23 20:39:48 +01:00
RichardTea d18709b899 Small float values should be true 2021-11-23 14:15:32 +00:00
RichardTea 5143044cc8 redefine AI_MATKEY_GLTF_PBRSPECULARGLOSSINESS
This key is deprecated but is used by Qt5 & Qt 6.2.1 QtQuick3D
2021-11-23 13:55:27 +00:00
RichardTea 2fdf52488f float and integer material property bool conversion
All reading float and integer material property values as bool
Zero => False
Non-Zero => True
2021-11-23 13:53:58 +00:00
RichardTea 42766af702 Merge branch 'master' into deprecated_gltfpbr_macros 2021-11-23 12:03:23 +00:00
Kim Kulling 889e559696
Merge pull request #4195 from ruyo/fix-gltf2-sparse-indicesType
Fixed an incorrect indeiciesType in the glTF2 sparse accessor.
2021-11-22 22:43:43 +01:00
Kim Kulling b22098c234
Merge branch 'master' into fix-gltf2-sparse-indicesType 2021-11-22 22:02:05 +01:00
Kim Kulling 85ea57dcdb
Merge pull request #4196 from Rodousse/fix_mingw_compile_flags
Use adviced c++ flag to supress warning on mingw
2021-11-22 22:01:05 +01:00
Robin Dousse 6819b84b8b Use adviced c++ flag to supress warning on mingw 2021-11-22 09:27:14 +01:00
ruyo 60bfde78eb Fixed an incorrect indeiciesType in the glTF2 sparse accessor. 2021-11-21 23:23:22 +09:00
Kim Kulling bf1f142a72 Fix warnings 2021-11-20 18:40:38 +01:00
Kim Kulling aeba7a43a0
Merge pull request #4185 from rhabacker/win_dll_so_version
On Windows/mingw in shared build mode append '-SOVERSION' to DLL base file name
2021-11-20 16:53:21 +01:00
Kim Kulling 9ebd74bd26
Merge branch 'master' into win_dll_so_version 2021-11-20 14:16:32 +01:00
Kim Kulling 9267f4c5b8
Merge pull request #4184 from RichardTea/deprecated_gltfpbr_macros
Redefine deprecated glTF-specific PBR material macros
2021-11-20 14:01:57 +01:00
Kim Kulling 0d857bcf9f
Merge branch 'master' into deprecated_gltfpbr_macros 2021-11-20 12:35:56 +01:00
Ralf Habacker 2ceb18746b Append '-SOVERSION' to DLL base file name for mingw builds to match common style 2021-11-18 08:17:31 +01:00
Kim Kulling 3db1592f7e
Merge pull request #4187 from RichardTea/collada_value_not_attrib_4179
Collada: Read value, not attribute
2021-11-17 19:16:10 +01:00
RichardTea 74b3be194d Read the Value, not the Attribute
Correct some mistakes made when moving to pugixml from IrrXML
Fixes #4179
2021-11-17 17:10:10 +00:00
RichardTea bab8b8dbab apply clangformat 2021-11-17 17:08:19 +00:00
RichardTea 33845cd019 Only issue compile warning on gcc and msvc
I'm not sure on the proper syntax for clang and mingw
2021-11-17 15:44:16 +00:00
Kim Kulling b1c83f437f
Merge pull request #4173 from jdumas/jdumas/ziplib
Do not build ziplib when 3MF exporter is disabled.
2021-11-17 14:09:07 +01:00
Kim Kulling ce3101ea4e
Merge branch 'master' into jdumas/ziplib 2021-11-17 13:46:16 +01:00
RichardTea c24f99cd0e Redefine deprecated glTF-specific PBR material macros
Intended to support Qt5 QtQuick3D until it is ported to generic PBR
macros.
2021-11-16 11:42:59 +00:00
Kim Kulling c174575cf8
Merge pull request #4181 from assimp/kimkulling-prepare_installer
Update script_x64.iss
2021-11-15 11:05:34 +01:00
Kim Kulling 1ee8c1b51f
Update script_x86.iss
- Update version for 5.1.0 in x86 installer script
2021-11-15 08:41:23 +01:00
Kim Kulling 595799b1bc
Update script_x64.iss
- Update to 5.1.0
2021-11-15 08:39:31 +01:00
Kim Kulling a5a091c138
Merge pull request #4180 from assimp/kimkulling-remove_irrxml_notes
Delete irrXML_note.txt
2021-11-15 08:37:49 +01:00
Kim Kulling e8732341f4
Delete irrXML_note.txt
- Remove deprecated notes from irrxml
2021-11-15 08:23:56 +01:00
Jérémie Dumas b0d564467e
Merge branch 'master' into jdumas/ziplib 2021-11-14 08:25:59 -08:00
Jérémie Dumas 78d72bff59 Fix 3MF presence test. 2021-11-14 08:24:27 -08:00
Kim Kulling 05115b07b4
Merge pull request #4174 from ifree/master
glTF2 skinning related fixes
2021-11-13 09:30:32 +01:00
Kim Kulling b1c336799c
Merge branch 'master' into master 2021-11-13 09:16:27 +01:00
Kim Kulling c3ac5569c5
Merge branch 'master' into jdumas/ziplib 2021-11-13 08:46:46 +01:00
Kim Kulling 4fa3648132
Merge pull request #4172 from assimp/kimkulling-diable_m3m_issue-4126
Disable m3d for 5.1
2021-11-13 08:45:51 +01:00
Kim Kulling f48731622b Disable m3d tesat 2021-11-13 08:30:29 +01:00
Kim Kulling fc0617280e Disable m3d-export 2021-11-13 08:16:34 +01:00
freizhang b9937994ca Fix glTF2 skinning bone weight exporting issue 2021-11-13 12:07:29 +08:00
freizhang 6e6807ee6c Verbose processor bone weight count fix 2021-11-13 11:56:15 +08:00
freizhang 1407491a67 glTF2 exporter buffer overrun issue fix. 2021-11-13 11:52:49 +08:00
Jérémie Dumas 57d22e4dbf
Merge branch 'master' into jdumas/ziplib 2021-11-12 10:13:21 -08:00
Kim Kulling 159fadebbf
Update M3DExporter.cpp 2021-11-12 17:53:46 +01:00
Kim Kulling 0beacc3854
Merge branch 'master' into kimkulling-diable_m3m_issue-4126 2021-11-12 16:02:51 +01:00
Kim Kulling f03dcc27c0
Update M3DExporter.h 2021-11-12 15:39:21 +01:00
Kim Kulling fe73213420
Merge pull request #4111 from MalcolmTyrrell/MalcolmTyrrell/jsonSchemaSupport
Allow the gltf2 Importer to optionally use glTF 2.0 JSON schemas for initial validation
2021-11-12 13:12:31 +01:00
Kim Kulling e2ccd17494
Fix typo 2021-11-12 11:20:22 +01:00
Kim Kulling 157e032bde
Fix small findings
- Merge anonymous functions into one block.
- Some reformattings
2021-11-12 11:08:19 +01:00
Kim Kulling 37c81e7a28
Merge branch 'master' into MalcolmTyrrell/jsonSchemaSupport 2021-11-12 10:37:19 +01:00
Kim Kulling 2e5e176bf3
Merge pull request #4147 from alpire/master
Fix out-of-bounds read in RemoveLineComments
2021-11-12 10:36:44 +01:00
Kim Kulling c22524351a
Merge branch 'master' into master 2021-11-12 09:56:56 +01:00
Kim Kulling 97b8e41997
Fix formatting 2021-11-12 09:56:45 +01:00
Kim Kulling a7a6b96ca8
Merge pull request #4150 from kovacsv/readme_add_assimpjs
Add assimpjs link to the ports in the readme file
2021-11-12 09:31:39 +01:00
Kim Kulling 6f853be88c
Merge branch 'master' into readme_add_assimpjs 2021-11-12 09:18:22 +01:00
Kim Kulling b43a84a496
Merge pull request #4159 from RichardTea/3ds_export_4157
3DS Export: Add support for aiShadingMode_PBR_BRDF
2021-11-12 09:17:49 +01:00
Kim Kulling ece61c6c68
Update M3DWrapper.cpp 2021-11-12 09:17:32 +01:00
Kim Kulling 608bccd9cf
Update M3DWrapper.h 2021-11-12 09:13:48 +01:00
Kim Kulling 13731b37c4
Merge branch 'master' into 3ds_export_4157 2021-11-12 07:06:52 +01:00
Kim Kulling 4abf37ace6
Update CMakeLists.txt 2021-11-11 23:22:06 +01:00
Kim Kulling 4854978108
Disable m3d for 5.1
- closes https://github.com/assimp/assimp/issues/4126
2021-11-11 22:15:56 +01:00
Kim Kulling 1f8edd5959
Merge pull request #4160 from RichardTea/fix_gltf_warning_4126
Check and limit maximum size of glTF
2021-11-11 21:30:07 +01:00
Kim Kulling 43b0ef181a
Merge branch 'master' into fix_gltf_warning_4126 2021-11-11 20:30:07 +01:00
Kim Kulling add7f1355e
Merge pull request #4163 from RichardTea/fix_aiMesh_abi_4162
Better aiMesh ABI compatibility with 5.0.1, make smaller
2021-11-11 20:27:40 +01:00
Kim Kulling 7120504c46
Merge branch 'master' into fix_aiMesh_abi_4162 2021-11-11 20:02:46 +01:00
Kim Kulling 8a1563d61a
Merge pull request #4170 from assimp/Artenuvielle-x3d_pugi_migration_artenuvielle
Artenuvielle x3d pugi migration artenuvielle
2021-11-11 19:19:33 +01:00
Kim Kulling eafb79e7dc Merge branch 'Artenuvielle-x3d_pugi_migration_artenuvielle' of https://github.com/assimp/assimp into Artenuvielle-x3d_pugi_migration_artenuvielle 2021-11-11 19:06:33 +01:00
Kim Kulling 952f0a53c9 Try to fix a leak 2021-11-11 19:06:25 +01:00
Viktor Kovacs b6994c5e1f
Merge branch 'master' into readme_add_assimpjs 2021-11-11 07:38:42 +01:00
Kim Kulling 9f28ef4c25
Merge branch 'master' into Artenuvielle-x3d_pugi_migration_artenuvielle 2021-11-10 20:43:39 +01:00
Kim Kulling a31c979abc Use helloworld as X3D-Testcase 2021-11-10 20:40:05 +01:00
Kim Kulling 8ed18621db Fixes 2021-11-10 20:37:27 +01:00
Kim Kulling fe511fddc4
Merge pull request #4165 from irajsb/master
Added UE4 plugin
2021-11-10 11:06:22 +01:00
Kim Kulling 39664d608d
Merge branch 'master' into master 2021-11-10 10:51:18 +01:00
Kim Kulling baf3f00644
Merge branch 'master' into master 2021-11-10 10:37:49 +01:00
Kim Kulling d4755648b4
Merge pull request #4167 from assimp/kimkulling-fix_uninitialized_attribs_issue-4158
Update anim.h
2021-11-10 09:34:52 +01:00
Kim Kulling 5fd2a5559c
Update mesh.h
- Add initialization for armature attributes.
- closes https://github.com/assimp/assimp/issues/4158
2021-11-10 09:19:29 +01:00
Kim Kulling c01d33a77a
Update anim.h
- Add missing whitespaces
2021-11-10 09:12:35 +01:00
Kim Kulling 83950845ee
Merge pull request #4166 from assimp/kimkulling-fix_version_issue-4161
Change version to 5.1.0
2021-11-10 09:08:23 +01:00
Kim Kulling 8a613a8655
Fix unittest 2021-11-09 23:27:58 +01:00
Kim Kulling e206d699da
Change version to 5.1.0
- Change version for Version 5.1.0-RC1 to 5.1.0
- closes https://github.com/assimp/assimp/issues/4161
2021-11-09 23:26:20 +01:00
iraj mohtasham 7ddd9b2484
Added UE4 plugin 2021-11-10 00:04:12 +03:30
Kim Kulling 50ba15191b
Merge pull request #4164 from Skylion007/update-performance-fixes
Remove optimization fence preventing automatic move
2021-11-09 20:09:31 +01:00
Aaron Gokaslan b8a10e62f9 Remove optimization fence 2021-11-09 13:08:13 -05:00
RichardTea 86a25b62e4 Better aiMesh ABI compatibility with 5.0.1, make smaller
Move new mTextureCoordsNames member to end of struct
Convert to pointer-to-array, saving ~8KB per aiMesh in almost all cases
Add C++ accessor functions for simpler usage
2021-11-09 13:03:06 +00:00
Kim Kulling 30143e9626
Merge branch 'master' into MalcolmTyrrell/jsonSchemaSupport 2021-11-09 10:53:58 +01:00
RichardTea aaae3e3a10 size_t is 32bit on some platforms
Also assert if size_t is smaller than uint32_t (probably not necessary)
Note: 32bit builds will crash OOM if a really large model is loaded, as cannot allocate that much in total, let alone contiguously.
2021-11-08 15:05:20 +00:00
RichardTea 9433fc526a Apply clangformat 2021-11-08 14:42:21 +00:00
RichardTea 69cafe64b4 Cap glTFv1 & 2 json size to ~4GB
Ensures size_t cannot overflow
Limits the maximum contiguous memory allocation to something plausible.
2021-11-08 14:41:13 +00:00
RichardTea ee19ce6021 3DS Export: Add support for aiShadingMode_PBR_BRDF
Export as Phong.
If no Diffuse texture, export the PBR base color instead,
2021-11-08 11:06:15 +00:00
Jeremie Dumas cedf1819c3 Do not build ziplib when 3MF exporter is disabled. 2021-11-04 01:14:24 -07:00
Kim Kulling 2b4b3e820b
Merge pull request #4154 from assimp/kimkulling-fuzzer-issue-4153
Update D3MFOpcPackage.cpp
2021-11-02 10:51:58 +01:00
Kim Kulling 5a3401b69f
Update D3MFOpcPackage.cpp
- Log an error in case of a nullptr-exception in reading out the 3MF-Archive
- closes https://github.com/assimp/assimp/issues/4153
2021-11-02 10:38:38 +01:00
kovacsv 3b2a9d1543 Add assimpjs link. 2021-11-01 08:09:16 +01:00
Alex Rebert 145f972d76
Fix out-of-bounds read in RemoveLineComments
Follow up to 6f07e89fdf, which was not sufficient to fix the bug.

Fix https://bugs.chromium.org/p/oss-fuzz/issues/detail?id=24553
2021-10-30 13:43:41 -04:00
Kim Kulling 3664fe20c0
Merge pull request #4146 from alpire/master
Fix fuzzer crashes
2021-10-29 20:20:04 +02:00
Kim Kulling 322de54323
Merge branch 'master' into master 2021-10-29 19:35:27 +02:00
Kim Kulling 7f4839a26c
Merge pull request #4145 from Daniel-Genkin/master
Fixed building of Android port
2021-10-29 19:21:27 +02:00
Alex Rebert e900617796
Fix out-of-bounds read in FileSystemFilter::Cleanup
Fix https://bugs.chromium.org/p/oss-fuzz/issues/detail?id=33238
2021-10-29 09:17:40 -04:00
Daniel-Genkin f28500dd0f Fixed building of Android port 2021-10-29 09:03:55 -04:00
Alex Rebert 6f07e89fdf
Fix out-of-bounds read in RemoveLineComments
Fix https://bugs.chromium.org/p/oss-fuzz/issues/detail?id=24553
2021-10-28 23:50:16 -04:00
Alex Rebert 1909b3e8d2
Fix overflow in IOStreamBuffer
`getNextLine` & `getNextDataLine` now double the buffer size each time
it is needed to avoid writing out of bounds.

Fix https://bugs.chromium.org/p/oss-fuzz/issues/detail?id=24465
2021-10-28 23:33:07 -04:00
Alex Rebert 6a3ac623b9
Fix out-of-bounds reads in OpenDDLParser
Fix https://bugs.chromium.org/p/oss-fuzz/issues/detail?id=31795
Fix https://bugs.chromium.org/p/oss-fuzz/issues/detail?id=24463
Fix https://bugs.chromium.org/p/oss-fuzz/issues/detail?id=36594
2021-10-28 23:13:29 -04:00
Alex Rebert 107371657b
Fix out-of-bounds read in ReadFirstSkin
Fix https://bugs.chromium.org/p/oss-fuzz/issues/detail?id=25401
2021-10-28 23:12:54 -04:00
Alex Rebert 1fe9d405f5
Fix out-of-bounds read in MDLImporter
Fix https://bugs.chromium.org/p/oss-fuzz/issues/detail?id=24502
2021-10-28 22:38:40 -04:00
Alex Rebert 932dfe0562
Fix overflowing allocations in MDLMaterialLoader
Some allocations might underallocate due to integer overflows. This
commit ensures that we are throwing an exception if the allocation size
does not fit in an unsigned int.

Fix https://bugs.chromium.org/p/oss-fuzz/issues/detail?id=25341
2021-10-28 22:27:19 -04:00
Alex Rebert 30f17aa206
Fix heap out-of-bounds write in _m3d_safestr
While there is a 256 character limit when computing the length of the
newly allocated strength, that limit was missing when copying the
string. This commit adds a new length check in the copy loop, preventing
it from writhing out of bounds.

Fix https://bugs.chromium.org/p/oss-fuzz/issues/detail?id=34416
2021-10-28 21:32:38 -04:00
Kim Kulling d273a784d0
Merge pull request #4142 from Daniel-Genkin/master
Added another constructor to avoid requiring a full ANativeActivity
2021-10-28 22:16:07 +02:00
Kim Kulling 5333e41607
Update AndroidJNIIOSystem.h 2021-10-28 17:52:01 +02:00
Kim Kulling e5cd5733e1
Update AndroidJNIIOSystem.cpp 2021-10-28 17:50:25 +02:00
Daniel-Genkin 6e5600a9a5 Added another constructor to avoid requiring a full ANativeActivity 2021-10-28 10:26:14 -04:00
Kim Kulling 8c0b869998
Merge branch 'master' into MalcolmTyrrell/jsonSchemaSupport 2021-10-28 13:38:41 +02:00
Kim Kulling 817fbed8c2
Merge pull request #4130 from MalcolmTyrrell/MalcolmTyrrell/spatialSortImprovements
SpatialSort improvements
2021-10-27 17:46:25 +02:00
Kim Kulling 5af71feef2
Merge branch 'master' into MalcolmTyrrell/spatialSortImprovements 2021-10-27 17:20:47 +02:00
Kim Kulling 0e38cec58c
Merge pull request #4140 from assimp/kimkulling-patch-cleanup
Remove dead code.
2021-10-27 00:03:13 +02:00
Kim Kulling e01b488075
Remove dead code. 2021-10-26 22:06:10 +02:00
Malcolm Tyrrell 2239442c64
Merge branch 'master' into MalcolmTyrrell/spatialSortImprovements 2021-10-21 08:55:11 +01:00
Malcolm Tyrrell db0127859a CalculateDistance method 2021-10-21 08:39:44 +01:00
Kim Kulling 791cb195be
Merge branch 'master' into x3d_pugi_migration_artenuvielle 2021-10-20 21:14:43 +02:00
Kim Kulling f81d7c0b3e
Merge pull request #4112 from diharaw/master
[GLTF2] Add read and write support for KHR_materials_volume and KHR_materials_ior extensions.
2021-10-20 21:14:11 +02:00
Kim Kulling f3baab1153
Merge branch 'master' into master 2021-10-20 20:51:43 +02:00
Malcolm Tyrrell 4ba99c1bb0 Comments 2021-10-20 16:15:00 +01:00
Malcolm Tyrrell c644f9d719 Subtract the centroid 2021-10-20 15:08:08 +01:00
Malcolm Tyrrell 4d10f5d133 Move distance initialization to Finalize. 2021-10-20 12:47:44 +01:00
Malcolm Tyrrell 5b13b97f27 Ensure the usage pattern of SpatialSort. 2021-10-19 14:22:28 +01:00
Kim Kulling a83db61289
Merge pull request #4110 from marcappelsmeier/master
Fix a warning about deprecated array comparison
2021-10-19 14:23:45 +02:00
Kim Kulling cff5035b5f
Merge branch 'master' into master 2021-10-19 09:31:19 +02:00
Kim Kulling e157d7550b
Merge pull request #4109 from umlaeute/debian-fixes
Spelling fixes
2021-10-19 09:30:42 +02:00
Kim Kulling 36c937cc19
Merge branch 'master' into debian-fixes 2021-10-18 09:07:47 +02:00
Kim Kulling 6689438696
Merge pull request #4124 from assimp/kimkulling-remove_deprecated_irrxml
Delete fast_atof.h
2021-10-18 00:11:44 +02:00
Kim Kulling e7b9118b96
Delete fast_atof.h 2021-10-17 21:04:18 +02:00
Kim Kulling 11cb1a170f
Merge pull request #4123 from assimp/fix_no_export_build
Fix no export build
2021-10-17 16:00:30 +02:00
Kim Kulling 0e3d058504 Add some exporter macros. 2021-10-17 15:10:25 +02:00
Kim Kulling 4caae783ae Disable dump when export is not supported. 2021-10-17 15:09:44 +02:00
Kim Kulling a82dc887fc
Merge branch 'master' into x3d_pugi_migration_artenuvielle 2021-10-14 09:27:07 +02:00
Kim Kulling f678e67974
Merge pull request #4115 from lerppana/fix-missing-include
Added missing include
2021-10-13 14:05:40 +02:00
Lassi Helynranta a01a5b4e3a Added missing include 2021-10-09 20:12:29 +03:00
IOhannes m zmölnig 1a9403e787 Fix spelling error in comment in exported Pbrt file
See https://github.com/assimp/assimp/pull/4109#issuecomment-934747675
for a discussion that this is really a comment in the exported file,
and thus the fix should be harmless.
2021-10-08 08:55:02 +02:00
IOhannes m zmölnig 3b8126d26a Fix spelling mistake 2021-10-08 08:48:01 +02:00
Malcolm Tyrrell 5a1bcc6aa5 Fix build and test 2021-10-07 10:01:33 +01:00
Malcolm Tyrrell ceddfe19d8 Add comment with link to schema repo. 2021-10-07 10:01:32 +01:00
Malcolm Tyrrell 7788c1a04e Add a unit test for json schemas. 2021-10-07 10:01:32 +01:00
Malcolm Tyrrell a283a255a5 Allow schema checking of glTF2 file. 2021-10-07 10:01:32 +01:00
diharaw 0fb66f8437 Replaced AI_MATKEY_IOR with AI_MATKEY_REFRACTI. 2021-10-07 09:39:08 +01:00
diharaw b01d008bc0 Revert "Removed KHR_materials_ior support."
This reverts commit 0738742611.
2021-10-07 09:36:53 +01:00
diharaw 0738742611 Removed KHR_materials_ior support. 2021-10-07 09:30:22 +01:00
Marc ad0d945c80
Merge pull request #1 from marcappelsmeier/fixDeprecatedArrayComparision
Fix warning for array comparison
2021-10-05 19:25:08 +02:00
Marc 656b0b25d8
Fix warning for array comparison
The code previously compared two float arrays with the != operator. This is deprecated in Visual Studio 2019 and results in a warning that leads to an error when compiling with warnings as errors. Small fix to make the build work.
2021-10-05 19:24:42 +02:00
Kim Kulling babf3b8e3d
Merge pull request #4108 from davidepi/fix-aistring-embedtextures
Fix aiString length not updated in the EmbedTextures postprocess task
2021-10-04 15:22:49 +02:00
Davide Pizzolotto ae951fbef9
Fix aiString length in aiProcess_EmbedTextures 2021-10-03 00:41:09 +02:00
Kim Kulling 3e4cca4d2f
Merge pull request #4106 from assimp/kimkulling-issues-3726
Add support for normal maps, the classic way
2021-10-01 14:58:19 +02:00
Kim Kulling ac6b8988df
Add support for normal maps, the classic way
- get compiant to tinyobjloader and other importers
- closes https://github.com/assimp/assimp/issues/3726
2021-10-01 14:24:40 +02:00
Kim Kulling 2f5a31110c
Merge pull request #3743 from Garux/Q1MDLgroup
Fix Q1 MDL group frame loading, e.g. Q1 progs/flame2.mdl
2021-10-01 14:03:08 +02:00
Kim Kulling 1f76b2e6b9
Merge branch 'master' into Q1MDLgroup 2021-10-01 13:36:55 +02:00
diharaw 46a7de7a0b Moved KHR_material_volume thickness texture under aiTextureType_TRANSMISSION. 2021-09-30 08:56:16 +01:00
diharaw addd541251 Added gltf2 KHR_materials_ior support. 2021-09-30 08:47:53 +01:00
diharaw d3276de47d Added gltf2 KHR_materials_volume write support. 2021-09-30 08:10:02 +01:00
diharaw 200bf8df7a Added gltf2 KHR_materials_volume import support. 2021-09-29 17:05:17 +01:00
Kim Kulling 96e2f1cd5b
Merge pull request #4078 from krishty/const-tokens
more const in format detection
2021-09-24 13:53:13 +02:00
Kim Kulling 6cb6a6acdd
Merge branch 'master' into const-tokens 2021-09-24 13:37:57 +02:00
Kim Kulling d286aadbdf
Merge pull request #4086 from assimp/kimkulling-obj_refactorings
Update ObjTools.h
2021-09-21 12:53:51 +02:00
Kim Kulling 95263b2e54
Update ObjTools.h 2021-09-21 11:34:58 +02:00
Kim Kulling 590307dba9
Merge pull request #4085 from assimp/kimkulling-issue_3442
Fix possible nullptr dereferencing in material parsing
2021-09-21 11:19:49 +02:00
Kim Kulling fb5b5e9d40
Fix possible nullptr dereferencing in material parsing
* Return 0.0f for empty buffer
* closes https://github.com/assimp/assimp/issues/3442
2021-09-21 11:06:18 +02:00
Kim Kulling 4fd7330808
Merge pull request #4076 from mahiuchun/static
Use Safe Constants Idioms for ObjFileParser::DEFAULT_MATERIAL.
2021-09-21 09:16:25 +02:00
Hill Ma e6543cbd85
Merge branch 'master' into static 2021-09-20 16:14:35 -07:00
Kim Kulling d814e9067a
Merge branch 'master' into x3d_pugi_migration_artenuvielle 2021-09-20 21:14:20 +02:00
Kim Kulling 95d1232922
Merge pull request #4083 from markoffline/patch-1
including <exception>
2021-09-20 21:13:41 +02:00
Hill Ma 79f3368c85
Merge branch 'master' into static 2021-09-17 09:06:16 -07:00
René Martin e92177cb99 changed use and def attribute check for x3d importer to upper case
This is how it is specified in the standard.
2021-09-17 14:24:57 +02:00
Kim Kulling d0f7200196
Update X3DImporter_Geometry3D.cpp 2021-09-16 21:01:44 +02:00
René Martin 65173df9d9 fixed x3d importer test 2021-09-16 13:45:56 +02:00
krishty 8c84afaff0
Merge branch 'master' into const-tokens 2021-09-15 23:31:00 +02:00
Artenuvielle 70dfdb8f9d
Merge branch 'master' into x3d_pugi_migration_artenuvielle 2021-09-15 14:51:38 +02:00
René Martin a8a6aa2bd8 fixed some compiling issues 2021-09-15 14:49:46 +02:00
Mark's Offline 1eb0d18371
Including <exception>
Assimp wasn't compiling on GNU/Linux
2021-09-15 05:17:16 -05:00
Kim Kulling 71a87b653c
Merge pull request #4077 from krishty/remove-useless-code
removed useless code
2021-09-15 10:57:46 +02:00
Kim Kulling 880a2f25bb
Merge branch 'master' into remove-useless-code 2021-09-14 23:33:34 +02:00
Kim Kulling 9553894c3b
Merge pull request #4072 from assimp/cleanup_public_header
Rework format + introdule missing C++11 features
2021-09-14 21:00:58 +02:00
Kim Kulling 8a975549a9 Add missing override 2021-09-14 20:49:20 +02:00
Kim Kulling 113217790b
Merge branch 'master' into cleanup_public_header 2021-09-14 20:46:22 +02:00
Kim Kulling 0fef0e1101 Move duplicate code to glFT common header. 2021-09-14 20:45:36 +02:00
Kim Kulling 8ba4d30d7c
Merge branch 'master' into x3d_pugi_migration_artenuvielle 2021-09-14 08:24:44 +02:00
Kim Kulling 002cdcdd7f
Merge pull request #4081 from ingowald/master
fixed incorrect/misleading comment at end of scene.h
2021-09-14 08:24:08 +02:00
Ingo Wald e9d03f3379 fixed wrong comment 2021-09-13 15:10:48 -06:00
Kim Kulling 18531e3677 Next iteration for c++11 features. 2021-09-13 22:38:20 +02:00
Artenuvielle c7e9c6580a
Merge branch 'master' into x3d_pugi_migration_artenuvielle 2021-09-12 11:45:00 +02:00
René Martin dfb0d66437 Merge branch 'master' into x3d_pugi_migration_artenuvielle 2021-09-12 11:44:14 +02:00
René Martin 3f6a371b64 migrated x3d importer to pugixml reader 2021-09-12 11:37:33 +02:00
Krishty 5895c0c22c more const in format detection
BaseImporter::SearchFileHeaderForToken() expected a pointer to a non-const token list. This was probably an oversight, as nobody would realistically expect the function to change the list. Furthermore, it prevented token lists from being compiled to read-only memory, in some cases even causing the compiler to generate thread-safe initialization.

The list is now const and all callers declare their token lists static const, thus compiling them to read-only memory.
2021-09-11 23:23:05 +02:00
Krishty 4cf4e7454f removed useless code
In destructors, zeroing attributes or clearing containers is utterly useless.
2021-09-11 21:51:20 +02:00
Hill Ma 93edbe883f Use Safe Constants Idioms for ObjFileParser::DEFAULT_MATERIAL.
Reference: "A static Class Member" in https://abseil.io/tips/140
2021-09-10 11:56:37 -07:00
Kim Kulling 0dabce2754
Merge branch 'master' into cleanup_public_header 2021-09-09 20:18:01 +02:00
Kim Kulling d34cd103f4
Merge pull request #4054 from kirillsurkov/master
Fix MinGW build
2021-09-09 09:39:24 +02:00
Kim Kulling bc0a2762df
Merge branch 'master' into master 2021-09-09 09:16:50 +02:00
Kim Kulling f47479aba4 Rework format + introdule missing C++11 features 2021-09-08 23:19:10 +02:00
Kim Kulling be0ab89afe
Merge pull request #4070 from assimp/kimkulling-patch-1
Add patreon
2021-09-08 08:59:27 +02:00
Kim Kulling dfd95633a4
Add patreon 2021-09-08 08:31:33 +02:00
Kim Kulling 9834dc7fc0
Merge pull request #4012 from Spectrum76/master
Update .gitignore
2021-09-07 15:59:20 +02:00
Kim Kulling 2acfdbe0c5
Merge branch 'master' into master 2021-09-07 15:43:59 +02:00
René Martin 3001d88172 Merge branch 'master' into x3d_pugi_migration 2021-09-07 15:04:08 +02:00
Kim Kulling e70b05b41a
Merge pull request #4057 from Madrich/master
Double Precision Issue
2021-09-07 12:49:04 +02:00
Kim Kulling 768024d5a0
Merge branch 'master' into master 2021-09-07 11:39:34 +02:00
Kim Kulling 30c6606718
Merge pull request #4056 from Dig-Doug/xgl-fix
XGLImporter: Compiler warning fix
2021-09-07 10:12:40 +02:00
Kim Kulling 74e8a6a366
Merge branch 'master' into xgl-fix 2021-09-07 09:03:40 +02:00
Kim Kulling 209167c41f
Merge pull request #4055 from ms-maxvollmer/ms-maxvollmer/code_improvements
Fixes issues our internal compliance and code quality tool found
2021-09-02 11:33:10 +02:00
Max Vollmer (Microsoft Havok) bf8e36ae28 Fixed typo 2021-09-02 10:07:28 +01:00
Max Vollmer (Microsoft Havok) 72ea80b41f Revert last change (gltf2::Ref type is not a pointer and has a bool() operator) 2021-09-02 10:00:56 +01:00
Kim Kulling d710d0700f
Make nullptr test more explicit. 2021-09-02 10:10:42 +02:00
Max Vollmer (Microsoft Havok) 4c86772091 Added another nullptr safety check 2021-09-02 08:27:03 +01:00
Madrich 9b535d1c15 Fix Double Precision errors/warnings 2021-08-31 12:59:31 +02:00
Madrich 43a3c4a05e
Merge branch 'assimp:master' into master 2021-08-31 11:55:29 +02:00
Kim Kulling 155db25883
Merge branch 'master' into ms-maxvollmer/code_improvements 2021-08-31 08:55:47 +02:00
Kim Kulling f888910a2a
Merge pull request #4053 from kovacsv/compressed_json
Add export property for assimp json exporter to write compressed json
2021-08-31 08:51:23 +02:00
Doug Roeper 96f0787f51
Fix the -Werror=unused-but-set-parameter warning by removing the skipFirst variable. 2021-08-30 18:15:37 -04:00
Max Vollmer (Microsoft Havok) 51f294c587 Fixes issues our internal compliance and code quality tool found:
* Adds nullptr checks and asserts to protect certain code paths
* Fixes wrong integer type in a printf call
* Adds const to const values
* Prevents integer overflow with explicit casts
2021-08-30 14:59:17 +01:00
Viktor Kovacs 82d8c4e849
Merge branch 'master' into compressed_json 2021-08-30 10:11:03 +02:00
Kim Kulling 5e86fead8e
Merge pull request #4029 from assimp/issue_3398
Add support for M3F Embedded textures
2021-08-30 08:46:33 +02:00
Kim Kulling 38c611a02c
Update ColladaLoader.cpp 2021-08-30 08:33:35 +02:00
Kim Kulling e2c2a60c45 Remove not used attribute 2021-08-29 18:41:07 +02:00
Kim Kulling c9d35b6edc Remove C++14 feature. 2021-08-29 18:35:44 +02:00
Kim Kulling ceafa95610 Remove unused header 2021-08-29 10:36:02 +02:00
kirillsurkov 5ca2cbb7ae Fix MinGW build 2021-08-28 20:04:37 +03:00
Kim Kulling c9b76f5255 Decrease xml-serializer complexity 2021-08-28 14:20:12 +02:00
Kim Kulling df739f00dd
Merge branch 'master' into issue_3398 2021-08-28 13:56:50 +02:00
Kim Kulling 69051bbc2c Add missing docu 2021-08-28 13:46:41 +02:00
Kim Kulling a7bc858698
Fix review finding. 2021-08-28 13:36:57 +02:00
Kim Kulling 3e090b21f5 Fix setup of embedded texture loading 2021-08-28 13:33:25 +02:00
Viktor Kovacs b9b62d106c
Merge branch 'master' into compressed_json 2021-08-27 18:18:28 +02:00
kovacsv b39f38b73c Add export property for assimp json exporter to write compressed json (without whitespaces). 2021-08-27 18:17:27 +02:00
Kim Kulling 6841397798
Merge pull request #4051 from assimp/kimkulling-kill_irrXml-dependency
Delete FindIrrXML.cmake
2021-08-27 15:07:00 +02:00
Kim Kulling 999192489c
Delete FindIrrXML.cmake
- Deprecated
2021-08-27 14:52:48 +02:00
Kim Kulling afd0f65ceb
Merge pull request #4050 from assimp/kimkulling-fuzzer_issue_24553
Fix possible overrun
2021-08-27 14:19:32 +02:00
Kim Kulling a45878c41a
Fix possible overrun
- closes https://github.com/assimp/assimp/issues/3425
2021-08-27 14:04:00 +02:00
Kim Kulling e5bf7f7e07
Merge pull request #4049 from assimp/kimkulling-patch-fuzzer_Issue_25058
Handle  empty keys
2021-08-27 11:01:49 +02:00
Kim Kulling eabfc05bbb
Handle empty keys 2021-08-27 10:41:25 +02:00
Kim Kulling 6439305379
Remove dead code 2021-08-24 20:53:55 +02:00
Kim Kulling 61ba320a04
Merge branch 'master' into master 2021-08-24 20:53:04 +02:00
Kim Kulling e7085199f2
Merge pull request #4045 from assimp/issue_4042
Enable Viewer only for VS-Builds
2021-08-24 19:37:18 +02:00
Kim Kulling fe31ac295c
Merge branch 'master' into issue_4042 2021-08-24 19:24:16 +02:00
Kim Kulling a71baaeedf Enable Viewer only for VS-Builds 2021-08-24 19:22:15 +02:00
Kim Kulling 7cc076b27a
Merge pull request #4044 from kovacsv/m3d_crash
Fix M3D import crash and memory leak.
2021-08-24 15:06:50 +02:00
kovacsv cb262dab5e Revert test back to the exact same version. 2021-08-24 11:02:09 +02:00
kovacsv 37ba067839 Revert back test, because the new one revealed an undefined behavior error. 2021-08-24 09:09:35 +02:00
kovacsv 0590a39159 Fix M3D import crash and memory leak.
The same default material pointer was assigned to all the materials in the scene, so poor destructor tried to free the same pointer multiple times.
2021-08-24 07:26:20 +02:00
Kim Kulling d2b7e9c38c
Merge pull request #4040 from assimp/build_fixes
Build fixes
2021-08-20 21:23:42 +02:00
Kim Kulling f24101546b
Fix typo in path 2021-08-20 21:02:42 +02:00
Kim Kulling 1452b33cbd
Merge branch 'master' into build_fixes 2021-08-20 20:58:35 +02:00
kimmi 18f58947a4 CMake: move hunter cmake-scripts into cmake-modules 2021-08-20 20:42:02 +02:00
kimmi 38dcd3583c Fix compiler warnings: comparison signed unsigned. 2021-08-20 20:20:47 +02:00
kimmi c396bc78b1 closes https://github.com/assimp/assimp/issues/3951: Use using directive to define type. 2021-08-20 19:40:04 +02:00
Kim Kulling 7fa2bfbb70
Merge pull request #4036 from yzthr/master
fix sample build error
2021-08-20 19:30:37 +02:00
Kim Kulling 21603c9f83
Merge branch 'master' into master 2021-08-20 19:18:54 +02:00
Kim Kulling aa90f51849
Merge pull request #4037 from kovacsv/master
Mingw build fix
2021-08-19 19:48:12 +02:00
kovacsv 468aa50aed mingw build fix 2021-08-19 13:50:26 +02:00
陶浩然 d926c5ed61 fix sample build error 2021-08-19 18:49:43 +08:00
Kim Kulling ceced70df0
Merge pull request #4026 from Mykhailo418/master
Fix: incorrect reading of PBR properties in FBX
2021-08-18 10:47:20 +02:00
Kim Kulling f3903e34a4
Merge branch 'master' into master 2021-08-18 07:32:16 +02:00
Kim Kulling 4766d75943
Merge pull request #4027 from uerobert/clang13
Add missing diagnostic pragmas and remove unused code
2021-08-17 17:39:02 +02:00
Kim Kulling a486a698e8
Merge branch 'master' into clang13 2021-08-16 21:35:59 +02:00
Kim Kulling 4ce638838d
Merge pull request #4032 from ms-maxvollmer/ms-maxvollmer/crash_fixes_08_2021
Crash fixes
2021-08-16 21:35:12 +02:00
Kim Kulling a850f312ac
Merge branch 'master' into ms-maxvollmer/crash_fixes_08_2021 2021-08-16 21:00:07 +02:00
Kim Kulling c28aab2ed6
Merge pull request #4017 from mahiuchun/bound
Obj: make a predicate more robust.
2021-08-16 20:59:37 +02:00
Kim Kulling 27231c3f52
Merge branch 'master' into bound 2021-08-16 20:48:17 +02:00
Kim Kulling 4caba7de8a
Merge pull request #4010 from krishty/fix-logger-comments
fix comments
2021-08-16 20:47:31 +02:00
Max Vollmer (Microsoft Havok) c1e830cf3b The GLTF2 specs aren't very specific about the restrictions of the number of keyframes in sampler input and output. It seems logical that they should be the same, but there is an official sample model from Khronos where output has more keyframes. I thus assume that the GLTF2 standard allows more keyframes in output, but not in input. Fixed the check accordingly. 2021-08-13 17:46:10 +01:00
Max Vollmer (Microsoft Havok) de2f5cf021 Crash fixes 2021-08-13 16:26:42 +01:00
Spectrum76 4d8c518ed0
Merge branch 'assimp:master' into master 2021-08-13 20:43:35 +05:30
Kim Kulling 4b1ff645e3 closes https://github.com/assimp/assimp/issues/3398: Add support for embedded textures 2021-08-12 21:13:07 +02:00
Mykhailo Smoliakov 26defda671
Merge branch 'master' into master 2021-08-12 08:20:59 +03:00
Robert Ubiñas b95df54225 Remove unused code 2021-08-11 19:33:10 -04:00
Robert Ubiñas 58cae73401 Disable diagnostic for LogStream comparator 2021-08-11 19:32:26 -04:00
Robert Ubiñas 69c152d7c1 Add missing diagnostic push 2021-08-11 18:57:21 -04:00
krishty aac77e58b6
Merge branch 'master' into fix-logger-comments 2021-08-11 12:16:58 +02:00
Mykhailo Smoliakov c3fcbfd2c1 Fix issue of incorrect reading of PBR properties such as base and emissive color in FBX 2021-08-11 08:54:34 +03:00
Kim Kulling fcc7ad52a1
Merge pull request #4009 from krishty/fix-indent
style fix: indentation
2021-08-11 00:35:08 +02:00
Kim Kulling a16cd95b16
Merge branch 'master' into fix-indent 2021-08-10 21:39:13 +02:00
Kim Kulling 843e16868c
Merge pull request #4008 from krishty/no-empty-string-literals
style fix – initializing and assigning empty std::string properly
2021-08-10 21:38:46 +02:00
Kim Kulling a55518f6fc
Merge branch 'master' into no-empty-string-literals 2021-08-10 20:41:40 +02:00
Kim Kulling 58f91000c8
Merge pull request #4007 from krishty/trim-trailing-whitespace
removed trailing spaces and tabs from source and text
2021-08-09 23:26:38 +02:00
Kim Kulling 89eadb934f
Merge branch 'master' into trim-trailing-whitespace 2021-08-09 21:24:22 +02:00
Kim Kulling 89d17d1ea8
Merge pull request #4001 from xiaohunqupo/master
StepExporter support polygon mesh
2021-08-09 21:23:51 +02:00
Kim Kulling 0aa36ee550
Merge branch 'master' into master 2021-08-07 12:06:23 +02:00
krishty 73b25d2578
Merge branch 'master' into fix-logger-comments 2021-08-06 09:40:35 +02:00
krishty f8fe3d1341
Merge branch 'master' into fix-indent 2021-08-06 09:40:34 +02:00
krishty 00b22d1397
Merge branch 'master' into no-empty-string-literals 2021-08-06 09:40:31 +02:00
krishty 6cb54d1c95
Merge branch 'master' into trim-trailing-whitespace 2021-08-06 09:40:03 +02:00
Kim Kulling 76e3092b2a
Merge pull request #4016 from mahiuchun/strlen
Use strlen() rather than fixed length in fast_atof.h
2021-08-04 08:45:18 +02:00
Kim Kulling d09d7a9e13
Merge branch 'master' into strlen 2021-08-03 21:40:35 +02:00
Kim Kulling 87d53ce0cb
Merge pull request #4006 from krishty/remove-dead-code
removed useless code
2021-08-03 21:36:46 +02:00
bearbit 408b5053a4 update LWO importer(available lwo3) 2021-08-03 20:18:14 +03:00
Hill Ma 538cb3125c Use strlen() rather than fixed length in fast_atof.h
This avoids reading past the length of the input string.
2021-08-02 13:21:07 -07:00
Hill Ma 8d6d6b48c3 Obj: make a predicate more robust.
Since we might encounter invalid input it is a good idea to check the actual
size of the array.
2021-08-02 12:04:15 -07:00
Spectrum76 bd2067fa8a
Merge branch 'master' into master 2021-08-02 12:07:17 +05:30
krishty 1ee2be8c5c
Merge branch 'master' into trim-trailing-whitespace 2021-07-31 18:01:48 +02:00
Kim Kulling 00a2cd20f9
Merge branch 'master' into remove-dead-code 2021-07-31 17:00:58 +02:00
Kim Kulling 8f02c29023
Merge pull request #4011 from krishty/more-range-based-for
more range-based for
2021-07-31 16:59:49 +02:00
Spectrum76 6ce5248931
Update .gitignore 2021-07-29 21:38:23 +05:30
Krishty bb53961fa9 more range-based for
f6b4370f6a and 7c822f23bd introduced raw loops on data types with heavy nesting; range-based for suits better here
2021-07-29 14:57:25 +02:00
Krishty a1eaaaa0e3 fix comments
fixes some copy-paste errors in logger comments introduced with 89584c167a
2021-07-29 14:45:39 +02:00
Krishty 42a7611f85 style fix: indentation 2021-07-29 14:39:22 +02:00
Krishty 4991f728c8 style fix – initializing and assigning empty std::string properly
for details, see #3764
2021-07-29 14:23:52 +02:00
Krishty 758116b083 removed trailing spaces and tabs from source and text
This commit ignores the “contrib” folder in order to prevent merge conflicts in dependencies, should these be updated via git.
2021-07-29 13:28:51 +02:00
Krishty 738c31c3ea removed useless code
Found while reviewing #3880
2021-07-28 16:48:53 +02:00
xiaohunqupo d065513e27
Merge branch 'master' into master 2021-07-28 17:02:28 +08:00
Kim Kulling fc22d6cdae
Merge pull request #4002 from assimp/kimkulling-issue_3760
Fix Issue3760
2021-07-28 10:58:52 +02:00
Kim Kulling f87550fdbc
Fix Issue3760
- Convert left-handed coordinate system to right-handed coordinate system
- Rescale model by 0.01
- closes https://github.com/assimp/assimp/issues/3760
2021-07-28 10:39:39 +02:00
xiaohunqupo 8ee2c721d9
StepExporter support polygon mesh
StepExporter support polygon mesh
2021-07-28 16:32:27 +08:00
xiaohunqupo 9923cd0e06
Merge pull request #3 from assimp/master
Merge Master Branch To My Branch
2021-07-28 16:17:51 +08:00
Kim Kulling 8748f8591c
Merge pull request #4000 from assimp/kimkulling-issue_3790
Fix euler angles
2021-07-26 15:59:32 +02:00
Kim Kulling 92af44f092
Fix euler angles 2021-07-26 15:47:19 +02:00
Kim Kulling 209c66dff1
Merge pull request #3999 from assimp/kimkulling-issue_3974
Fix fuzzer issue in m3d-importer
2021-07-26 15:17:46 +02:00
Kim Kulling aeae2cf242
Update M3DWrapper.h 2021-07-26 14:44:26 +02:00
Kim Kulling e8e720d584
Update M3DWrapper.h 2021-07-26 13:41:54 +02:00
Kim Kulling 291c0a4faa
Fix build failure
- Fix the failure
- Put inlined stuff out of declaration
- Add some docu
2021-07-26 13:13:21 +02:00
Kim Kulling df2e7208fb
Fix fuzzer issue in m3d-importer
- closes https://github.com/assimp/assimp/issues/3974
- Check for nullptr before dereferencing name in m3d-data-instance.
2021-07-26 11:56:26 +02:00
Kim Kulling c3a097abc9
Merge pull request #3998 from assimp/issue_3975
closes https://github.com/assimp/assimp/issues/3975:
2021-07-26 11:51:25 +02:00
Kim Kulling 16c3f82222 closes https://github.com/assimp/assimp/issues/3975: Use latest version of OpenDDL-Parser 2021-07-26 11:24:18 +02:00
Kim Kulling 26538a4f4a
Merge pull request #3997 from assimp/issue_3957
closes https://github.com/assimp/assimp/issues/3957: checkj for empty…
2021-07-26 11:14:46 +02:00
Kim Kulling b7f88f3063 closes https://github.com/assimp/assimp/issues/3957: checkj for empty positions. 2021-07-26 10:51:16 +02:00
Kim Kulling a96e7e6e2b
Merge pull request #3992 from AdrianAtGoogle/gltf_fixes
Fix issues encountered during integration attempt
2021-07-23 21:59:26 +02:00
Kim Kulling 4e28a3072f
Merge branch 'master' into gltf_fixes 2021-07-23 20:37:25 +02:00
Kim Kulling 1757513890
Merge pull request #3995 from assimp/add_missing_includes_to_doc
Add hpp to dxygen filter
2021-07-22 21:23:37 +02:00
Kim Kulling d554b4950d Add hpp to dxygen filter 2021-07-22 20:48:25 +02:00
Kim Kulling 0372c8c65d
Merge pull request #3991 from mahiuchun/double
FBX: fix double precision build.
2021-07-22 10:49:37 +02:00
Kim Kulling e07af07311
Merge branch 'master' into double 2021-07-22 10:07:40 +02:00
Kim Kulling f3cb23c0c7
Merge pull request #3994 from assimp/doxygen_api_generation
Disable html and enable xml
2021-07-22 10:07:23 +02:00
Kim Kulling 33da6ab376
Merge branch 'master' into doxygen_api_generation 2021-07-21 21:00:46 +02:00
Kim Kulling aa8628abef Disable html and enable xml 2021-07-21 20:38:58 +02:00
Kim Kulling e9d7ec4ba5
Merge pull request #3990 from RichardTea/gltf_export_id_issue_3978
Ensure glTFv2 scene name is unique
2021-07-21 17:31:58 +02:00
Kim Kulling d0885af634
Merge branch 'master' into gltf_export_id_issue_3978 2021-07-21 13:47:47 +02:00
Kim Kulling 9036d3bd12
Merge pull request #3993 from assimp/doxygen_api_generation
Fix version, remove deprecated doc files, fix some path errors
2021-07-21 13:47:34 +02:00
Kim Kulling 9f2540a2a8
Merge branch 'master' into doxygen_api_generation 2021-07-21 09:51:13 +02:00
Kim Kulling e13ce4b624 Fix version, remove deprecated doc files, fix some path errors 2021-07-21 09:46:23 +02:00
Adrian Perez a10f918071 Merge branch 'gltf_fixes' of https://github.com/AdrianAtGoogle/assimp into gltf_fixes 2021-07-16 14:30:14 -07:00
Adrian Perez 30d342534a Fix issues encountered during integration atempt 2021-07-16 14:29:28 -07:00
Adrian Perez 5285736ba0 Fix issues encountered during integration atempt 2021-07-16 14:21:32 -07:00
Kim Kulling 22099605e3
Merge pull request #3988 from RichardTea/collada_makehuman_issue_3984
Collada: Read <matrix> tags properly, assume <input set="0"/> when not present
2021-07-16 12:00:28 +02:00
Kim Kulling 5171aa52d1
Remove dead code 2021-07-16 11:47:38 +02:00
Kim Kulling 5693bc71f3
Merge branch 'master' into collada_makehuman_issue_3984 2021-07-16 11:44:32 +02:00
Hill Ma aa883eda19 FBX: fix double precision build. 2021-07-15 11:54:55 -07:00
Kim Kulling cb5686653f
Merge pull request #3989 from rbsheth/rbsheth_fix_hunter
Find stb for Assimp
2021-07-15 19:51:46 +02:00
Kim Kulling e791f09aeb
Merge branch 'master' into rbsheth_fix_hunter 2021-07-15 19:05:20 +02:00
Kim Kulling f3addb3ba4
Merge pull request #3986 from mlopezantequera/patch-1
PyAssimp fix: don't always search anaconda paths
2021-07-14 21:09:31 +02:00
RichardTea 632b2db97c Ensure glTFv2 scene name is unique
Use the provided scene name if extant
Fixes issue #3978
2021-07-14 13:39:41 +01:00
Rahul Sheth 6e863b2435 Find stb for Assimp 2021-07-14 08:27:04 -04:00
RichardTea 0c6c238956
Merge branch 'master' into collada_makehuman_issue_3984 2021-07-14 11:33:43 +01:00
Kim Kulling 23e416de3b
Merge branch 'master' into patch-1 2021-07-14 11:34:58 +02:00
Kim Kulling a08c1c1d67
Merge pull request #3985 from rbsheth/rbsheth_fix_hunter
Fix stb_image dependency
2021-07-14 11:32:03 +02:00
Kim Kulling 9c207cd865
Merge branch 'master' into rbsheth_fix_hunter 2021-07-13 20:45:22 +02:00
RichardTea bff1d012bd Read matrix and input (shared) correctly
<matrix> may have leading and trailing whitespace
<input/> set attribute is unsigned. It is also optional, default 0
2021-07-13 16:50:09 +01:00
RichardTea 206b2436d4 Apply clangformat 2021-07-13 16:47:31 +01:00
Kim Kulling d37ef516f8
Merge pull request #3981 from arkeon7/PLY_RN_LINE
Manage /R/N lines ends correctly on binary files, tested with solidworks PLY export
2021-07-12 12:47:05 +02:00
Kim Kulling 15bbab2d9e
Merge branch 'master' into PLY_RN_LINE 2021-07-12 10:53:00 +02:00
Kim Kulling bd28c285fc
Merge pull request #3980 from irajsb/master
Update Gitignore exclude x64 folder generated by build
2021-07-11 19:05:52 +02:00
Kim Kulling d678fb7406
Merge branch 'master' into master 2021-07-11 18:52:46 +02:00
Manuel López Antequera e49ee6cfb2
PyAssimp fix: don't always search anaconda paths
The helper was erroneously adding the Anaconda paths to the search.
2021-07-08 09:51:05 +02:00
Rahul Sheth 1b37b74f9e Hunter fixes for stb_image 2021-07-07 17:01:19 -04:00
Rahul Sheth 0a5e49252d Merge remote-tracking branch 'origin/master' into HEAD 2021-07-07 16:35:29 -04:00
Kim Kulling 1d33131e90
Merge pull request #3969 from Promit/promit/gltf-extras
Added support for custom properties ("extras") in glTF2 importer
2021-07-04 19:28:19 +02:00
Promit Roy 90c115cb3f
Merge branch 'master' into promit/gltf-extras 2021-07-02 00:38:00 -04:00
Kim Kulling 939dacdbee
Merge pull request #3967 from jerstlouis/master
glTF2: Improved support for AI_MATKEY_OPACITY
2021-07-01 20:01:31 +02:00
Kim Kulling 240eb36980
Merge branch 'master' into master 2021-07-01 19:23:52 +02:00
arkeon 3cbd31900c Manage /R/N lines ends correctly on binary files, tested with solidworks PLY export 2021-07-01 17:23:21 +02:00
DESKTOP-HEFITKI\Iraj 391080d2e6 Update Gitignore exclude x64 folder generate by build 2021-07-01 15:01:39 +04:30
Kim Kulling 1ea3cb545d
Merge pull request #3973 from assimp/issue_3971_kkulling
closes https://github.com/assimp/assimp/issues/3971: fix wrong depend…
2021-06-30 00:23:35 +02:00
Kim Kulling 0a48a35382 closes https://github.com/assimp/assimp/issues/3971: fix wrong dependency 2021-06-29 21:22:22 +02:00
Kim Kulling 3ea4baad81
Merge pull request #3965 from Pankaj003/master
FBX module unable to read uv rotation angle and write all the uv transformation data.
2021-06-29 21:05:15 +02:00
Kim Kulling 01930101c7
Merge branch 'master' into master 2021-06-29 20:45:09 +02:00
Kim Kulling 67c45e2d87
Merge pull request #3964 from Skylion007/clang-tidy-perf-fixes
Performance: Apply various performance fixes from clang-tidy
2021-06-29 20:41:52 +02:00
Kim Kulling 59ab791a47
Merge branch 'master' into clang-tidy-perf-fixes 2021-06-29 20:24:23 +02:00
Promit Roy 7c822f23bd Added support for custom properties ("extras") in glTF2 2021-06-27 00:53:40 -04:00
Jerome St-Louis e3d54860ec
Merge branch 'master' into master 2021-06-25 18:50:33 -04:00
Pankaj003 72075f984e
Merge branch 'master' into master 2021-06-25 19:48:12 +05:30
Kim Kulling d855ec2472
Merge pull request #3959 from mahiuchun/zero
glTF2: zero out extra space created by padding.
2021-06-25 00:03:37 +02:00
Jerome St-Louis 0e41efb050 glTF2: Improved support for AI_MATKEY_OPACITY
- Exporter: Writing opacity to pbrMetallicRoughness.baseColorFactor[3] even when alphaMode is set
- Importer: Setting AI_MATKEY_OPACITY from pbrMetallicRoughness.baseColorFactor[3]
2021-06-24 13:27:29 -04:00
Aaron Gokaslan f435ce8c2c
Merge branch 'master' into clang-tidy-perf-fixes 2021-06-24 11:54:56 -04:00
Kim Kulling b38b65ff49
Add const 2021-06-24 17:03:00 +02:00
Kim Kulling 012ce30577
Merge branch 'master' into zero 2021-06-24 17:00:43 +02:00
Kim Kulling bd9b28bc45
Merge pull request #3955 from Evangel63/master
Add scene metadata for glTF2 files as allowed by the glTF2 specification
2021-06-24 17:00:16 +02:00
Kim Kulling d18d838812
Fix formatting 2021-06-24 16:18:11 +02:00
Kim Kulling b5350899b2
Merge branch 'master' into master 2021-06-24 16:15:51 +02:00
Kim Kulling 28ca0d13d3
Merge pull request #3966 from jerstlouis/master
include/material.h: Fixed broken C support
2021-06-24 16:15:21 +02:00
Kim Kulling 00bf757688
Update material.h 2021-06-24 13:28:49 +02:00
Jerome St-Louis 170063643c include/material.h: Fixed broken C support
- The aiGetMaterialFloat() and aiGetMaterialInteger() C preprocessor definitions were broken because:
   - They had a space before the opening parenthesis
   - Using material key definitions expanding 1 to argument into 3 breaks the invocation of macros expecting 5 parameters
2021-06-23 18:15:01 -04:00
Aaron Gokaslan 8e3a159141
Merge branch 'master' into clang-tidy-perf-fixes 2021-06-23 10:10:28 -04:00
Pankaj Tyagi 6170c49155 Fixed:
1. FBX import is unable to read the texture UV rotation angle.
2. FBX export is unable to write the texture UV rotation angle.
2021-06-23 16:49:09 +05:30
Evangel63 e736538df3
Merge branch 'master' into master 2021-06-23 13:45:23 +10:00
Kim Kulling bf82caba18
Merge pull request #3954 from ihsinme/patch-1
the expression does not throw an exception.
2021-06-23 01:20:00 +02:00
Kim Kulling c447fc6892
Merge branch 'master' into patch-1 2021-06-23 01:08:40 +02:00
Kim Kulling 1faedc136a
Merge pull request #3952 from RichardTea/clean_gltf_pbr_brdf
First pass at simplifying PBR
2021-06-23 01:07:53 +02:00
Aaron Gokaslan 24d4be958d
Merge branch 'master' into clang-tidy-perf-fixes 2021-06-22 14:42:51 -04:00
Aaron Gokaslan 544148a626 Fix code insertion duplication 2021-06-22 14:28:46 -04:00
Kim Kulling 760953c834
Merge branch 'master' into clean_gltf_pbr_brdf 2021-06-22 20:10:03 +02:00
Kim Kulling 36815b014b
Update FBXExporter.h 2021-06-22 20:05:16 +02:00
Kim Kulling 53d2cf975a
Merge pull request #3961 from andreasbuhr/patch-1
Replace swear words in IFCBoolean.cpp
2021-06-22 20:03:47 +02:00
Aaron Gokaslan b17c2f29e9 Replace noexcept with proper macro 2021-06-22 12:44:36 -04:00
Aaron Gokaslan 1650868701 Remove redundant include 2021-06-22 12:32:58 -04:00
Aaron Gokaslan 94c3abd841 Apply various performance fixes from clang-tidy 2021-06-22 12:27:15 -04:00
Kim Kulling 951d5158c5
Merge branch 'master' into patch-1 2021-06-22 09:42:30 +02:00
ihsinme d699e7b56e
Merge branch 'master' into patch-1 2021-06-22 09:48:25 +03:00
Kim Kulling 43a5c6c8e3
Merge pull request #3946 from mahiuchun/safe
glTF2: Make handling of embedded textures safer.
2021-06-21 19:02:43 +02:00
Kim Kulling 9512e9ac1e
Merge branch 'master' into safe 2021-06-21 17:53:17 +02:00
Kim Kulling 376b3b2eff
Merge pull request #3945 from mahiuchun/embed
Add GetEmbeddedTextureAndIndex() to aiScene.
2021-06-17 22:21:03 +02:00
Kim Kulling a8c75c34a1
Update scene.h
Add some more checks against nullptr dereferecnes.
2021-06-17 21:31:28 +02:00
Kim Kulling 089375bd63
Merge branch 'master' into embed 2021-06-17 21:22:36 +02:00
Hill Ma fe8c4ebd8c
Merge branch 'master' into zero 2021-06-16 10:18:41 -07:00
Andreas Buhr e27074594f
Replace swear words in IFCBoolean.cpp
Add a more gentle comment.
2021-06-16 18:58:41 +02:00
Kim Kulling fdb9ce6445
Merge pull request #3958 from mahiuchun/iosys
Fix issue #2873
2021-06-16 14:22:02 +02:00
Kim Kulling a34b9d1c95
Fix review findings 2021-06-16 11:21:31 +02:00
Hill Ma 148b8c66a8 glTF2: zero out extra space created by padding.
This makes resulting GLB deterministic.
2021-06-15 15:18:20 -07:00
Hill Ma af748755e1 Fix issue #2873 2021-06-15 13:20:12 -07:00
Kim Kulling a6558ca249
Merge branch 'master' into embed 2021-06-15 13:32:09 +02:00
ihsinme 6a78ef5652
Merge branch 'master' into patch-1 2021-06-15 09:42:05 +03:00
RichardTea a909341767 Merge remote-tracking branch 'origin/clean_gltf_pbr_brdf' into clean_gltf_pbr_brdf 2021-06-14 15:11:51 +01:00
RichardTea f412595887 Fix typo
Thank you clang!
2021-06-14 15:11:41 +01:00
RichardTea 985f3ee665 Fix glTFv2 texcoord/uv mapping
Use the standard property to indicate the UV map index
2021-06-14 15:11:41 +01:00
RichardTea fb039bb9eb Add glTFv2 Clearcoat import/export tests
Uses Clearcoat model from Khronos
2021-06-14 15:11:41 +01:00
RichardTea 4a66ec25d0 Standardise Clearcoat, Sheen and Transmission
Also cleanup glTFv2 defaults, don't import/export if disabled
2021-06-14 15:11:41 +01:00
RichardTea 4476352882 First pass at simplifying glTFv2 PBR
Removed 'core' set of GLTF-specific properties
2021-06-14 15:11:41 +01:00
Kim Kulling a9b29abee6
Merge pull request #3938 from BaldricS/Fix_SceneCombiner_Texture_Reindexing
SceneCombiner memory issues when re-indexing textures.
2021-06-14 15:40:25 +02:00
Kim Kulling 9a851cac7b
Merge branch 'master' into Fix_SceneCombiner_Texture_Reindexing 2021-06-14 14:47:15 +02:00
Kim Kulling a0388b1727
Merge pull request #3918 from Nodrev/fbx-lights-export
Adding basic support for lights in FBX exporter
2021-06-14 14:46:36 +02:00
Evangel 064ffc625b Const qualify aiMetadata::HasKey 2021-06-14 12:21:29 +10:00
Evangel 3de20af3cc Renamed glTF2::Object::extensions to customExtensions to avoid shadowing in other subclasses. 2021-06-12 13:16:53 +10:00
Evangel a7a30baf27 Renamed local variable to avoid shadowing member variable. 2021-06-12 13:08:14 +10:00
Evangel 7f0efa0866 Added ReadExtensions to glTF2::Object, so all objects now have their extensions read.
Importer is the only place that needs to be modified to make them available on the Assimp side now.
2021-06-12 12:50:44 +10:00
Evangel 5be2330fbb Added CustomExtension to glTF2::Object so that all subclasses have it instead of doing it piecemeal. 2021-06-12 12:20:40 +10:00
Evangel 6d413444b5 Merge branch 'master' of https://github.com/Evangel63/assimp 2021-06-12 11:46:20 +10:00
Evangel 36c8cdf3de Add scene metadata for glTF2 files as allowed by the glTF2 specification. 2021-06-12 11:44:28 +10:00
RichardTea fbf75963dc Fix typo
Thank you clang!
2021-06-11 15:25:02 +01:00
RichardTea 230f367ef9 Fix glTFv2 texcoord/uv mapping
Use the standard property to indicate the UV map index
2021-06-11 15:17:25 +01:00
RichardTea c86522e552 Add glTFv2 Clearcoat import/export tests
Uses Clearcoat model from Khronos
2021-06-11 14:34:42 +01:00
RichardTea 4b4d6b1326 Standardise Clearcoat, Sheen and Transmission
Also cleanup glTFv2 defaults, don't import/export if disabled
2021-06-11 13:44:52 +01:00
ihsinme 6dd9ab062c
the expression does not throw an exception.
maybe you just forgot this word.
2021-06-11 10:56:45 +03:00
Kim Kulling 6db142ee51 Merge branch 'x3d_pugi_migration' of https://github.com/assimp/assimp into x3d_pugi_migration 2021-06-10 23:36:47 +02:00
Kim Kulling ebb9b1b2af Next iteration 2021-06-10 23:36:07 +02:00
RichardTea 9f9d77f882 First pass at simplifying glTFv2 PBR
Removed 'core' set of GLTF-specific properties
2021-06-10 18:13:46 +01:00
Kim Kulling 391d3195df
Merge branch 'master' into fbx-lights-export 2021-06-10 12:27:14 +02:00
Scott Baldric 1deacf32be
Merge branch 'master' into Fix_SceneCombiner_Texture_Reindexing 2021-06-09 15:27:20 -05:00
Kim Kulling 199aa5dd66
Merge pull request #3911 from RichardTea/update_draco
Update Draco to upstream e4103dc
2021-06-09 16:34:53 +02:00
Kim Kulling fc4ebefaa4
Merge branch 'master' into update_draco 2021-06-08 23:30:01 +02:00
Hill Ma ef739c1703 glTF2: Make handling of embedded textures safer.
Previous code does not check whether the embedded texture exists.
2021-06-08 12:53:18 -07:00
Scott Baldric ca1ab8b11b
Merge branch 'master' into Fix_SceneCombiner_Texture_Reindexing 2021-06-08 08:18:15 -05:00
Kim Kulling c58fe0c98f
Merge pull request #3873 from krishty/improve-msvc-switches
enable debug information in MSVC release build
2021-06-08 15:09:28 +02:00
Hill Ma 121c0e7d0c Add GetEmbeddedTextureAndIndex() to aiScene.
It allows the caller to get the index of the embedded texture that is always computed anyway.
2021-06-07 21:53:28 -07:00
Kim Kulling 790203ee9d
Merge branch 'master' into improve-msvc-switches 2021-06-07 21:21:20 +02:00
Kim Kulling cdc1bf8e10
Merge pull request #3916 from jagoon/fix-fbx-exporter2
Fix fbx exporter bug if root node contains meshes.
2021-06-07 21:20:18 +02:00
Scott Baldric 8039351a67
Merge branch 'master' into Fix_SceneCombiner_Texture_Reindexing 2021-06-07 11:44:10 -05:00
Kim Kulling a8ddc74426
Merge branch 'master' into fix-fbx-exporter2 2021-06-07 18:26:59 +02:00
Kim Kulling 1126fa5218
Merge pull request #3934 from assimp/fix_dxf_viewer
fix viewer in case of unknown primitives.
2021-06-07 18:24:52 +02:00
Kim Kulling d33cf1dc0c
Merge branch 'master' into x3d_pugi_migration 2021-06-06 16:06:08 +02:00
Scott Baldric 444fc9c373 Increasing length of mDataLength if rewriting the texture index increases magnitutde of index. 2021-06-04 16:32:46 -05:00
Kim Kulling 84db4d3a08
Update CMakeLists.txt 2021-06-03 23:56:52 +02:00
Kim Kulling b0e7271449
Merge branch 'master' into stb-image-updated 2021-06-03 23:46:43 +02:00
Kim Kulling e6b83feb9f
Update CMakeLists.txt 2021-06-03 23:45:48 +02:00
Kim Kulling 1a493613c1
Merge branch 'master' into fix_dxf_viewer 2021-06-03 23:43:39 +02:00
Kim Kulling a3b3ab1d44
Merge pull request #3941 from assimp/issue_3767
update pugi_xml to 1.11
2021-06-03 23:42:08 +02:00
Kim Kulling 742250c5fb
Update CMakeLists.txt 2021-06-03 23:42:07 +02:00
Kim Kulling a716f741d8
fix the include 2021-06-03 23:35:12 +02:00
Kim Kulling bf0f8d4c1b
Update pugiconfig.hpp 2021-06-03 23:29:53 +02:00
Kim Kulling cc912f09f7 update pugi_xml to 1.11 2021-06-03 23:16:20 +02:00
Kim Kulling 22b49efbd0
Merge branch 'master' into stb-image-updated 2021-06-03 23:07:48 +02:00
Kim Kulling d2da600d08
Merge pull request #3940 from assimp/kimkulling-issue_3887
Use correct attribute name
2021-06-03 23:07:40 +02:00
Kim Kulling e0d1a36523
Merge branch 'master' into stb-image-updated 2021-06-03 23:07:38 +02:00
Kim Kulling b4fc41bc09
Use corret attribute name
- closes https://github.com/assimp/assimp/issues/3887
2021-06-03 22:52:10 +02:00
Kim Kulling d600b45cd2 Merge branch 'x3d_pugi_migration' of https://github.com/assimp/assimp into x3d_pugi_migration 2021-06-03 22:21:10 +02:00
Kim Kulling f28331b202
Merge pull request #3939 from assimp/kimkulling-issue_3872
Update unity plugin to trilib2
2021-06-03 20:58:21 +02:00
Kim Kulling 3a32612b71 Add skipping of unused nodes. 2021-06-03 20:55:31 +02:00
Kim Kulling 84a2e1fc92
Update unity plugin to trilib2
- closes https://github.com/assimp/assimp/issues/3872
2021-06-03 20:43:37 +02:00
Kim Kulling c8510a1a82
Merge branch 'master' into fix-fbx-exporter2 2021-06-03 11:05:07 +02:00
Kim Kulling d4199ee968
Merge pull request #3903 from ogjamesfranco/cached_output_directory_vars
Change the Assimp output directory vars to cached vars
2021-06-03 10:47:15 +02:00
Kim Kulling dd3d03a4ae
Merge branch 'master' into cached_output_directory_vars 2021-06-03 10:31:57 +02:00
Kim Kulling 35c506fcf8
Merge branch 'master' into fix_dxf_viewer 2021-05-30 21:56:15 +02:00
Kim Kulling 77ce4080b6 fix viewer in case of unknown primitives. 2021-05-30 21:54:04 +02:00
Garux 3b565444c3 Merge branch 'Q1MDLgroup' of https://github.com/Garux/assimp into Q1MDLgroup 2021-05-30 11:55:45 +03:00
Garux c776924adf fix -Waddress-of-packed-member 2021-05-30 11:45:50 +03:00
Kim Kulling c04759ccc4
Merge pull request #3922 from Evangel63/master
Fix bug in aiMetadata constructor that overwrites an array of one of …
2021-05-29 16:06:43 +02:00
Kim Kulling 8f18820bb2
Merge branch 'master' into master 2021-05-29 15:47:24 +02:00
Kim Kulling 9be76c1ba5
Merge pull request #3929 from TinyTinni/issue_3711
Fix non skipped CR in header parsing for binary PLY
2021-05-29 09:29:16 +02:00
Kim Kulling 09bb79c68a
Merge branch 'master' into issue_3711 2021-05-29 08:39:18 +02:00
Matthias Möller 7534b149cf fix non skipped CR in header parsing 2021-05-28 15:28:35 +02:00
Kim Kulling 1f6fe4b5ad
Merge pull request #3927 from assimp/kimkulling-update-fr-template
Update feature_request.md
2021-05-28 10:51:07 +02:00
Kim Kulling 2559befaca
Update feature_request.md
- Add label Feature-Request
2021-05-28 10:26:03 +02:00
Kim Kulling c6c7e84c00
Merge pull request #3926 from assimp/kimkulling-update-bug_template
Update bug_report.md
2021-05-28 09:49:00 +02:00
Kim Kulling 3c51ff771c
Update bug_report.md
- Add the bug label
- Make platform config more easy
2021-05-28 09:34:03 +02:00
Kim Kulling 2b8a06340c
Merge pull request #3925 from assimp/kimkulling-tectdebt_add_label
Update tech_debt.md
2021-05-28 09:32:10 +02:00
Kim Kulling 919ae69fe8
Update tech_debt.md 2021-05-28 08:44:40 +02:00
Kim Kulling eadffe8e3a
Merge pull request #3923 from assimp/kimkulling-tech_debt_template
Create tech_debt.md
2021-05-27 17:54:03 +02:00
Kim Kulling 59467b204a
Create tech_debt.md 2021-05-27 15:50:28 +02:00
Kim Kulling 15bdc09863
Merge pull request #3917 from Nodrev/fix-gcc4.9-compilation
Fix gcc4.9 compilation
2021-05-27 15:46:22 +02:00
Kim Kulling 70cc1630fa
Merge branch 'master' into fix-gcc4.9-compilation 2021-05-27 15:25:01 +02:00
Kim Kulling 57b1040a0c
Merge pull request #3894 from crud89/master
Add export property to control blob names.
2021-05-27 15:16:01 +02:00
Kim Kulling 48e99d2e0a
Merge branch 'master' into master 2021-05-27 10:45:36 +02:00
Kim Kulling 64d5f21627
Merge pull request #3912 from dlyr/fix-fov-doc
Fix camera fov comment since full fov is stored
2021-05-27 10:41:01 +02:00
Kim Kulling 7258441153
Merge branch 'master' into fix-fov-doc 2021-05-27 10:26:20 +02:00
Carsten Rudolph c33a4b2634 Fixed base name check. 2021-05-27 10:10:55 +02:00
Carsten Rudolph 0905252833
Merge branch 'master' into master 2021-05-27 09:45:17 +02:00
Evangel63 c557cf970a
Merge branch 'master' into master 2021-05-27 17:37:06 +10:00
Kim Kulling ce0f696c71
Merge pull request #3896 from JC3/patch-1
[Logger] Log a notification instead of silently dropping long log messages.
2021-05-27 09:10:13 +02:00
Kim Kulling aa8d746dc3
Merge branch 'master' into patch-1 2021-05-27 08:35:29 +02:00
Evangel63 f6b9e93e24
Merge branch 'master' into master 2021-05-27 12:42:46 +10:00
Kim Kulling 29e5f5fed1
Merge branch 'master' into master 2021-05-26 13:18:04 +02:00
Kim Kulling d4fb6847d8
Merge pull request #3878 from krishty/less-string-bloat
Less string bloat
2021-05-26 13:09:18 +02:00
Kim Kulling b59db55b8c
Merge branch 'master' into less-string-bloat 2021-05-26 12:14:08 +02:00
Evangel 2f4fba0703 Static cast i back to unsigned int because MSVC complains otherwise.
i will never be bigger than an unsigned int since that's what mNumProperties is to begin with.
2021-05-26 19:11:19 +10:00
Evangel 5468dd667e Fix bug in aiMetadata constructor that overwrites an array of one of aiString, aiVector3D, or aiMetadata with the first entry
aiMetadata copy constructor calls aiMetadata::Get on the copied from aiMetadata using the const aiString &key version. When
this is called on the metadata of an array type, this overwrites all entries with the first entry. This is due to the key
of all entries in an array being the name of the array. ie, in a glTF2 file with an extension:
"Extension" : [
	"Value1",
	"Value2",
	"Value3"
]
the aiMetadata struct for the "Extension" entry will have 3 entries with key/value pairs as:
"Extension"/"Value1"
"Extension"/"Value2"
"Extension"/"Value3"
So when the copy constructor calls the key based aiMetadata::Get, it will find "Value1" for all three entries.

This change simply replaces the key based aiMetadata::Get with the index based aiMetadata::Get
2021-05-26 18:36:56 +10:00
Kim Kulling 6f24e873b3
Merge pull request #3893 from thomasbiang/wangyi_basisu
Support basis universal to GLTF2 format
2021-05-25 17:28:19 +02:00
Kim Kulling 6b8a00dfa1
Merge branch 'master' into wangyi_basisu 2021-05-25 17:17:07 +02:00
Kim Kulling 743b87883e
Merge pull request #3883 from ms-maxvollmer/importer_fixes_followup
Follow up to PR #3787
2021-05-25 16:27:32 +02:00
Kim Kulling b5e54e4d3b
Merge branch 'master' into wangyi_basisu 2021-05-25 16:17:29 +02:00
Kim Kulling faeae27923
Merge branch 'master' into importer_fixes_followup 2021-05-25 16:15:09 +02:00
Kim Kulling 40f9d37a38
Merge pull request #3859 from spotaws/UVStreamNames
preserve UV Stream names in FBX files
2021-05-23 20:15:23 +02:00
Jean-François Verdon f13515a391 Adding basic support for lights in FBX exporter 2021-05-23 19:12:21 +02:00
Jean-François Verdon 6c104e096e
Merge branch 'master' into fix-gcc4.9-compilation 2021-05-23 19:06:28 +02:00
Kim Kulling aeaa22cbbd
Merge branch 'master' into UVStreamNames 2021-05-23 14:37:28 +02:00
Kim Kulling 770b099540
Merge pull request #3858 from spotaws/PBRsupport
PBR material support
2021-05-23 14:35:24 +02:00
Kim Kulling ac54fe41e2
Merge branch 'master' into PBRsupport 2021-05-23 13:23:06 +02:00
Jean-François Verdon 799384f2b8 Adding the required c flag to compile zip files using gcc 4.9 2021-05-22 17:36:39 +02:00
Jagoon f96e3cde2d Fix transform chain is applied twice 2021-05-23 00:06:05 +09:00
Jean-François Verdon b7b3c6db7e Fixing GCC 4.9 compilation issues 2021-05-22 16:57:07 +02:00
Jagoon 28e34878cb Fix fbx exporter bug if root node contains meshes. 2021-05-22 23:20:34 +09:00
Kim Kulling 7686393fe3
Merge branch 'master' into update_draco 2021-05-22 13:14:05 +02:00
dlyr 1f32743f8b Fix camera fov comment since full fov is stored 2021-05-22 00:56:01 +02:00
Kim Kulling f675aaa871
Merge branch 'master' into cached_output_directory_vars 2021-05-21 14:51:34 +02:00
Kim Kulling 92b8c02982
Merge pull request #3847 from Garux/md3Tuning
Md3 tuning
2021-05-21 13:58:38 +02:00
RichardTea 53790e8273 Update Draco to upstream e4103dc
Fixes some MSVC and mingw compiler issues
Sets VERSION and SO_VERSION
e4103dc39f
2021-05-21 12:25:36 +01:00
Kim Kulling ee85ebbd00
Merge branch 'master' into md3Tuning 2021-05-20 20:25:30 +02:00
Kim Kulling 53563a8624
Merge pull request #3856 from krishty/fix-sib-string-waste
fixed bloat in SIB importer
2021-05-20 20:24:49 +02:00
Kim Kulling 4f801a104e
Merge branch 'master' into fix-sib-string-waste 2021-05-20 19:58:11 +02:00
Kim Kulling b622eb5689
Merge branch 'master' into cached_output_directory_vars 2021-05-20 14:12:29 +02:00
Kim Kulling 79da512e99
Merge pull request #3908 from assimp/fix_nullptr_dereferences
Fix possible nullptr dereferences.
2021-05-20 14:12:15 +02:00
Kim Kulling 20ade095ea
Return null-type in case of an empty document 2021-05-20 13:40:44 +02:00
Kim Kulling dd0011b4a9
Merge branch 'master' into fix_nullptr_dereferences 2021-05-19 00:17:39 +02:00
Kim Kulling 88ccfedd10 Fix possible nullptr dereferences. 2021-05-19 00:16:15 +02:00
James Franco 1543738b1f
Merge branch 'master' into cached_output_directory_vars 2021-05-18 16:24:32 -04:00
Kim Kulling 25d0cd39f6
Merge pull request #3907 from assimp/sml_doc
Xml doc
2021-05-18 21:38:12 +02:00
Kim Kulling 3726b2eef4 fix the build 2021-05-18 21:21:43 +02:00
Kim Kulling 3fa45e6a8c Merge branch 'master' into sml_doc 2021-05-18 21:18:02 +02:00
Kim Kulling e01a6b4276 Add xml doc. 2021-05-18 21:15:48 +02:00
Kim Kulling 6cdfd3fcc1
Merge pull request #3905 from MalcolmTyrrell/MalcolmTyrrell/loggingImprovements
[Logger] Unify log formatting
2021-05-18 14:28:37 +02:00
Malcolm Tyrrell 54a27f4514
Merge branch 'master' into MalcolmTyrrell/loggingImprovements 2021-05-17 13:32:02 +01:00
Malcolm Tyrrell 3d3462a621 Simplify formatting templates. 2021-05-17 11:54:43 +01:00
Malcolm Tyrrell 084dc73b91 Fast path for unformatted calls. 2021-05-17 11:27:21 +01:00
Malcolm Tyrrell fd5d1211f9 Recover comment which got dropped 2021-05-17 10:33:00 +01:00
Malcolm Tyrrell 6e4b9d267b Remove TODO. Typo fix. 2021-05-17 10:29:06 +01:00
Carsten Rudolph 43e1e4d3d3
Merge branch 'master' into master 2021-05-17 07:56:41 +02:00
Kim Kulling 0c9947f8b9
Merge pull request #3900 from Saalvage/decltype
Utilize decltype for slightly improved syntax
2021-05-16 21:16:22 +02:00
Kim Kulling 6dec8ad5f3
Merge branch 'master' into decltype 2021-05-16 19:21:49 +02:00
ogjamesfranco 27135bd3e7 changed the assimp output directory vars to cached vars 2021-05-15 15:27:24 -04:00
Kim Kulling 596f7db9f9
Merge pull request #3901 from impala454/master
Add support for arm 64 bit
2021-05-14 00:02:28 +02:00
Kim Kulling dba4e21f7c
Merge branch 'master' into master 2021-05-13 23:51:35 +02:00
Kim Kulling 403aef8cea
Merge pull request #3902 from assimp/kimkulling-readme-fix
Update Readme.md
2021-05-13 19:17:49 +02:00
Kim Kulling 348ae42212
Update Readme.md 2021-05-13 18:54:21 +02:00
Kim Kulling 8ab2e466f5
Update Readme.md
- Add folder AssetLib to readme in structure
2021-05-13 18:51:12 +02:00
Kim Kulling eabae431f4
Merge pull request #3891 from JC3/jc3-dnase
[blender] Disable creation of "dna.txt"
2021-05-13 17:31:09 +02:00
Malcolm Tyrrell 4ec01cfdcd Improve use of logging 2021-05-13 12:05:31 +01:00
Kim Kulling 22340469f4
Merge branch 'master' into jc3-dnase 2021-05-13 11:51:42 +02:00
Malcolm Tyrrell ad6f300b1d Other LogAux functions 2021-05-13 10:43:28 +01:00
Malcolm Tyrrell c5f22269a8 LogAux 2021-05-13 10:33:25 +01:00
Malcolm Tyrrell 7abfd134b6 LogAux warn 2021-05-13 10:33:16 +01:00
Malcolm Tyrrell 5cd3bdd5c2 No need to distinguish formatting log functions. 2021-05-13 10:25:27 +01:00
Malcolm Tyrrell 6957d34733 Simplify the macros. 2021-05-13 10:14:24 +01:00
Malcolm Tyrrell 78145f1425 log verboseDebug 2021-05-13 10:08:59 +01:00
Malcolm Tyrrell 89584c167a Log debug 2021-05-13 09:56:42 +01:00
Malcolm Tyrrell ca698c3e49 Log error 2021-05-13 09:36:42 +01:00
Carsten Rudolph a700285c64
Merge branch 'master' into master 2021-05-13 08:37:59 +02:00
Chuck Claunch 18beae988c Add support for arm 64 bit 2021-05-12 21:57:24 +00:00
Kim Kulling 0849f4e573
Merge pull request #3848 from contriteobserver/M3DasciiByDefault
build M3D ASCII support by default
2021-05-12 16:05:11 +02:00
Kim Kulling b70f195805
Merge branch 'master' into M3DasciiByDefault 2021-05-12 15:31:01 +02:00
Kim Kulling a183ad17bb
Merge pull request #3843 from Garux/md2orient
fix md2 orientation
2021-05-12 15:28:11 +02:00
Malcolm Tyrrell 58bc4bcb63 log info 2021-05-12 12:55:21 +01:00
Malcolm Tyrrell 813d0aecdd Adjust warn 2021-05-12 12:43:24 +01:00
Kim Kulling 7a3c8e5504
Merge branch 'master' into md2orient 2021-05-12 13:07:27 +02:00
Kim Kulling 8b13223314
Merge pull request #3851 from krishty/c4d-cineware
updated C4D importer to use the Cineware SDK
2021-05-12 12:27:25 +02:00
Kim Kulling f127144f71
Merge branch 'master' into c4d-cineware 2021-05-12 10:57:17 +02:00
Kim Kulling 3768a2194e
Merge pull request #3842 from Garux/hl1mdlOrient
fix hl1 mdl orientation, tex coords, face windings order
2021-05-12 10:05:38 +02:00
Kim Kulling 8013c5011c
Merge branch 'master' into hl1mdlOrient 2021-05-12 08:21:40 +02:00
Kim Kulling ad4ca71e4c
Merge branch 'master' into jc3-dnase 2021-05-12 00:56:46 +02:00
Kim Kulling f197e93035
Merge pull request #3898 from JC3/patch-2
Reapply [amf] Fix crash when file could not be parsed.
2021-05-11 20:48:27 +02:00
Salvage 8d20460ae4
Ditch decltype 2021-05-11 19:06:21 +02:00
Jason C 75af93aaa4
Merge branch 'master' into patch-2 2021-05-11 12:12:07 -04:00
Kim Kulling 951c8a976c
Merge pull request #3844 from Garux/aseHack
support missing closing brace in material list after Ascii Scene Exporter v2.51
2021-05-11 16:20:31 +02:00
Kim Kulling 4ee2f5f69d
Merge branch 'master' into aseHack 2021-05-11 11:40:24 +02:00
Carsten Rudolph a54cd432cd
Merge branch 'master' into master 2021-05-11 07:58:05 +02:00
Salvage 632e4a20a9
Utilize decltype for slightly improved syntax 2021-05-11 05:29:51 +02:00
Jason C 00b625a2ae [amf] Fix crash when file could not be parsed.
Fix double free of mXmlParser (deleted but not reset in ParseFile, then deleted again in ~AMFImporter).

Should probably use a smart pointer instead, though.

---

This change was previously made in 785cca1bb4, as part of PR #3890, but was lost in a merge.
2021-05-10 19:06:39 -04:00
Kim Kulling 7ff6144c2c
Merge pull request #3881 from JC3/jc3-spam-killa
Misc. log output and message fixes
2021-05-11 00:09:16 +02:00
Kim Kulling cb7d3ac598
Merge branch 'master' into jc3-spam-killa 2021-05-10 22:21:13 +02:00
Kim Kulling cdc0bd00ce
Merge pull request #3890 from JC3/jc3-importer-open-error-handling
Fix importer ReadFile issues on file open error or when opening empty files
2021-05-10 22:19:52 +02:00
Kim Kulling e1a0e16a4e
Merge branch 'master' into jc3-importer-open-error-handling 2021-05-10 22:07:25 +02:00
Kim Kulling 76ccaeb42f
Merge pull request #3841 from Garux/mdcOrient
orient mdc correctly
2021-05-10 22:06:47 +02:00
Kim Kulling 4807853f09
Merge branch 'master' into mdcOrient 2021-05-10 21:06:15 +02:00
Krishty ab43f3fefd Merge branch 'stb-image-updated' of https://github.com/krishty/assimp into stb-image-updated 2021-05-10 20:44:55 +02:00
Krishty d75f8bd5b0 silence warnings in stb_image.h
Re-applies 09c5564d5b to stb_image.h’s new path.
2021-05-10 20:44:43 +02:00
Kim Kulling 433620350e
Merge branch 'master' into stb-image-updated 2021-05-10 11:30:45 +02:00
Jason C f87b180147
Merge branch 'master' into jc3-importer-open-error-handling 2021-05-09 17:02:04 -04:00
Kim Kulling b30cbcf117
Merge branch 'master' into jc3-spam-killa 2021-05-09 21:47:17 +02:00
Kim Kulling 38dc92c5c9
Merge pull request #3880 from JC3/jc3-cctype-fixes
Make sure ctype calls use unsigned chars.
2021-05-09 21:46:35 +02:00
Jason C 0f85990fe3
Merge branch 'master' into jc3-importer-open-error-handling 2021-05-09 14:42:17 -04:00
Jason C 5cc05c26a7
Merge branch 'master' into jc3-spam-killa 2021-05-09 14:41:39 -04:00
Kim Kulling 319770db9d
Merge branch 'master' into jc3-cctype-fixes 2021-05-09 20:37:21 +02:00
Kim Kulling 226b34bb35
Merge pull request #3850 from JC3/patch-3
Fix crash in CanRead when file can not be opened.
2021-05-09 20:25:58 +02:00
Jason C 859b32c045
[Logger] Log a notification instead of silently dropping long log messages.
Logs a notification instead of silently dropping long log messages, which can complicate debugging.

This way, if you don't see a message you expect to see, you'll immediately know why.

The *correct* approach would be to eliminate length filtering here entirely and use `snprintf` appropriately (also there's a tiny -- probably negligible -- performance hit here in calling `strlen` regardless of whether or not the verbosity level matches). Failing that, the second best option is to copy and truncate messages here. However, for now, this should be OK.
2021-05-07 22:32:32 -04:00
Jason C e37e00c51f [assimp/fast_atof] Fixed garbage in exception messages.
Also reduced 100 byte context output to 30 (which is still probably excessive, but not *as* excessive).
2021-05-07 20:21:56 -04:00
ywang a19b708144 support both ktx and ktx2 2021-05-07 16:27:23 -07:00
Jason C 9a2a0384f4 Merge branch 'master' into patch-3 2021-05-07 17:53:18 -04:00
Jason C 279e9a186f
Merge branch 'master' into jc3-dnase 2021-05-07 14:49:22 -04:00
Jason C 6eb15080ec
Merge branch 'master' into jc3-importer-open-error-handling 2021-05-07 14:49:00 -04:00
Jason C 2fd6102573
Merge branch 'master' into jc3-spam-killa 2021-05-07 14:48:24 -04:00
Jason C 7b404788a6
Merge branch 'master' into jc3-cctype-fixes 2021-05-07 14:48:01 -04:00
Carsten Rudolph 1b33dd1965 Document AI_CONFIG_EXPORT_BLOB_NAME. 2021-05-07 17:31:38 +02:00
Carsten Rudolph 8ff52c0f89 Pass base name from export properties to the IO system. 2021-05-07 17:31:30 +02:00
Carsten Rudolph be85f238f4 Add optional blob base name to blob IO system. 2021-05-07 17:30:58 +02:00
Carsten Rudolph 964778cac1 Add AI_CONFIG_EXPORT_BLOB_NAME export property. 2021-05-07 17:30:26 +02:00
Kim Kulling 25a0eb0d67
Merge branch 'master' into mdcOrient 2021-05-07 13:03:08 +02:00
Kim Kulling d7c65d363c
Merge pull request #3839 from Garux/mRootNode_mTransformation
consider pScene->mRootNode->mTransformation set by some importers while using AI_CONFIG_PP_PTV_ROOT_TRANSFORMATION
2021-05-07 11:52:44 +02:00
Kim Kulling 8cae8c5461
Fix static code analysis findings 2021-05-07 11:52:16 +02:00
Kim Kulling 56bfa1ce5c
Make constructros with one arg explicit 2021-05-07 11:36:21 +02:00
ywang 2b9d88c943 support basis universal 2021-05-06 15:10:06 -07:00
Kim Kulling 25cf5dd487
Merge branch 'master' into mRootNode_mTransformation 2021-05-06 21:40:03 +02:00
Kim Kulling 350f2ea1d3 Fix build and merged master. 2021-05-06 21:36:25 +02:00
Kim Kulling 52228a93f8 Fix X3DGeohelper. 2021-05-06 21:07:38 +02:00
Kim Kulling b1b937ea79
Merge pull request #3838 from Garux/fixGenNormals
consider aiProcess_FlipWindingOrder in aiProcess_GenNormals & aiProcess_GenSmoothNormals
2021-05-06 20:40:17 +02:00
Kim Kulling e120544978
Merge branch 'master' into fixGenNormals 2021-05-06 17:28:37 +02:00
Kim Kulling 1c90d28f9b
Merge pull request #3837 from krishty/add-step-extension
added .step extension to IFC loader
2021-05-06 17:25:22 +02:00
Kim Kulling bc7551b778
Merge branch 'master' into add-step-extension 2021-05-06 14:19:53 +02:00
Kim Kulling 253fdbdeda
Merge pull request #3808 from ericwa/SimpleTexturedDirectx11Fixes
SimpleTexturedDirectx11 sample: support embedded uncompressed textures
2021-05-06 14:19:15 +02:00
Kim Kulling f53ae076a7
Merge branch 'master' into SimpleTexturedDirectx11Fixes 2021-05-06 14:07:08 +02:00
Kim Kulling 90d3ff27f8
Merge pull request #3806 from krishty/remove-useless-scaling-prototype
removed dead code from 0d29203e24
2021-05-06 14:04:35 +02:00
Kim Kulling 55056d11fd
Add missing include 2021-05-06 11:50:08 +02:00
Jason C 7da9c42c81 [blender] Disable creation of "dna.txt"
Developers who want to enable it can either:

- *Temporarily* set ASSIMP_BUILD_BLENDER_DEBUG_DNA=1 in BlenderDNA.h, or
- *Temporarily* define ASSIMP_BUILD_BLENDER_DEBUG_DNA=1 on the build command line.

Addresses #3886.
2021-05-05 19:30:29 -04:00
Jason C c08ad2e5c2
Merge branch 'master' into jc3-cctype-fixes 2021-05-05 19:04:47 -04:00
Jason C de5c8ece6f [xgl] Fail if file could not be parsed.
Fail instead of returning empty scene.

Partially addresses #3888.

TODO: Propagate XML error detail through exception (depends on #3881).
2021-05-05 17:49:10 -04:00
Jason C 98f586c8d4 [irr] Fail if file could not be parsed.
Fail instead of returning empty scene.

Partially addresses #3888.

TODO: Propagate XML error detail through exception (depends on #3881).
2021-05-05 17:48:44 -04:00
Jason C 470913bf27 [assbin] Fail if file could not be opened
Fail instead of returning empty scene.

Partially addresses #3888.
2021-05-05 17:46:24 -04:00
Jason C 0d3e8b52be [sib] Fix assertion failure when file could not be opened.
Check result of IOSystem::Open before constructing stream.

Partially addresses #3888.
2021-05-05 17:32:10 -04:00
Jason C a80b3b25eb [quick3d] Fix assertion failure when file could not be opened.
Check result of IOSystem::Open before constructing stream.

Partially addresses #3888.
2021-05-05 17:31:50 -04:00
Jason C e52c297284 [nendo] Fix assertion failure when file could not be opened.
Check result of IOSystem::Open before constructing stream.

Partially addresses #3888.
2021-05-05 17:31:24 -04:00
Jason C 1cd3752ec6 [ms3d] Fix assertion failure when file could not be opened.
Check result of IOSystem::Open before constructing stream.

Partially addresses #3888.
2021-05-05 17:31:06 -04:00
Jason C 7f13387487 [cob] Fix assertion failure when file could not be opened.
Check result of IOSystem::Open before constructing stream.

Partially addresses #3888.
2021-05-05 17:30:29 -04:00
Jason C 116ebf6e10 [3ds] Fix assertion failure when file could not be opened
Check result of IOSystem::Open before constructing stream.

Partially addresses #3888.
2021-05-05 17:30:05 -04:00
Krishty 6c7ee61f14 Merge branch 'stb-image-updated' of https://github.com/krishty/assimp into stb-image-updated 2021-05-05 23:15:59 +02:00
Krishty 816da9b677 merge and update all copies of stb_image.h 2021-05-05 23:15:41 +02:00
Jason C 785cca1bb4 [amf] Fix crash when file could not be parsed.
Fix double free of mXmlParser (deleted but not reset in ParseFile, then deleted again in ~AMFImporter).

Should probably use a smart pointer instead, though.

Partially addresses https://github.com/assimp/assimp/issues/3888.
2021-05-05 17:13:10 -04:00
Krishty 24df52647f merge and update all copies of stb_image.h 2021-05-05 23:05:44 +02:00
Jason C f5a31b70f5
Merge branch 'master' into patch-3 2021-05-05 16:24:46 -04:00
Kim Kulling 992f10e7bf
Merge branch 'master' into remove-useless-scaling-prototype 2021-05-05 21:54:31 +02:00
Jason C 7ae8a52d9f
Merge branch 'master' into jc3-spam-killa 2021-05-05 10:33:29 -04:00
Kim Kulling b82d9f4bc7
Merge branch 'master' into new-file-detection 2021-05-05 15:59:25 +02:00
Kim Kulling 1e89c06157
Merge pull request #3882 from assimp/optimize_3mf_strings
Optimize 3mf strings
2021-05-05 15:56:14 +02:00
Kim Kulling 5325b327c3
Merge branch 'master' into optimize_3mf_strings 2021-05-05 15:12:06 +02:00
Kim Kulling 3f5c3eb38c
Delete dna.txt 2021-05-05 15:11:36 +02:00
Kim Kulling 067993d607
Delete dae.dae 2021-05-05 15:11:20 +02:00
Kim Kulling 0aadd8a3f9
Delete spiderExport.stl 2021-05-05 15:10:59 +02:00
Kim Kulling d1991ad949
Delete AssimpLog_Cpp.txt 2021-05-05 15:10:50 +02:00
Kim Kulling e683c6eef9
Delete testExport.stl 2021-05-05 15:10:30 +02:00
Kim Kulling 9395322e56
Delete AssimpLog_C.txt 2021-05-05 15:10:22 +02:00
Max Vollmer (Microsoft Havok) 153b890b02 Prevent accessing nullpointers 2021-05-05 14:09:43 +01:00
kkulling 2a6b84c8ea - closes https://github.com/assimp/assimp/issues/3830
- Fix rgba2hex
- Add tests
2021-05-05 14:43:51 +02:00
Krishty d5cde96fbd Merge branch 'new-file-detection' of https://github.com/krishty/assimp into new-file-detection 2021-05-05 13:14:35 +02:00
Krishty b546dfccc7 fix for 0f3e6e2941
Visual Studio’s Search All Files ignores ObjFileImporter.cpp and now I’m sure that’s a bug
2021-05-05 13:14:25 +02:00
kkulling f15dcfa981 - Fix model parsing 2021-05-05 13:10:52 +02:00
kkulling cbce6d3dad Merge branch 'optimize_3mf_strings' of https://github.com/assimp/assimp into optimize_3mf_strings 2021-05-05 10:46:54 +02:00
Kim Kulling 6dcbd0d566
Merge branch 'master' into new-file-detection 2021-05-05 09:37:52 +02:00
Jason C 6e65115253 [assimp/xml] Improved XML parse error message.
Fixed typo, added detail.
2021-05-05 00:33:57 -04:00
Jason C ccd1a4455e [ply] Fix minor typo in error message. 2021-05-04 21:57:00 -04:00
Jason C a03dc4edaa [amf] Fix minor typo in error message.
Added missing space to detail string on parse failure.
2021-05-04 21:56:49 -04:00
Jason C f8609c2c2d [opengex] Direct OpenDDLParser log messages to assimp logger
Also filter unprintable characters. Addresses second part of #3862.
2021-05-04 21:54:14 -04:00
Jason C 558457e5bf [openddlparser] Remove default log handler and unsolicited output.
This addresses part of #3862.

- Remove default log handler.
- Log callback can now be set to nullptr, which just makes logging a no-op.
- Initial log callback is nullptr.
- Also tweaked format of token error log message and removed newline.

Assimp code that uses this may regain logging output by installing a callback and directing the output through appropriate logging facilities.
2021-05-04 21:54:14 -04:00
Jason C 9a04f5d4b0 Fix garbage messages in SIB, MD2, and MDC loaders. 2021-05-04 21:53:16 -04:00
Jason C a9fb1e56ae Add ai_str_toprintable; fixed garbage messages in HMP, MDL, Q3D loaders.
- ai_str_toprintable: See docs in StringUtils.h.
- HMP, MDL, Q3D: In particular, newlines in binary data were complicating logging.
2021-05-04 20:33:16 -04:00
Jason C c8ad8c6017 [mmd] Remove stderr spam.
Removed stderr spam and cleaned up exception text.

Addresses #3865.
2021-05-04 20:33:16 -04:00
Krishty deca47225f Merge branch 'new-file-detection' of https://github.com/krishty/assimp into new-file-detection 2021-05-05 00:59:20 +02:00
Krishty ae93f53b51 fixed signature-based detection on unknown extensions 2021-05-05 00:57:43 +02:00
Krishty b79b84d34e Merge branch 'master' into new-file-detection 2021-05-05 00:09:42 +02:00
Krishty 0f3e6e2941 replaced std::size() with AI_COUNT_OF for pre-C++20 compilers 2021-05-05 00:08:54 +02:00
Jason C 200086c4c5 [assimp_view] Make sure ctype calls use unsigned char.
Addresses https://github.com/assimp/assimp/issues/3867 and then some.
2021-05-04 17:31:46 -04:00
Jason C 7dd7a053a9 [gtest] Fixed a rogue std::isalnum
Use IsAlNum instead (gtest-port.h), which deals with char signedness correctly. This was the only spot in gtest where a cctype function was called instead of its gtest-port.h equivalent.

Addresses https://github.com/assimp/assimp/issues/3867 and then some.
2021-05-04 17:31:46 -04:00
Jason C 1ec8d4b6cf [draco] Make sure ctype calls use unsigned char.
Addresses https://github.com/assimp/assimp/issues/3867 and then some.
2021-05-04 17:31:46 -04:00
Jason C 2925592c64 [assimp] Make sure ctype calls use unsigned char.
Cast to unsigned char as required by C++ (see C++ **[cctype.cyn]** -> ISO C99 section 7.4, [see also](https://en.cppreference.com/w/cpp/string/byte/isspace)).

Addresses https://github.com/assimp/assimp/issues/3867 and then some.
2021-05-04 17:31:13 -04:00
Kim Kulling 072aee7cbe
Merge branch 'master' into add-step-extension 2021-05-04 22:35:21 +02:00
Kim Kulling 38df0f4376
Merge pull request #3834 from JC3/patch-4
ASSIMP_ENABLE_DEV_IMPORTERS env var, applied to X3D importer
2021-05-04 22:33:48 +02:00
Krishty b57ce004f8 reduced FBX string bloat
The FBX importer used two std::strings where string literals would have been sufficient.
2021-05-04 22:01:01 +02:00
Krishty f3c18556d1 reduced OpenGEX string bloat
The OpenGEX importer defined a few global std::string constants, only to convert them back to C strings on use. This commit defines them as C strings from the beginning.

strncmp() was used to compare these strings to other strings, but the length limit was set to string length, which made it equivalent to strcmp(), just slower. Fixed that as well.
2021-05-04 22:01:01 +02:00
Krishty 7b6dab5e20 reduced DXF string bloat
The DXF importer defined a global std::string constant, only to convert it back to a C string on use.

This commit defines the constant as a C string right away, thus saving 340 B of code and data.
2021-05-04 22:01:00 +02:00
Krishty 2a126f9f62 reduced Ogre string bloat
The Ogre importer used std::string where a string literal would have been sufficient. Saves another 600 B of code and data.
2021-05-04 22:01:00 +02:00
Kim Kulling dc6fa58814
Merge branch 'master' into patch-4 2021-05-04 21:08:56 +02:00
Kim Kulling be85eac703
Merge pull request #3877 from olsoneric/olsoneric-issue_2339_py_cant_load_obj
Use POINTER(char) for binary data. For pyassimp issue #2339: Can't load OBJ
2021-05-04 21:08:35 +02:00
Kim Kulling 875acc5166
Merge branch 'master' into patch-4 2021-05-04 20:59:06 +02:00
Eric Olson f17d58cadd Use POINTER(c_char) for binary data with pyassimp
"For a general character pointer that may also point to binary data,
POINTER(c_char) must be used." c_char_p is for a zero-terminated string.

Reference: https://docs.python.org/3/library/ctypes.html#ctypes.c_char_p

Applying this change to the 4.1.4 released python module fixes #2339 for
me in Ubuntu.
2021-05-04 13:38:38 -05:00
Krishty 8ad9c937f1 enabled debug information in MSVC release build
No effect on runtime speed/size. Slightly slower link time, but debugging experience improves by a million times.

- /Zi – Store debug information in a .pdb file, not directly in the DLL/EXE
- /DEBUG:FULL – generate debug information during link
- /PDBALTPATH:%_PDB% – do not store the file system path of the .pdb, just the filename and hash (no disclose paths on distribution)
- /OPT:REF /OPT:ICF – remove unreferenced functions and fold identical functions (this was enabled before, but requires explicit enabling if /DEBUG:FULL is specified)
2021-05-04 19:10:24 +02:00
Kim Kulling cd0fd30821
Merge pull request #3819 from vfxgordon/fbxBlendshapes
Fixed weighting issue with blendShapeChannels
2021-05-04 17:44:32 +02:00
Kim Kulling e85a69a960
Update D3MFImporter.cpp 2021-05-04 15:31:07 +02:00
vfxgordon 4231a86ad8
Merge branch 'master' into fbxBlendshapes 2021-05-04 06:22:22 -07:00
kimkulling 7690f92c81 Fix version of strnlen 2021-05-04 14:48:39 +02:00
Kim Kulling 47cacf8aa6
Merge branch 'master' into optimize_3mf_strings 2021-05-04 14:42:16 +02:00
kimkulling ee5170c18a - fix security issue 2021-05-04 14:40:25 +02:00
Kim Kulling 9c44c0ab2b
Merge branch 'master' into remove-useless-scaling-prototype 2021-05-04 13:02:00 +02:00
Kim Kulling ff18354997
Merge pull request #3869 from assimp/optimize_3mf_strings
use const chars
2021-05-04 12:46:38 +02:00
kimkulling 0e17939e8d Use const char* const 2021-05-04 12:09:38 +02:00
Kim Kulling 33a85e280f
Merge branch 'master' into optimize_3mf_strings 2021-05-04 11:47:11 +02:00
kkulling 55fd820ed7 use const chars 2021-05-04 10:57:30 +02:00
Kim Kulling 70ba2e9e74
Merge pull request #3805 from krishty/fix-scale-msg
fixed malformatted message
2021-05-04 09:18:12 +02:00
Kim Kulling 39522178aa
Merge branch 'master' into fix-scale-msg 2021-05-04 08:13:12 +02:00
Kim Kulling 79802ad836
Merge pull request #3796 from krishty/fix-file-detection
small cleanup in file format detection
2021-05-04 07:54:09 +02:00
Kim Kulling 88d64388f8
Update AMFImporter.cpp 2021-05-03 20:57:17 +02:00
Kim Kulling b87f67db4c
Add missing include 2021-05-03 20:49:14 +02:00
Kim Kulling 60b99501a9
Merge branch 'master' into new-file-detection 2021-05-03 20:44:27 +02:00
Tom spot Callaway f91b439f79 preserve UV Stream names in FBX files 2021-05-03 13:40:31 -04:00
Tom spot Callaway e7211790fb PBR material support 2021-05-03 13:27:52 -04:00
Krishty fe5a23e110 fixed bloat in SIB importer
The SIB importer, upon needing an empty aiString, did not create a new one but rather copied a predefined global empty string.
Since aiStrings contain large buffers, Assimp copied 1028 B of zeros instead of setting five bytes (at least when compiled with Visual C++). Since aiString is a user-defined type without a constexpr constructor, Visual C++ had to generate a thread-safe run-time initializer as well.
Now it’s just two instructions.
2021-05-03 17:01:59 +02:00
vfxgordon 9ae3e88f6c
Merge branch 'master' into fbxBlendshapes 2021-05-03 07:40:25 -07:00
Kim Kulling f29828f657
Merge branch 'master' into fix-file-detection 2021-05-02 19:41:33 +02:00
Kim Kulling 71c48581f3
Merge pull request #3852 from krishty/3ds-namespace
style fix: namespace instead of class with public static members
2021-05-02 19:41:04 +02:00
Kim Kulling 9e27afe353
Merge branch 'master' into 3ds-namespace 2021-05-02 17:38:29 +02:00
Kim Kulling afdec791a6
Merge pull request #3795 from assimp/kimkulling-patch-3
Fix formatter.
2021-05-02 17:38:16 +02:00
Kim Kulling e278673fe7
Merge branch 'master' into 3ds-namespace 2021-05-02 15:08:11 +02:00
Krishty e73a2ed5e0 style fix: namespace instead of class with public static members 2021-05-01 23:20:37 +02:00
Kim Kulling 6c429a9d82
Merge branch 'master' into kimkulling-patch-3 2021-05-01 19:29:37 +02:00
Krishty 65a2b98b86 updated C4D importer to use the Cineware SDK
Maxon’s Melange SDK has been renamed Cineware SDK as of 21.004, and with it all namespaces and types. This commit
- makes CMake use contrib/Cineware instead of contrib/Melange;
- renames Assimp’s namespace melange to namespace cineware;
- removes useless functions and formatter references from class C4DImporter;
- removes duplicate conversion of cineware::String to aiString in the importer;
- updates comments accordingly;
- updates copyright info.
2021-05-01 18:46:23 +02:00
Jason C c2d3d22271
Fix crash in CanRead when file can not be opened.
Addresses #3849
2021-05-01 10:58:29 -04:00
Kim Kulling b516d940b6
Merge pull request #3826 from krishty/fix-3ds-matrix
reverted regression in 3DS transformation (issue #3802)
2021-05-01 12:02:24 +02:00
Kim Kulling 78132d666f
Merge branch 'master' into fix-3ds-matrix 2021-05-01 11:34:33 +02:00
Kim Kulling f538b96e82
Merge pull request #3788 from BaldricS/SceneCombiner_Memory_Leaks
Fix: Removing double delete of texture items after MergeScene.
2021-05-01 11:07:34 +02:00
Kim Kulling 7843b24e03
Merge branch 'master' into SceneCombiner_Memory_Leaks 2021-05-01 09:16:06 +02:00
Kim Kulling d28e2e0a39
Merge pull request #3775 from diiigle/patch-1
Add PBRT to exportable file formats list
2021-05-01 09:15:34 +02:00
Garux eab1c9c3c0 add `AI_CONFIG_IMPORT_MD3_LOAD_SHADERS` bool option
the purpose is use of this loader with idtech3 FS
this requires full original material name, which euqals to Q3 shader path
result of deduction is not usable inside Q3 FS at all
option in general is "do not tinker with the path"
2021-05-01 08:14:44 +03:00
contriteobserver 813b64ef52 corrected M3D_EXP_NOFACE test 2021-04-30 21:51:02 -07:00
contriteobserver bf653b4bd6 Merge branch 'M3DasciiByDefault' of https://github.com/contriteobserver/assimp into M3DasciiByDefault 2021-04-30 21:28:54 -07:00
contriteobserver e51bb1e77e fixed signed/unsigned mismatch warning 2021-04-30 21:26:57 -07:00
contriteobserver 694f4c2e34 Merge branch 'master' into M3DasciiByDefault 2021-04-30 21:12:48 -07:00
contriteobserver 302e47efc1
Merge branch 'master' into M3DasciiByDefault 2021-04-30 21:11:23 -07:00
contriteobserver af0aca796e now compiling M3D ASCII support by default
addresses issue  #3777
2021-04-30 21:07:01 -07:00
Jason C 07257f4c66
Merge branch 'master' into patch-4 2021-04-30 22:23:23 -04:00
Garux 55abc49d6d improve md3::Q3 shader::cull keyword support
only use nonstandard winding order with `cull back`; might be excess too, since engine doesn't support this
2021-04-30 22:59:05 +03:00
Garux 0b7ebef497 fix path separator in md3 shader loading 2021-04-30 22:51:21 +03:00
Kim Kulling 2d51efa002
Merge branch 'master' into patch-1 2021-04-30 21:14:26 +02:00
Kim Kulling 911321b97b
Merge pull request #3765 from krishty/md2-mdc-const
moved MD2/MDC tables from BSS to const data
2021-04-30 21:12:36 +02:00
Kim Kulling 2feda5b4b2
Merge branch 'master' into md2-mdc-const 2021-04-30 20:10:45 +02:00
Kim Kulling 9b36f62cb2
Merge pull request #3764 from krishty/empty-string-style
style fix - initializing and assigning empty std::string properly
2021-04-30 20:10:18 +02:00
Kim Kulling 60f030ccbc
Merge branch 'master' into empty-string-style 2021-04-30 19:50:38 +02:00
Kim Kulling 9ef84a67f7
Merge pull request #3846 from assimp/issue_3831_update_zip
closes https://github.com/assimp/assimp/issues/3831 : update zip
2021-04-30 18:00:55 +02:00
Kim Kulling feeb89a1dd closes https://github.com/assimp/assimp/issues/3831 : update zip 2021-04-30 16:49:15 +02:00
Garux 149224091f support missing closing brace in material list after Ascii Scene Exporter v2.51 2021-04-30 10:37:06 +03:00
Kim Kulling 57091d761e
Merge branch 'master' into md2-mdc-const 2021-04-30 00:56:50 +02:00
Kim Kulling 0b92abe9b4
Merge branch 'master' into empty-string-style 2021-04-30 00:54:57 +02:00
vfxgordon 5298ed8f9e
Merge branch 'master' into fbxBlendshapes 2021-04-29 15:21:16 -07:00
Kim Kulling 73e05ab6d3
Merge branch 'master' into add-step-extension 2021-04-30 00:13:32 +02:00
Garux edf12bd357 fix md2 orientation 2021-04-30 00:02:37 +03:00
Krishty 666b5eff76 added .step extension to IFC loader
The extension .step is at least as common as .stp, so both should be supported.
2021-04-29 21:29:10 +02:00
Garux 3717e66fae consider aiProcess_FlipWindingOrder in aiProcess_GenNormals & aiProcess_GenSmoothNormals 2021-04-29 20:52:06 +03:00
Garux 4798ff3882 fix hl1 mdl orientation, tex coords, face windings order 2021-04-29 20:50:50 +03:00
Garux ebf5ef9a4b consider pScene->mRootNode->mTransformation set by some importers while using AI_CONFIG_PP_PTV_ROOT_TRANSFORMATION 2021-04-29 20:43:37 +03:00
Garux db142da571 orient mdc correctly 2021-04-29 20:41:10 +03:00
Scott Baldric f523b1e0d7
Merge branch 'master' into SceneCombiner_Memory_Leaks 2021-04-29 08:52:51 -05:00
Jason C 975de81ab6
Merge branch 'master' into patch-4 2021-04-28 22:23:17 -04:00
Kim Kulling 96d0524fab
Merge pull request #3787 from ms-maxvollmer/ms-maxvollmer/importer_fixes
Importer improvements
2021-04-28 20:42:06 +02:00
Kim Kulling 41e5acf060
Merge branch 'master' into ms-maxvollmer/importer_fixes 2021-04-28 20:26:38 +02:00
Kim Kulling 7dd870f88c
Merge pull request #3833 from assimp/kimkulling-fix_debug_crash
Fix crash when reading 0 bytes
2021-04-28 20:26:30 +02:00
Kim Kulling 9a0b703db1
Merge branch 'master' into ms-maxvollmer/importer_fixes 2021-04-28 20:25:10 +02:00
Jason C cf498c979a
ASSIMP_ENABLE_DEV_IMPORTERS env var to control registration of wip importers; applied to X3D
- GetImporterInstanceList reads ASSIMP_ENABLE_DEV_IMPORTERS env var. Development importers are enabled if the env var is set and is not equal to the literal string "0".
- X3D importer will not be registered unless ASSIMP_ENABLE_DEV_IMPORTERS is set; addresses #3647.

TODO: If this change is incorporated, it should be documented.
NOTE: Effective git branch structure is a better solution. This is an alternate for #3825.
2021-04-28 11:16:49 -04:00
Kim Kulling 6abdd0cd3e
Fix crash when reading 0 bytes
- This is a valid option so crash shall not happen
2021-04-28 16:38:22 +02:00
Scott Baldric 8e3fe6b30b
Merge branch 'master' into SceneCombiner_Memory_Leaks 2021-04-28 09:16:02 -05:00
Krishty 260cc6bd26 reverted regression in 3DS transformation (issue #3802)
The regression was introduced to align 3DS export and import, but in fact it broke the transformation matrices on import. This commit reverts the relevant lines. Furthermore, matrix layout was double-checked with two other 3DS importers. Export was not considered.
2021-04-28 01:02:24 +02:00
Kim Kulling 74577ae3c7
Merge pull request #3822 from JC3/patch-2
Remove newline from name of Blender importer.
2021-04-27 22:08:06 +02:00
Kim Kulling 30f55dcbbf
Merge branch 'master' into patch-2 2021-04-27 20:30:06 +02:00
Kim Kulling 9504957534
Merge pull request #3821 from JC3/patch-1
Update aiProcess_PreTransformVertices docs to match behavior.
2021-04-27 20:29:21 +02:00
Jason C 3acd42c22e
Remove newline from name of Blender importer.
Addresses #3797.

Re-submitting this as a quick fix to the immediate issue while I think about the website field.
2021-04-26 20:27:28 -04:00
Jason C 708d124745
Update aiProcess_PreTransformVertices docs to match behavior.
Addresses #3820, the easy way.
2021-04-26 19:42:22 -04:00
Gordon Chapman 64da2a4315 Merge remote-tracking branch 'upstream/master' into fbxBlendshapes 2021-04-26 13:51:22 -07:00
Gordon Chapman a5d0e99548 Fixed error in blendShapeChannel Weighting 2021-04-26 12:19:20 -07:00
Max Vollmer (Microsoft Havok) e1d6e1f377
Merge branch 'master' into ms-maxvollmer/importer_fixes 2021-04-26 14:53:32 +01:00
Eric Wasylishen ee8d1b0417 SimpleTexturedDirectx11: embedded texture loading fixes
- remove assumption that embedded texture names start with "*0", etc.
- rename ModelLoader::getTextureFromModel() to loadEmbeddedTexture()
- support loading uncompressed embedded textures

Fixes display of bullsquid.mdl from Half-Life (which has an
embdedded texture named "bottommap.bmp")
2021-04-24 14:13:51 -06:00
Krishty 5c64a4dc1e devirtualized a function that is called once and never overridden 2021-04-24 18:33:57 +02:00
Krishty e6a47d93c2 removed dead code from 0d29203e24 2021-04-24 13:29:15 +02:00
Kim Kulling 7cd6ddad8a
Merge branch 'master' into fix-scale-msg 2021-04-24 12:44:42 +02:00
Krishty afe947d5db fixed malformatted message 2021-04-24 12:38:31 +02:00
Krishty 628cba9490 fixed warning 2021-04-24 00:44:50 +02:00
Krishty b00de10eb3 Simplified importer search and fixed a few bugs
The search for a matching importer had a few issues, see #3791. There were two different mechanisms to determine whether an importer accepts a specific file extension:
1. `aiImporterDesc::mFileExtensions`, which was forwarded to the UI via `BaseImporter::GetExtensionList()`.
2. `BaseImporter::CanRead()` when called with `checkSig == false`, which determines whether to actually use that importer.
Both were redundant and got out of sync repeatedly. I removed 2. completely and replaced it with 1., thereby syncing UI/import and shortening all `BaseImporter::CanRead()` implementations.

Further bugfixes:
- fixed glTF2 importer throwing exceptions when checking whether it can load a file
- removed `BaseImporter::SimpleExtensionCheck()` because it is no longer used and had a bug with case sensitivity

Since the `checkSig` parameter in `BaseImporter::CanRead()` is now useless, it can be removed completely. I’m not sure if this would break ABI compatiblity, so I’ll submit it with a later pull request.
2021-04-24 00:17:50 +02:00
Kim Kulling cd3e283bcb
Merge branch 'master' into kimkulling-patch-3 2021-04-23 18:03:40 +02:00
Scott Baldric 44834408c8
Merge branch 'master' into SceneCombiner_Memory_Leaks 2021-04-23 09:00:12 -05:00
Kim Kulling 21d7085be6
Merge pull request #3794 from assimp/kimkulling-patch-1
Update Readme.md
2021-04-23 15:30:30 +02:00
Kim Kulling 0b14eb7523
Fix formatter. 2021-04-23 15:30:12 +02:00
Krishty 9dc66b0003 removed dead code
BaseImporter::GetExtensionList() is not a virtual function; overriding it is useless. This probably stemmed from a misunderstanding.
2021-04-23 15:15:21 +02:00
Kim Kulling 4db4e7206d
Update Readme.md 2021-04-23 15:14:38 +02:00
Scott Baldric 359fcadd87
Merge branch 'master' into SceneCombiner_Memory_Leaks 2021-04-23 08:14:26 -05:00
Kim Kulling 574ea5acf9
Merge pull request #3793 from assimp/kimkulling-codacy_batch
Add Codacy Badge
2021-04-23 15:13:55 +02:00
Krishty 196deea7ce added missing file extensions to aiImporterDesc::mFileExtensions 2021-04-23 15:05:09 +02:00
Kim Kulling 31438a03a6
Add Codacy Badge
- Add assimp to codacy
- Add batch to readme
2021-04-23 14:52:31 +02:00
Scott Baldric 4b47b7a552
Merge branch 'master' into SceneCombiner_Memory_Leaks 2021-04-23 07:42:32 -05:00
Kim Kulling c8ad1cb078
Merge pull request #3763 from krishty/strip-useless-gltf-write
fixed glTF export stuff being pulled into the EXE even if building wi…
2021-04-22 21:34:24 +02:00
Scott Baldric aae3788247 Fix: Removing double delete of texture items.
Textures were being double deleted after a merge scene because the
texture array wasn't being properly deleted at the end of merging.
Furthermore, the texture array was being sized to the number of
materials instead of the number of textures.
2021-04-22 08:49:47 -05:00
Kim Kulling 8881e65d62
Merge branch 'master' into strip-useless-gltf-write 2021-04-22 09:55:00 +02:00
Max Vollmer (Microsoft Havok) 44dc08f128 Remove GLTF tag, postprocessing is format independent 2021-04-21 16:20:58 +01:00
Max Vollmer (Microsoft Havok) 746d5cf964 * Throw instead of assert on invalid file input
* Check JSON object type before accessing members
* Ensure samplers input and output references are set before accessing them
2021-04-21 16:17:03 +01:00
Kim Kulling 6027c10969
Merge pull request #3776 from krishty/fix-import-export-confusion
fixed export exceptions on import
2021-04-20 20:39:00 +02:00
Kim Kulling 873c6ffabe
Merge branch 'master' into fix-import-export-confusion 2021-04-19 21:08:52 +02:00
Krishty 55dd5faafb fixed export exceptions on import
Ogre and 3MF imports threw DeadlyExportErrors under some circumstances. Bad for people who assumed that they only needed to catch DeadlyImportErrors. Changed them to DeadlyImportErrors.
2021-04-19 19:33:41 +02:00
Tobias Rittig 0643786288
Add PBRT to exportable file formats list
As of #3580 assimp can export to the newest version of the PBRT renderer. This was not listed here.
2021-04-19 15:27:59 +02:00
Kim Kulling 0af558a11c
Merge pull request #3774 from krishty/version-string-fix
Version string fix (if anyone cares)
2021-04-19 13:20:26 +02:00
Krishty 930cc25c0e fixed version string test 2021-04-19 09:51:44 +02:00
Krishty 3fead344ad updated version string (if anyone cares) 2021-04-19 07:37:12 +02:00
Krishty a19299d501 moved MD2/MDC tables from BSS to const data
Visual C++ is unable to identify them as constant data during optimization, so explicitly declare them const.
2021-04-17 00:32:04 +02:00
Krishty f761dc72f4 style fix - initializing and assigning empty std::string properly
std::string s(""); s = ""; calls the copy constructor, which in turn calls strlen(), … assigning a default-constructed string generates fewer instructions and is therefore preferred.

With C++11 uniform initialization, you’d simply write s = { } instead.
2021-04-16 23:43:56 +02:00
Krishty 6cbeca5518 fixed glTF export stuff being pulled into the EXE even if building with ASSIMP_BUILD_NO_EXPORT
“LazyDictBase::WriteObjects()” in the two glTF implementations is only used for export. Since it’s a virtual method, and many compilers have trouble removing unreferenced virtual methods, glTF export stuff is pulled into the binary even if compiling without exports.

This commit removes said virtual function if only compiling for import.

This removes 75 KiB of useless code when compiled with Visual Studio for x64.
2021-04-16 20:44:40 +02:00
Kim Kulling cd42b9954b
Merge pull request #3757 from mahiuchun/tr1
Flip the check on _MSC_VER for using TR1 containers.
2021-04-14 13:03:51 +02:00
Kim Kulling 21b56b0058
Merge branch 'master' into tr1 2021-04-14 12:46:59 +02:00
Kim Kulling 83c0dce075
Merge branch 'master' into Q1MDLgroup 2021-04-14 10:48:26 +02:00
Kim Kulling c282b9a775
Merge pull request #3742 from Garux/patch-1
Fix MDC loader
2021-04-14 10:47:34 +02:00
Kim Kulling 0b61a8875a
Merge branch 'master' into patch-1 2021-04-14 10:22:42 +02:00
Kim Kulling bbfefd89d7
Merge pull request #3758 from assimp/kimkulling-update-assimp.net
Update repo for assimp-net
2021-04-14 09:37:20 +02:00
Kim Kulling bef2304c53
Update repo for assimp-net 2021-04-14 08:55:55 +02:00
Hill Ma 4aa52b3af8 Flip the check on _MSC_VER for using TR1 containers. 2021-04-13 11:15:52 -07:00
Kim Kulling 182418e818
Merge pull request #3755 from assimp/kimkulling-issue3754
Not resize empty vectors.
2021-04-12 23:31:06 +02:00
Kim Kulling a6e4672df1
Fix a typo. 2021-04-12 23:19:00 +02:00
Kim Kulling d1eeb80e1a
Not resize empty vectors.
closes https://github.com/assimp/assimp/issues/3754
2021-04-12 21:05:46 +02:00
Kim Kulling c9ba616eb6
Merge pull request #3708 from urschanselmann/master
Fix import of FBX files with last UV duplicated (caused by bug in FBX SDK 2019.0+)
2021-04-12 11:50:12 +02:00
Kim Kulling 263d450300
Merge branch 'master' into master 2021-04-12 09:35:03 +02:00
Kim Kulling 67fa0a13bc
Merge pull request #3749 from pcwalton/ms3d-fixes
Fix incorrect indices in the MilkShape 3D loader
2021-04-11 20:37:31 +02:00
Kim Kulling a3ee377af7
Merge branch 'master' into ms3d-fixes 2021-04-11 19:12:06 +02:00
Kim Kulling cf4ef04a80
Merge branch 'master' into master 2021-04-07 20:58:40 +02:00
Kim Kulling 6eae925441
Merge pull request #3695 from AllegorithmicSAS/feature/gltf_fb_ngon_encoding
[gltf2-exporter] Adding FB_ngon_encoding support
2021-04-07 20:52:05 +02:00
Clement JACOB e66232d8c3
Merge branch 'master' into feature/gltf_fb_ngon_encoding 2021-04-07 13:54:31 +02:00
Patrick Walton a44ba41413 Fix incorrect indices in the MilkShape 3D loader 2021-04-05 19:14:48 -07:00
Kim Kulling d51fce9e70
Merge pull request #3748 from assimp/kimkulling-issue_3747
Fix direct leak
2021-04-05 21:37:48 +02:00
Kim Kulling 7fee914776
Fix direct leak
closes https://github.com/assimp/assimp/issues/3747
2021-04-05 21:24:54 +02:00
Kim Kulling 4eb69d1e54
Merge pull request #3746 from BaldricS/rename_PI_to_avoid_macro_convention
Renaming PI to aiPi.
2021-04-05 18:40:27 +02:00
Scott Baldric 31e8042071 Renaming PI to aiPi. 2021-04-05 09:59:22 -05:00
Garux 856547be23 Fix Q1 MDL group frame loading, e.g. Q1 progs/flame2.mdl 2021-04-05 17:18:06 +03:00
Garux 437d7bf8b8
Fix MDC loader
placement new was clearing input buffer by constructor, which was nothing to do with adequate parsing
changes are not analyzed in depth, but at least test model and models of Wolf:ET are loading and not crashing
2021-04-05 16:39:41 +03:00
Kim Kulling 06a60c43cf
Merge pull request #3739 from assimp/kimkulling-patch-7
Update INSTALL
2021-04-04 20:46:43 +02:00
Kim Kulling 010c0853ea
Update INSTALL 2021-04-04 14:40:50 +02:00
Kim Kulling eb261c6581
Merge pull request #3718 from MalcolmTyrrell/MalcolmTyrrell/tangentCheck
Malcolm tyrrell/tangent check
2021-04-03 18:28:03 +02:00
Kim Kulling 22413d85ad
Merge branch 'master' into MalcolmTyrrell/tangentCheck 2021-04-03 17:42:44 +02:00
Kim Kulling cfad36d0f4
Merge pull request #3737 from assimp/615IO-ios-port-update
615 io ios port update
2021-04-03 17:41:07 +02:00
Kim Kulling 7d68eab4a7 Update license 2021-04-03 12:09:23 +02:00
Kim Kulling d677005487 Merge branch '615IO-ios-port-update' 2021-04-03 12:08:38 +02:00
Kim Kulling 0b628a0ebb Merge branch 'ios-port-update' of https://github.com/615IO/assimp into 615IO-ios-port-update 2021-04-03 12:04:03 +02:00
Kim Kulling 456af8c493
Merge pull request #3736 from assimp/issue_3678
Issue 3678
2021-04-03 11:23:17 +02:00
Kim Kulling 80fc8538be
Update AMFImporter_Material.cpp 2021-04-03 10:29:16 +02:00
Kim Kulling d62c89557b
Remove dead code 2021-04-03 10:28:19 +02:00
Kim Kulling 46e49d0b83
Update AMFImporter_Geometry.cpp 2021-04-03 10:27:54 +02:00
Kim Kulling cdb6a62cdb
Merge branch 'master' into issue_3678 2021-04-03 10:27:07 +02:00
Kim Kulling da0543972b Fix parsing for AMF-Files. 2021-04-03 10:25:03 +02:00
Kim Kulling 89a8f87dae AMF: Remove unused macros 2021-04-02 13:10:24 +02:00
Kim Kulling 91cb2947ac
Merge pull request #3723 from eliasdaler/master
Add zlibstatic to the list of exported targets
2021-04-01 21:05:58 +02:00
Clement JACOB a25ef8a329
Merge branch 'master' into feature/gltf_fb_ngon_encoding 2021-04-01 20:35:16 +02:00
Kim Kulling 18af013c9e
Merge branch 'master' into master 2021-04-01 20:02:53 +02:00
Kim Kulling 577a8fc186
Merge pull request #3728 from assimp/kimkulling-patch-4
Update FUNDING.yml
2021-04-01 19:23:51 +02:00
Kim Kulling 658ffe3d2c
Update FUNDING.yml
Only use OpenCollective.
2021-04-01 17:21:12 +02:00
Kim Kulling 20e3261304
Merge pull request #3727 from assimp/kimkulling-patch-4
Update Readme.md
2021-04-01 17:20:38 +02:00
Kim Kulling 60794f3743
Update Readme.md 2021-04-01 17:07:35 +02:00
Clement JACOB 5d09105a49
Update mesh.h
Fixing ngon encoding flag value
2021-03-30 20:24:03 +02:00
Clement Jacob fc2c12ad6a Fixing encoding when lines and points are encountered 2021-03-30 09:58:28 +02:00
Clement Jacob fc0cf2ea8d NGON encoding triangles only 2021-03-30 09:19:50 +02:00
Clement Jacob 2e90fed527 Refactoring and fixing remaining issues in triangulation process 2021-03-30 09:10:50 +02:00
Clement Jacob 596001c89c Refactoring the extension 2021-03-30 09:10:50 +02:00
Clement Jacob 81019d5e58 Fixing quad encoding 2021-03-30 09:10:50 +02:00
Clement Jacob 6d1a0c6054 Adding quad proper handling 2021-03-30 09:10:50 +02:00
Clement Jacob 8e589221d7 [gltf2-exporter] Adding FB_ngon_encoding support 2021-03-30 09:10:50 +02:00
Kim Kulling 3880cd225c
Merge pull request #3721 from vfxgordon/fbxBlendshapes
Added Blendshape Support to FBX Export
2021-03-29 22:31:37 +02:00
Kim Kulling f61a41bdd9
Merge branch 'master' into fbxBlendshapes 2021-03-29 21:48:51 +02:00
Kim Kulling b5d4e50895
Merge pull request #3724 from bekraft/3ds-import-fix
Fixing 3DS import for CHUNK_TRMATRIX translation vector.
2021-03-29 20:34:55 +02:00
Bernold Kraft 09d3266250 Fixing 3DS import for CHUNK_TRMATRIX translation vector. 2021-03-29 15:31:08 +02:00
Elias Daler 0bd938c024 Add zlibstatic to the list of exported targets 2021-03-29 02:26:03 +03:00
urschanselmann 5755530bab
Merge branch 'master' into master 2021-03-28 17:40:17 +02:00
Kim Kulling e5862c18be
Merge branch 'master' into fbxBlendshapes 2021-03-28 13:02:35 +02:00
Kim Kulling b7df376836
Merge pull request #3722 from bekraft/bekraft/3ds-export-fix
Fixing CHUNK_TRMATRIX translation sub chunk
2021-03-27 19:53:38 +01:00
Bernold Kraft 348c34811f Fixing CHUNK_TRMATRIX translation sub chunk
and therefore omitting the transform aggregation in the CHUNK_VERTLIST.
2021-03-26 22:21:45 +01:00
Gordon Chapman 3fd865b4bf Added Blendshape Support to FBX Export 2021-03-24 18:10:03 -07:00
Malcolm Tyrrell d94ddd32b1 Extra check. Better logging. 2021-03-24 11:04:39 +00:00
Malcolm Tyrrell add165c4a1 Check target sizes to avoid reading beyond allocation 2021-03-24 10:55:40 +00:00
Kim Kulling d1ef28fa52
Merge pull request #3716 from assimp/kimkulling-issue_2063
Provide a dockerfile
2021-03-22 09:12:52 +01:00
Kim Kulling 2c5fd39176
Provide a dockerfile
closes https://github.com/assimp/assimp/issues/1063:
2021-03-22 08:55:21 +01:00
urschanselmann 0a1efe5d58
Merge branch 'master' into master 2021-03-21 17:19:43 +01:00
Kim Kulling 525213a045
Merge pull request #3707 from MalcolmTyrrell/MalcolmTyrrell/gltfCrashes
Fix a set of glTF2 crashes on bad input
2021-03-21 12:14:37 +01:00
urschanselmann 86c05a1154
Merge branch 'master' into master 2021-03-19 18:15:15 +01:00
Kim Kulling 5f652feb75
Merge branch 'master' into MalcolmTyrrell/gltfCrashes 2021-03-19 13:35:13 +01:00
Kim Kulling 608b48e1fc
Merge pull request #3696 from jaefunk/export_with_rotation
export with rotation
2021-03-19 12:34:51 +01:00
Kim Kulling 18886686e1
Merge branch 'master' into export_with_rotation 2021-03-19 08:21:36 +01:00
Alexander Gessler 191fcafcc0
Merge pull request #3709 from mahiuchun/erase
Fix a memory leak in glTF2.
2021-03-18 21:42:54 +01:00
Hill Ma 3e99385f44 Fix a memory leak in glTF2.
The destructor of LazyDict uses `delete` but `delete` was not used for objects removed by LazyDict::Remove.
2021-03-17 15:12:54 -07:00
Urs Hanselmann d9cd07f0d9 Merge branch 'master' of https://github.com/assimp/assimp 2021-03-17 18:26:11 +01:00
Malcolm Tyrrell 3503252e12 Strict check for accessor "count" 2021-03-16 11:47:19 +00:00
Malcolm Tyrrell e4983aa16e Fix code issue 2021-03-15 16:46:41 +00:00
Malcolm Tyrrell 8d86bcf0fb Also check member 2021-03-15 16:32:17 +00:00
Malcolm Tyrrell 57652a9084 Version is strictly a string 2021-03-15 16:27:50 +00:00
Malcolm Tyrrell 053c0f5e0a Catch type errors in gltf and try to print out useful context. 2021-03-15 13:06:11 +00:00
jaefunk a812fd1a0a can modify the rotation of the model when exporting. 2021-03-15 10:23:17 +09:00
jaefunk 37c2d33cc9
Merge branch 'master' into export_with_rotation 2021-03-14 15:32:46 +09:00
Kim Kulling 0dbaeb57e3
Merge pull request #3697 from jaefunk/change_file_encoding
change file encoding
2021-03-13 19:11:06 +01:00
Kim Kulling e5417ea41f
Merge branch 'master' into change_file_encoding 2021-03-13 18:45:58 +01:00
Kim Kulling 9058692d16
Merge pull request #3691 from Paul-Austria/master
Update crypt.c
2021-03-13 11:35:29 +01:00
Kim Kulling f5dd8db45f
Merge branch 'master' into master 2021-03-12 16:06:22 +01:00
Kim Kulling 20350ba5cb
Merge pull request #3689 from AndyShawQt/msvc2019fix
Compile fix for MSVC 2019
2021-03-12 16:05:59 +01:00
Kim Kulling f5ed217409
Merge branch 'master' into msvc2019fix 2021-03-12 15:49:41 +01:00
Kim Kulling 383dfae79b
Merge pull request #3688 from gongminmin/FixClangCL
Fix compiling issues in clang-cl
2021-03-12 15:49:11 +01:00
Kim Kulling 84cd1d95c7
Merge branch 'master' into FixClangCL 2021-03-12 15:26:49 +01:00
Urs Hanselmann c0c7e6a0de trim uvIndices to fix import of Cheetah3D generated fbx files 2021-03-12 14:48:38 +01:00
Urs Hanselmann cc7e229c3c disable size check 2021-03-12 08:55:11 +01:00
jaefunk 16f10a0533 remove debug log 2021-03-12 10:27:33 +09:00
Kim Kulling 47d36cdb97
Merge pull request #3661 from xiaohunqupo/master
Fix Step Expoter Error.
2021-03-11 17:31:11 +01:00
Kim Kulling 51ad88afb6
Merge branch 'master' into master 2021-03-10 20:35:37 +01:00
Kim Kulling cdd0fea6e8
Merge pull request #3694 from assimp/issue_3678
closes https://github.com/assimp/assimp/issues/3678: ensure lowercase
2021-03-10 20:35:16 +01:00
Kim Kulling 806b12dc8b
Merge branch 'master' into issue_3678 2021-03-10 19:51:04 +01:00
Kim Kulling 520f64eeec Fix missing trimming 2021-03-10 19:40:35 +01:00
Kim Kulling 732e9386aa
Merge branch 'master' into master 2021-03-10 11:49:13 +01:00
jaefunk 5c11ca6c8a
Merge branch 'master' into export_with_rotation 2021-03-10 18:25:09 +09:00
ethan b6dced4b11 export with rotation 2021-03-10 18:06:42 +09:00
Kim Kulling 6c89631581 closes https://github.com/assimp/assimp/issues/3678: ensure lowercase 2021-03-09 21:08:28 +01:00
Kim Kulling ed968367d5
Merge pull request #3687 from contriteobserver/NameManglingFix
applied extern "C" guards to importerdesc.h
2021-03-09 18:26:22 +01:00
jaefunk e53335e58c change file encoding 2021-03-09 18:31:15 +09:00
Kim Kulling 8a89ffa7a5
Merge branch 'master' into NameManglingFix 2021-03-09 00:01:23 +01:00
Matthew Wallace 0ebab47ca2 updated MIN_IOS_VERSION to 10.0 2021-03-08 07:11:39 -06:00
Paul Engelhardt dffaeade94
Update crypt.c 2021-03-08 09:04:22 +01:00
Kim Kulling 75144dd7fd
Merge pull request #3667 from thomasbiang/sparse_minmax
Export Min/Max for Sparse Accessor
2021-03-04 21:42:10 +01:00
Andy Shaw 2576c8c3a6 Compile fix for MSVC 2019
Small is seen as a type with some options so this fixes the errors starting with:

code\PostProcessing\ComputeUVMappingProcess.cpp(125): error C2632: 'int' followed by 'char' is illegal
2021-03-04 08:04:19 +01:00
Minmin Gong c6c0f141f1 Fix compiling issues in clang-cl 2021-03-03 22:30:36 -08:00
contriteobserver fc955a5f8a applied extern "C" guards to importerdesc.h
addresses #3685
2021-03-03 12:23:26 -08:00
Kim Kulling ff769ecce2
Merge branch 'master' into sparse_minmax 2021-03-02 12:30:01 +01:00
Kim Kulling e09e4ab670
Merge pull request #3683 from contriteobserver/PrecisionFix
workaround for ASSIMP_DOUBLE_PRECISION compile errors
2021-03-02 12:29:08 +01:00
Kim Kulling 75210576cf
Merge branch 'master' into sparse_minmax 2021-03-01 21:34:24 +01:00
contriteobserver 6ab2e8d558 simplified the getRealAttribute implementation 2021-02-28 15:13:01 -08:00
contriteobserver 111752cff0 workaround for ASSIMP_DOUBLE_PRECISION compile errors
changed float types to ai_real types as needed

addresses issue #3682
2021-02-28 14:45:39 -08:00
Kim Kulling 315362862a
Merge pull request #3660 from ademets/android_jniiosystem_cmake_patch
CMake fix for Android build with enabled JNI io system
2021-02-28 17:10:56 +01:00
Kim Kulling 20ef096db6
Merge branch 'master' into android_jniiosystem_cmake_patch 2021-02-28 13:33:02 +01:00
Kim Kulling ff057dbcb2
Merge pull request #3681 from assimp/update_copyrights
Update copyrights to 2021.
2021-02-28 13:32:49 +01:00
Kim Kulling c669c8f1eb
Merge branch 'master' into update_copyrights 2021-02-28 12:18:41 +01:00
Kim Kulling 9e8dbd0ca5 Update copyrights to 2021. 2021-02-28 12:17:54 +01:00
Kim Kulling 9336341eac
Merge pull request #3680 from assimp/kimkulling-draco_disabled
Workaround for VS2019
2021-02-27 11:05:54 +01:00
Kim Kulling 21c2f8bc9c
Workaround for VS2019
- DRACO is disabled as the default
- Use ASSIMP_BUILD_DRACO=ON to reenable it
- Workaround for https://github.com/assimp/assimp/issues/3663
2021-02-27 10:01:09 +01:00
Kim Kulling 143d134cd7
Merge branch 'master' into android_jniiosystem_cmake_patch 2021-02-26 08:34:23 +01:00
Kim Kulling 05ee5432f6
Merge pull request #3670 from ms-maxvollmer/user/mavollme/GLTF2_CheckNormalCount
Check that normal count and tangent count match vertex count.
2021-02-25 22:18:07 +01:00
Kim Kulling 5b78e3fb5d
Merge branch 'master' into user/mavollme/GLTF2_CheckNormalCount 2021-02-25 21:29:03 +01:00
Kim Kulling 861829a04b
Merge pull request #3674 from assimp/kimkulling-issue_3664
Remove buggy assert
2021-02-25 14:21:12 +01:00
Kim Kulling aa6f983920
Remove buggy assert
- Remove assertion test for empty nodestacks when no meshes are in the node. Just return from the function.
- closes https://github.com/assimp/assimp/issues/3664
2021-02-25 14:01:18 +01:00
Turo Lamminen 2bac0a6989
Merge pull request #3665 from turol/fix-warning
Silence uninitialized variable warning in 3MF importer
2021-02-25 11:09:37 +02:00
Max Vollmer (Microsoft Havok) eef03c1f17 Improved warnings 2021-02-24 14:28:18 +00:00
Max Vollmer (Microsoft Havok) facb7da701 Check that normal count and tangent count matches vertex count. Ignore data and warn if counts don't match. 2021-02-24 14:19:29 +00:00
Turo Lamminen 3e1c785d31 [3MF] Silence uninitialized variable warning
This is a false positive but the compiler can't see it
2021-02-24 10:59:59 +02:00
thomasbiang 5429475339
Merge branch 'master' into sparse_minmax 2021-02-23 12:30:53 -08:00
ywang 72efb4354a Merge branch 'master' of https://github.com/thomasbiang/assimp into sparse_minmax 2021-02-23 12:12:36 -08:00
Kim Kulling 3c79b12e02
Merge pull request #3659 from gongminmin/FixAnimName
Export the animation name to gltf2
2021-02-23 20:39:16 +01:00
Kim Kulling 247fd0ce17
Merge branch 'master' into FixAnimName 2021-02-22 20:38:16 +01:00
Kim Kulling d40f0390e3
Merge pull request #3650 from lgmcode/master
Eliminate MSVC warning C4819 caused by source files encoded in UTF-8 without BOM
2021-02-22 20:30:41 +01:00
Kim Kulling 616d924d29
Merge branch 'master' into master 2021-02-20 19:35:31 +01:00
Kim Kulling 26ebeaea5c
Merge pull request #3620 from gongminmin/ExportZLib
Export zlib if it's built outside
2021-02-19 18:32:37 +01:00
Kim Kulling 3651dd5bbc
Merge branch 'master' into ExportZLib 2021-02-19 15:51:21 +01:00
Kim Kulling 80423ff5f0
Merge pull request #3614 from RichardTea/issue_2195_draco
Implement import of Draco-encoded glTFv2 models
2021-02-19 12:13:56 +01:00
Kim Kulling 6094da3493
Update glTF2Asset.inl 2021-02-18 09:32:37 +01:00
Kim Kulling cdf786d171
Merge branch 'master' into issue_2195_draco 2021-02-18 09:19:38 +01:00
Alex 2fd6666477 Update CMakeLists.txt
Add android_jniiosystem to export set, for cmake to find and link with
2021-02-17 23:16:22 -08:00
Kim Kulling 1d376fa91f
Merge pull request #3653 from jkvargas/master
Rust bindings
2021-02-17 19:00:31 +01:00
Minmin Gong d57b78bc98 Export the animation name to gltf2 2021-02-16 20:22:08 -08:00
Jhonny Knaak de Vargas 6130e53cdf Adding rust port to documentation 2021-02-15 21:05:36 +00:00
RichardTea f1d225c18d
Merge branch 'master' into issue_2195_draco 2021-02-15 18:05:22 +00:00
Kim Kulling 7be65aead7
Merge pull request #3634 from contriteobserver/BundledAndroid
Implements access to files bundled with Android Applications
2021-02-15 14:01:54 +01:00
Kim Kulling 242e9c21a9
Update BundledAssetIOSystem.cpp 2021-02-15 13:44:07 +01:00
Kim Kulling dac7243b94
Update BundledAssetIOSystem.h 2021-02-15 13:43:39 +01:00
Kim Kulling 5f1f2a65ce
Merge branch 'master' into BundledAndroid 2021-02-15 13:43:20 +01:00
Kim Kulling 1279862e31
Merge pull request #3652 from assimp/kimkulling-issue_3645
Fix apha value
2021-02-15 12:12:38 +01:00
Kim Kulling 047b45d172
Fix apha value
- The alpha value in materials using the Tr format must be inverted
- closes https://github.com/assimp/assimp/issues/3645
2021-02-15 11:51:20 +01:00
Kim Kulling 607d474400
Merge pull request #3649 from assimp/kimkulling-patch-2
Update defs.h
2021-02-15 11:45:17 +01:00
Guangmo Lin ba7f945f99 Eliminate MSVC warning C4819 caused by source files encoded in UTF-8 without BOM 2021-02-14 10:28:14 +08:00
Kim Kulling 52c66406fa
Update defs.h 2021-02-12 20:59:45 +01:00
Kim Kulling 8a3a727865
Merge pull request #3644 from lgmcode/master
Eliminate maybe-uninitialized warnings which are treated as errors
2021-02-12 13:04:19 +01:00
Kim Kulling 426c1a340f
Merge branch 'master' into issue_2195_draco 2021-02-10 15:28:39 +01:00
Guangmo Lin 2d4bc2d04e Eliminate maybe-uninitialized warnings which are treated as errors when use -DCMAKE_BUILD_TYPE=Release 2021-02-09 14:10:44 +08:00
Kim Kulling 2cb0304e71
Merge pull request #3619 from contriteobserver/ColladaAnimationFix
Collada importer now identifies animations
2021-02-08 23:50:51 +01:00
Kim Kulling c9ca921d09
Merge branch 'master' into ColladaAnimationFix 2021-02-08 20:46:18 +01:00
Kim Kulling 888415246e
Merge branch 'master' into issue_2195_draco 2021-02-08 11:52:54 +01:00
Kim Kulling c50517d8df
Merge pull request #3643 from Gargaj/patch-2
fix compile warning-turned-error on x86
2021-02-08 09:16:23 +01:00
Gargaj 8ae8b165ca
fix compile warning-turned-error on x86 2021-02-08 00:37:06 +01:00
Kim Kulling cb15a0d8b0
Merge branch 'master' into ColladaAnimationFix 2021-02-07 17:45:10 +01:00
Kim Kulling be518e50e9
Merge pull request #3636 from thomasbiang/master
fix issue: 3482: invalid gltf2 properties
2021-02-06 22:38:30 +01:00
Kim Kulling 6c3593eda0
Merge branch 'master' into master 2021-02-06 09:54:51 +01:00
Kim Kulling afbe8fb436
Merge pull request #3642 from assimp/fix_gcc_compiler_warning
Fix compiler warning: warning: argument to ... call is the same expre…
2021-02-06 09:53:22 +01:00
Kim Kulling 6b7b1caa06
Merge branch 'master' into fix_gcc_compiler_warning 2021-02-05 21:59:21 +01:00
Kim Kulling b67ea99dc8
Merge pull request #3635 from assimp/issue_3564
Fix incorrect xml-parsing in collada importer.
2021-02-05 21:58:07 +01:00
Kim Kulling 6f759474bc Merge branch 'issue_3564' of https://github.com/assimp/assimp into issue_3564 2021-02-05 21:45:53 +01:00
Kim Kulling 710f1d17d4 RapidJSon: Upgrade to latest greatest 2021-02-05 21:45:37 +01:00
Kim Kulling 0e941c2478
Merge branch 'master' into issue_3564 2021-02-05 20:45:18 +01:00
Kim Kulling ca823318c3 Merge branch 'issue_3564' of https://github.com/assimp/assimp into issue_3564 2021-02-05 20:44:54 +01:00
Kim Kulling 6784427287 Workaround: disable test which cause undefined behaviour. 2021-02-05 20:44:39 +01:00
kimkulling 4207c97c17 Fix compiler warning: warning: argument to ... call is the same expression as the source 2021-02-05 20:01:57 +01:00
Kim Kulling c749591c72
Merge branch 'master' into ColladaAnimationFix 2021-02-05 15:52:50 +01:00
Kim Kulling 80e7f2a513
Merge branch 'master' into master 2021-02-05 12:30:24 +01:00
Kim Kulling 5cf5ca4a16
Merge pull request #3625 from contriteobserver/SignCompareFix
cleaned up sign-compare unittest build warnings
2021-02-05 12:28:46 +01:00
ywang 9bab475302 export min max for sparse accessor 2021-02-03 15:05:58 -08:00
Kim Kulling bb21ec9423
trigger build 2021-02-03 21:17:57 +01:00
Kim Kulling 2391432523 fix overflow 2021-02-03 21:07:28 +01:00
Kim Kulling e6b8ae44cb Fix unittests: skip newline at begin of matrix token. 2021-02-03 20:54:48 +01:00
RichardTea 42d47c7f0b Fixup install rules
Explicitly build and install the draco shared library _only_
2021-02-03 11:38:20 +00:00
xiaohunqupo c43a1ed886
Fix Step Expoter Error.
Fix Step Expoter Error.
2021-02-03 16:26:02 +08:00
xiaohunqupo 688c259584
Merge pull request #2 from assimp/master
Merge From assimp/assimp master
2021-02-03 16:23:45 +08:00
thomasbiang d08acb85e7
Merge branch 'master' into master 2021-02-02 14:48:41 -08:00
Kim Kulling faf53b8e0f Fix broken autocorrect fix 2021-02-02 23:33:02 +01:00
Kim Kulling 6ee1a32fb2 fix compile issue: replace std::make_unique 2021-02-02 22:54:20 +01:00
Kim Kulling 50fd5127ef Some review findings. 2021-02-02 22:34:30 +01:00
ywang 793bd44cee fix issue: 3482: invalid gltf2 properties 2021-02-02 13:19:57 -08:00
Kim Kulling fa2354ebc3 Fix incorrect xml-parsing in collada importer. 2021-02-02 22:06:33 +01:00
contriteobserver 74b70cad79 fixed a typo 2021-02-01 23:44:57 -08:00
contriteobserver 800d5c23c3 implements a DefaultIOSystem that provides access to files bundled with Android Applications
addresses issue  #3633
2021-02-01 23:33:55 -08:00
contriteobserver 65bc86e181
Merge branch 'master' into ColladaAnimationFix 2021-02-01 16:58:01 -08:00
RichardTea aa10b56bc2 Fix draco linking for Hunter/Normal 2021-02-01 14:29:24 +00:00
RichardTea b45723c384 Update JesseTG/rm to 1.0.2
Looks to be the current release
2021-02-01 13:24:27 +00:00
RichardTea 82773c29ad
Merge pull request #22 from rbsheth/issue_2195_hunter
Try adding Draco support through Hunter
2021-02-01 12:14:53 +00:00
Kim Kulling 5fbbba2fac
Merge branch 'master' into issue_2195_draco 2021-01-31 16:02:57 +01:00
contriteobserver 5a8e00b219
Merge branch 'master' into SignCompareFix 2021-01-30 16:57:22 -08:00
contriteobserver c86dcbe1a8 cleaned up sign-compare unittest build warnings
addresses issue #3624
2021-01-30 16:49:32 -08:00
Kim Kulling 754b2ba434
Merge pull request #3607 from contriteobserver/ColladaSubmeshFix
ColladaLoader now assigns individual material indices to submeshes as needed
2021-01-30 08:19:13 +01:00
Minmin Gong 9aa6ec73ba Export zlib if it's built outside 2021-01-29 20:51:09 -08:00
Rahul Sheth a0116c6e01 Need to link against correct target 2021-01-29 17:22:16 -05:00
Rahul Sheth 62c991290b Try adding Draco support through Hunter 2021-01-29 17:10:38 -05:00
Kim Kulling f2543ee608
Merge branch 'master' into ColladaSubmeshFix 2021-01-29 22:11:07 +01:00
Kim Kulling d87d9f2094
Merge pull request #3604 from bsekura/develop
Changed morph anim error to warning when validating
2021-01-29 22:10:34 +01:00
Kim Kulling de827b2fec
Merge branch 'master' into develop 2021-01-29 21:46:42 +01:00
Kim Kulling 65f3569d61
Merge pull request #3623 from assimp/update_cmake_min_req
Update all minimum cmake req to 3.10
2021-01-29 21:40:22 +01:00
Kim Kulling 79eb9ecc86 Update all minimum cmake req to 3.10 2021-01-29 21:05:46 +01:00
Kim Kulling 2e3d72abd3
Merge pull request #3622 from assimp/metadata_leak
Fixes a mem leak in aiMetadata::Set
2021-01-29 20:48:03 +01:00
Kim Kulling 79a442f95d Fixes a mem leak in aiMetadata::Set 2021-01-29 20:25:02 +01:00
Kim Kulling db8e9eb556
Merge branch 'master' into develop 2021-01-29 19:20:38 +01:00
Kim Kulling 3174a9cac8
Merge pull request #3598 from thomasbiang/master
GLTF2: Allow Export Node in TRS format
2021-01-29 19:20:10 +01:00
Kim Kulling 8d4b816dfe
Merge branch 'master' into master 2021-01-29 18:16:04 +01:00
Kim Kulling 1afc4c045e
Merge pull request #3608 from villevoutilainen/master
GCC 11 build fixes
2021-01-29 11:32:53 +01:00
contriteobserver e33b69a428 Collada importer now identifies animations
addresses issue #3584
2021-01-28 13:06:02 -08:00
Kim Kulling 706d636c63
Merge branch 'master' into master 2021-01-28 18:25:39 +01:00
RichardTea efae3b83b1 Draco requires default visibility on gcc/clang 2021-01-28 10:18:12 +00:00
RichardTea 48bcbbefdd use nullptr and float constants 2021-01-27 10:56:57 +00:00
RichardTea 150514fc8b Move draco warning suppression
Should be around the include for portability, not template instantiation
Fix clang pragma typos
2021-01-27 10:42:28 +00:00
RichardTea 5e7281dac6
Merge branch 'master' into issue_2195_draco 2021-01-27 10:26:16 +00:00
RichardTea 26ce6ba4f6 draco unit test when draco disabled
Should not load the draco file
2021-01-27 10:25:56 +00:00
RichardTea f6862f9697 Disable draco on cmake prior to 3.12 2021-01-27 10:18:33 +00:00
RichardTea 6ec32b6b78 Apply clangformat 2021-01-27 09:55:03 +00:00
RichardTea c6fd1ce996 glTF2 Minor cleanup 2021-01-27 09:42:49 +00:00
RichardTea 5b9d06c2fc Disable draco clang/gcc warnings via pragma
draco templated functions also throw warnings
2021-01-27 09:19:35 +00:00
Kim Kulling b2af2b2137
Merge pull request #3616 from assimp/kimkulling-issue_3572
Fix compiler bug for VS2019
2021-01-27 09:59:56 +01:00
Kim Kulling 1e38f84c3a
fix typo 2021-01-27 09:40:19 +01:00
Kim Kulling ac0f1f2cab
Update FBXMaterial.cpp 2021-01-27 09:37:35 +01:00
Kim Kulling c02ad323a5
Fix VS compiler warning: convertig int to char 2021-01-27 09:22:59 +01:00
thomasbiang 4ed9f3c2f4
Merge branch 'master' into master 2021-01-26 13:55:40 -08:00
Kim Kulling 4471c36c08
Fix compiler bug for VS2019
- Check https://developercommunity.visualstudio.com/content/problem/1223143/visual-studio-2019-c-program-crash-with-stdstring.html for more details
- closes https://github.com/assimp/assimp/issues/3572
2021-01-26 20:59:21 +01:00
Kim Kulling 83d4227e5c
Merge pull request #3597 from RichardTea/issue_3573
Increase float and double string export precision
2021-01-26 20:41:57 +01:00
Kim Kulling 1950247329
Merge branch 'master' into issue_3573 2021-01-26 19:38:18 +01:00
RichardTea 0c49cddae6 Cleanup cmakelists
Don't repeat self
Add links to google draco issues
2021-01-26 18:11:05 +00:00
RichardTea 88001d1609 Disable clang/gcc warnings for Draco 2021-01-26 17:58:00 +00:00
Kim Kulling 2cd6cd603c
Merge pull request #3615 from assimp/kimkulling-funding_update
Replace patreon by opencollective
2021-01-26 18:51:29 +01:00
RichardTea d79e0c0ba9 Avoid std::make_unique
Assimp is still C++11
2021-01-26 17:33:10 +00:00
Kim Kulling c12f747bde
Merge branch 'master' into kimkulling-funding_update 2021-01-26 18:25:07 +01:00
Kim Kulling b6b061b21a
Merge pull request #3610 from assimp/kimkulling-remove_appveyor
Delete appveyor.yml
2021-01-26 18:24:47 +01:00
RichardTea fe97ff6474 Draco platform libraries have different names
On Windows it's draco.dll/lib
On Linux/macOS draco_shared.dylib & draco_static.lib
2021-01-26 17:19:41 +00:00
Kim Kulling 95fe3e98a6
Merge branch 'master' into kimkulling-remove_appveyor 2021-01-26 18:09:43 +01:00
Kim Kulling 0244aec0a5
Update Readme.md 2021-01-26 18:09:25 +01:00
Kim Kulling d04b1b9e2e
Replace patreon by opencollective 2021-01-26 18:08:20 +01:00
RichardTea c917e6513f
Merge branch 'master' into issue_2195_draco 2021-01-26 16:43:46 +00:00
RichardTea f39ba8ddb2 Add compile error for bad error draco config
KHR_draco_mesh_compression requires
DRACO_MESH_COMPRESSION_SUPPORTED
2021-01-26 16:24:18 +00:00
RichardTea dde7605158 Implement draco decoding 2021-01-26 16:08:12 +00:00
RichardTea 3a7d0f5656 Add Draco to cmakelists
Initial pass. Not yet used.
Add Draco library to assimp build and link
2021-01-26 15:58:14 +00:00
contriteobserver d7bf513250 renaming iterator to avoid any possibility of scop collisions 2021-01-26 01:36:12 -08:00
contriteobserver 69fc809307 size_t is not the same as unsigned int on some systems 2021-01-26 01:01:59 -08:00
contriteobserver f92a34e0b7 Merge branch 'master' into ColladaSubmeshFix 2021-01-26 00:38:37 -08:00
Kim Kulling 4017a6da26
Merge branch 'master' into issue_3573 2021-01-25 20:48:31 +01:00
xiaohunqupo fbc45fecec
Merge pull request #1 from assimp/master
Merge From assimp/assimp master
2021-01-25 14:12:28 +08:00
Kim Kulling 294d4230b0
Merge pull request #3612 from assimp/kimkulling-issue_3601
Add missing skip
2021-01-24 18:59:03 +01:00
Kim Kulling 243d017463
Add missing skip
- closes https://github.com/assimp/assimp/issues/3601
- Fix some format issues
2021-01-24 18:47:50 +01:00
Kim Kulling 47dd6c0786
Merge pull request #3611 from assimp/kimkulling-issue_3599
Fix typo in collada parser
2021-01-24 18:37:16 +01:00
Kim Kulling a2b889ab09
Fix typo in collada parser
closes https://github.com/assimp/assimp/issues/3599
2021-01-24 18:21:46 +01:00
Kim Kulling e18261953d
Delete mtime_cache 2021-01-24 18:14:43 +01:00
Kim Kulling 7a706be920
Delete cacheglobs.txt 2021-01-24 18:14:36 +01:00
Kim Kulling dd0facd722
Delete appveyor.yml 2021-01-24 18:14:00 +01:00
contriteobserver b48e19c28f Merge branch 'master' into ColladaSubmeshFix 2021-01-24 02:30:31 -08:00
Ville Voutilainen ec141a94c3
Merge branch 'master' into master 2021-01-24 11:22:24 +02:00
Kim Kulling 9dc95be939
Merge pull request #3596 from RichardTea/vs_gitignore_update
Update gitignore for default VS2019 behaviour
2021-01-24 10:07:08 +01:00
Ville Voutilainen 6ebae5e67c GCC 11 build fixes 2021-01-24 11:04:46 +02:00
Kim Kulling 5390e035d5
Merge branch 'master' into vs_gitignore_update 2021-01-24 09:47:12 +01:00
contriteobserver 338abded12 ColladaLoader now assigns individual materials to submeshes as needed
Optional assignment of individual materials to submeshes, addresses #3606
2021-01-23 02:20:58 -08:00
Bart Sekura 5f50e42535 added missing return 2021-01-23 09:56:35 +09:00
Bart Sekura f8c512acd7 changed morph anim error to warning when validating 2021-01-23 09:52:46 +09:00
thomasbiang 91dc904ed1
Merge branch 'master' into master 2021-01-22 13:25:31 -08:00
Kim Kulling 28c9bccbef
Merge pull request #3603 from assimp/kimkulling-remove_redundancy
Remove redundant statement in if
2021-01-22 14:36:59 +01:00
Kim Kulling e792455d66
Remove redundant statement in if
- closes https://github.com/assimp/assimp/issues/3180
2021-01-22 14:22:34 +01:00
Kim Kulling e321367dae
Merge pull request #3602 from assimp/kimkulling-issue3151
Update 3DSLoader.cpp
2021-01-22 14:18:20 +01:00
Kim Kulling dc4514de82
Update COBLoader.cpp
Fix cppcheck finding
2021-01-22 13:23:39 +01:00
Kim Kulling 0dcd72d420
Update IFCOpenings.cpp 2021-01-22 13:18:43 +01:00
Kim Kulling f44572157a
Update 3DSLoader.cpp 2021-01-22 13:14:59 +01:00
Kim Kulling 6293c22c5c
Merge branch 'master' into vs_gitignore_update 2021-01-22 12:59:42 +01:00
Kim Kulling c9c54822fd
Merge pull request #3594 from xiaohunqupo/master
Fix STL Expoter error.
2021-01-22 12:59:18 +01:00
Kim Kulling f2d3f0dbe6
Merge branch 'master' into master 2021-01-22 12:35:44 +01:00
Kim Kulling 71e8c1001e
Merge pull request #3582 from makitsune/fix-gltf-vertex-colors
Fix glTF vertex colors with types other than float
2021-01-22 09:51:37 +01:00
Kim Kulling e435a43e53
Merge branch 'master' into fix-gltf-vertex-colors 2021-01-22 08:04:04 +01:00
Kim Kulling b64f1c40f4
Merge pull request #3600 from assimp/kimkulling-doc
Update Build.md
2021-01-22 07:59:18 +01:00
thomasbiang b3a35364ad
Merge branch 'master' into master 2021-01-21 13:38:21 -08:00
Kim Kulling 345726f5c8
Update Build.md 2021-01-21 20:56:21 +01:00
Kim Kulling 2bcf08370d
Merge branch 'master' into fix-gltf-vertex-colors 2021-01-21 11:54:02 +01:00
Kim Kulling 5e21b9f72d
Merge pull request #3580 from mmp/tdb/pbrt3_exporter
pbrt-v4 exporter
2021-01-21 11:48:19 +01:00
Kim Kulling 0b9cbb53ab
Merge branch 'master' into tdb/pbrt3_exporter 2021-01-21 11:27:35 +01:00
Kim Kulling fabea8ccd0
Merge pull request #3587 from assimp/build_fixes
Win32-refactorings
2021-01-21 11:26:45 +01:00
Kim Kulling 7dcac538f8
Merge branch 'master' into build_fixes 2021-01-21 09:03:06 +01:00
thomasbiang d7cf7847ba
Merge branch 'master' into master 2021-01-20 18:47:39 -08:00
ywang 01e61c8b9f customized node transformation format 2021-01-20 18:42:56 -08:00
Kim Kulling 4e0c4d7bb7
Update PbrtExporter.h 2021-01-20 21:11:14 +01:00
Kim Kulling 11a17ebfe6
Merge branch 'master' into tdb/pbrt3_exporter 2021-01-20 20:03:30 +01:00
RichardTea 8f4eff8d95 Increase ASSIMP_AI_REAL_TEXT_PRECISION
9 for float, 17 for double
2021-01-20 17:13:31 +00:00
RichardTea c1be6c76c8 Update gitignore for Visual Studio 2019
Default behaviour of VS2019 "Open Folder" for cmake projects:
- Build into "out/" folder in-source
- Store the config in CMakeSettings.json
- Keep VS info in .vs/ folder
2021-01-20 10:20:47 +00:00
RichardTea deac3a9f6c Add Draco 1.4.1 sources
Upstream: https://github.com/google/draco
2021-01-20 10:14:20 +00:00
xiaohunqupo 8ba1d38dea
Fix STL Expoter error. 2021-01-20 16:29:30 +08:00
Kim Kulling c52e5c4da8
Merge pull request #3592 from assimp/kimkulling-oss_fuzz29168
Fix nullptr access
2021-01-20 08:32:42 +01:00
Kim Kulling f8dd3a9aa6
Update DefaultIOSystem.cpp 2021-01-20 08:05:43 +01:00
Kim Kulling ed3e745752
Update DefaultIOSystem.cpp 2021-01-19 21:58:04 +01:00
Kim Kulling f05a57560b
Remove buggy method. 2021-01-19 21:27:50 +01:00
Kim Kulling 22f632d8d0
Merge branch 'master' into kimkulling-oss_fuzz29168 2021-01-19 21:21:28 +01:00
Kim Kulling 5b325af79f
Fix typo. 2021-01-19 21:19:42 +01:00
Kim Kulling 62e231b452
Merge pull request #3579 from ihsinme/ihsinme-patch-210
fixed memory leak
2021-01-19 21:18:34 +01:00
Kim Kulling 5a6498af92
Fix nullptr access 2021-01-19 21:14:38 +01:00
Kim Kulling 4008862a35
Merge branch 'master' into ihsinme-patch-210 2021-01-19 21:05:43 +01:00
Kim Kulling d12b1e8d70
Merge pull request #3591 from h3xx/fix-unzip-ftbfs
Fix build failure on Linux
2021-01-19 21:02:25 +01:00
Matt Pharr 8f5148f108
Merge branch 'master' into tdb/pbrt3_exporter 2021-01-18 17:15:40 -08:00
Dan Church 0bc5cf9fd3
Fix build failure on Linux 2021-01-18 16:17:28 -06:00
Kim Kulling 5a7f212162
Merge branch 'master' into ihsinme-patch-210 2021-01-18 21:55:42 +01:00
Kim Kulling 9a30887117
Merge pull request #3590 from assimp/kimkulling-oss_fuzz29401
Fix nullptr dereference in scenepreprocessor
2021-01-18 21:55:08 +01:00
Kim Kulling f24c042925
Fix typo 2021-01-18 20:28:38 +01:00
Kim Kulling 0803e5e6f3
Fix nullptr dereference in scenepreprocessor 2021-01-18 20:25:33 +01:00
Kim Kulling 0eb9005bc1
Merge pull request #3589 from assimp/kimkulling-off_fuzz28288
Fix overflow in aiString
2021-01-18 20:19:01 +01:00
Kim Kulling 11ee9d3673
Update types.h 2021-01-18 19:46:32 +01:00
Kim Kulling 5a764fff04
Fix overflow in aiString 2021-01-18 19:44:10 +01:00
kimkulling 7bb13e6272 Win32-refactorings 2021-01-18 08:39:39 +01:00
Kim Kulling 3c1d8850a4
Merge pull request #3586 from assimp/kimkulling-ossfuzz_issue29655
Fix Divide-by-zero in vector3
2021-01-17 20:53:45 +01:00
Kim Kulling 658fec3e61
Fix cast 2021-01-17 20:41:44 +01:00
Kim Kulling 0969bf3500
Fix Divide-by-zero in vector3
Fix for https://bugs.chromium.org/p/oss-fuzz/issues/detail?id=29655
2021-01-17 20:39:19 +01:00
Kim Kulling 061ef1f263
Merge pull request #3578 from gkv311/master
aiMaterial::GetTexture() - fix misleading description of path argument.
2021-01-16 17:16:05 +01:00
Kim Kulling aed0b3e53b
Merge branch 'master' into master 2021-01-16 16:37:57 +01:00
Kim Kulling 918c3abb32
Merge pull request #3585 from assimp/kimkulling-fix-zlib-deployment
remove install of zlibstatic
2021-01-16 16:25:29 +01:00
Kim Kulling 9334e07619
Update CMakeLists.txt 2021-01-16 16:14:49 +01:00
Kim Kulling 8ad2661e0c
Update CMakeLists.txt 2021-01-16 12:00:42 +01:00
Matt Pharr 17c79bcb94
Merge branch 'master' into tdb/pbrt3_exporter 2021-01-15 13:47:21 -08:00
RichardTea 7c9cddf786 Draco test file
2CylinderEngine from https://github.com/KhronosGroup/glTF-Sample-Models
2021-01-15 17:25:36 +00:00
Kim Kulling 6db343386b
remove install of zlibstatic 2021-01-15 16:46:15 +01:00
Maki 6d13fd6aa2 Fix glTF vertex colors with types other than float 2021-01-15 02:56:45 +00:00
Kim Kulling 8125e06f49
Merge branch 'master' into master 2021-01-14 19:03:16 +01:00
Kim Kulling a9705e346a
Merge branch 'master' into ihsinme-patch-210 2021-01-14 17:21:44 +01:00
Kim Kulling e3d39b9f66
Merge pull request #3583 from assimp/kimkulling-replace_sstrcasecmp
Remove dependency to posix-extension function
2021-01-14 12:06:24 +01:00
Kim Kulling 484ac21ef5
Remove dependency to posix-extension function 2021-01-14 11:53:25 +01:00
Kim Kulling 6d6a6ac11e
Merge pull request #3575 from ms-maxvollmer/gltf2_buffer_fixes
Fixes for GLTF2 buffers
2021-01-14 09:57:39 +01:00
Kim Kulling 87a6305cf0
Merge branch 'master' into gltf2_buffer_fixes 2021-01-12 18:32:17 +01:00
Kim Kulling 20873cb142
Merge pull request #3581 from assimp/build_fixes
Use const instead of constexpr
2021-01-12 18:31:53 +01:00
Matt Pharr ff8d50c8d0 Fix MSVC compiler warnings 2021-01-12 08:23:53 -08:00
Matt Pharr 09c5564d5b More compiler warnings 2021-01-12 08:16:08 -08:00
Matt Pharr 1fd8646b7a Fix compiler warnings 2021-01-12 08:03:16 -08:00
ihsinme 070072370d
Update AMFImporter_Material.cpp 2021-01-12 15:43:40 +03:00
ihsinme 2e96366d04
Update AMFImporter_Geometry.cpp 2021-01-12 15:40:19 +03:00
kkulling 9174bca3f7 closes https://github.com/assimp/assimp/issues/3517: use const instead of constexpr 2021-01-12 10:01:53 +01:00
Matt Pharr 1042845414 Merge branch 'master' of https://github.com/assimp/assimp into tdb/pbrt3_exporter 2021-01-11 19:57:10 -08:00
Matt Pharr 71cfd8e0cf Merge branch 'master' into tdb/pbrt3_exporter 2021-01-11 19:54:11 -08:00
Matt Pharr 2bc074e35a Additional PBRT exporter cleanups 2021-01-11 19:42:23 -08:00
Kirill Gavrilov 0c2772e8bf aiMaterial::GetTexture() - fix misleading description of path argument.
Mention aiScene::GetEmbeddedTexture() as a proper way to check if returned path
points to a file or to embedded texture.
2021-01-12 01:00:45 +03:00
Madrich 7999bc96e9
Merge pull request #17 from assimp/master
Update fork
2021-01-11 22:17:12 +01:00
Max Vollmer d49aed4585 * Check that buffer view has buffer
* Handle integer overflow when calculating byte length
* Minor code cleanup for exception messages
2021-01-11 08:45:47 +00:00
Kim Kulling ec08092dbf
Merge pull request #3571 from JacksonM8/issue_3570
Issue 3570 (CMake Policy violations on MSVC)
2021-01-09 08:41:28 +01:00
Matt Pharr 938537c884 Checkpoint improvements to pbrt exporter 2021-01-08 16:57:22 -08:00
Kim Kulling 68be7c77c0
Merge branch 'master' into issue_3570 2021-01-08 15:22:14 +01:00
Kim Kulling 1e81bed4d0
Merge pull request #3561 from ffontaine/master
contrib/zlib/CMakeLists.txt: don't install zlib
2021-01-07 11:05:37 +01:00
Kim Kulling d898ecc80c
Fix another typo. 2021-01-06 18:59:13 +01:00
Kim Kulling 2ad4218d25
Merge branch 'master' into master 2021-01-06 18:54:57 +01:00
Kim Kulling 5222ab989f
Fix a typo 2021-01-06 18:51:59 +01:00
Kim Kulling b23ecb4864
Update CMakeLists.txt
- Update minimum cmake version
- install for win32-platforms to avoid conflicts with targets for win32
2021-01-06 18:51:30 +01:00
JacksonM8 a01ef5374c
Merge branch 'master' into issue_3570 2021-01-07 01:47:06 +10:30
Kim Kulling 53c03fa364
Merge pull request #3569 from ihsinme/master
fix of an unattainable condition.
2021-01-06 16:00:46 +01:00
JacksonM8 3eed6fa006 Remove relative pathing in target_sources() as per CMP0076 2021-01-07 01:23:41 +10:30
JacksonM8 d0e57e2554 Remove quoted variable de-referencing as per CMP0054 2021-01-07 00:40:50 +10:30
ihsinme e1052f421b
Update OpenDDLParser.cpp 2021-01-06 16:52:28 +03:00
ihsinme 177304bb7c
Update o3dgcArithmeticCodec.cpp 2021-01-06 16:50:07 +03:00
Kim Kulling ccc0a50d96
Merge pull request #3558 from JLouis-B/3mf-improvements
3mf improvements
2021-01-02 13:29:58 +01:00
Kim Kulling cf78781fa8
Merge branch 'master' into 3mf-improvements 2021-01-02 13:14:13 +01:00
Kim Kulling 43ea4d679b
Merge pull request #3556 from JLouis-B/update-unzip
Update unzip contrib
2021-01-02 13:13:20 +01:00
Kim Kulling 3298082a96
Merge branch 'master' into update-unzip 2021-01-02 12:06:53 +01:00
Kim Kulling 05da2123e1
Merge pull request #3552 from Danny-Kint/dev/gltf-KHR_materials
[gltf2] Add support for extensions KHR_materials
2021-01-02 12:06:12 +01:00
Kim Kulling 48b138ce13
Merge branch 'master' into dev/gltf-KHR_materials 2021-01-02 10:02:07 +01:00
Kim Kulling 89d4d6b68f
Merge pull request #3546 from wasd845/develop3
add operator* in aiQuaterniont
2021-01-02 00:50:53 +01:00
Kim Kulling fa24e4199c
Merge branch 'master' into develop3 2021-01-02 00:13:47 +01:00
Kim Kulling 18ad1510f7
Merge pull request #3543 from gris-martin/patch-1
Only consider continuation tokens at end of line
2021-01-02 00:12:57 +01:00
Kim Kulling 0a1535647a
Merge branch 'master' into patch-1 2021-01-02 00:01:25 +01:00
Danny-Kint 07aace0fdd
Merge branch 'master' into dev/gltf-KHR_materials 2020-12-31 07:08:31 +01:00
Kim Kulling 465220b26a
Merge branch 'master' into 3mf-improvements 2020-12-30 18:12:26 +01:00
Kim Kulling 88e5f3416e
Merge pull request #3562 from makitsune/fix-gltf-bin-from-memory
Fix glTF from memory loading .bin with a custom IOHandler
2020-12-30 11:50:35 +01:00
Kim Kulling e0803b3ec2
Merge branch 'master' into fix-gltf-bin-from-memory 2020-12-30 11:17:31 +01:00
Danny-Kint b8d947299a
Merge branch 'master' into dev/gltf-KHR_materials 2020-12-29 17:09:15 +01:00
Jean-Louis 37df38f951 [3MF] Improves node naming 2020-12-29 15:46:28 +01:00
Kim Kulling 3ccfc03c48
Merge pull request #3542 from ms-maxvollmer/fbx_tokenizer_fix
FBXBinaryTokenizer: Check length of property
2020-12-28 20:19:35 +01:00
Jean-Louis 4025c57fd0 [3MF] Parse the transform of the components 2020-12-28 15:47:20 +01:00
Jean-Louis eda967bd02 Parse the <build> node + refactoring 2020-12-28 12:31:54 +01:00
Danny-Kint 3e320100e5
Merge branch 'master' into dev/gltf-KHR_materials 2020-12-28 10:29:17 +01:00
Danny-Kint 07b59f539d
Merge branch 'master' into dev/gltf-KHR_materials 2020-12-28 08:48:54 +01:00
Maki ca653e0c6a Fix glTF from memory loading .bin with a custom IOHandler 2020-12-28 07:18:50 +00:00
Jean-Louis 629147043e XmlParser: Fixed an error message when the file was correctly parsed 2020-12-27 18:13:49 +01:00
Fabrice Fontaine bfe35fc06b contrib/zlib/CMakeLists.txt: don't install zlib
Don't install zlib static library to avoid potential conflicts with a
system-wide zlib package

Signed-off-by: Fabrice Fontaine <fontaine.fabrice@gmail.com>
2020-12-27 15:27:41 +01:00
Jean-Louis eed75aaf2c Remove debug print 2020-12-26 14:57:52 +01:00
Jean-Louis 0ec8d6e285 [3MF] Missing file in previous commit + parse object material in the importer 2020-12-26 14:04:45 +01:00
Jean-Louis 0952038461 Small refactoring on 3MF export 2020-12-26 03:02:18 +01:00
Jean-Louis c10d592b79 Fix material parsing in the 3MF importer 2020-12-26 02:36:24 +01:00
Kim Kulling 77f9c2854a
Merge branch 'master' into fbx_tokenizer_fix 2020-12-25 21:44:26 +01:00
Kim Kulling 404bedd8be
Merge pull request #3541 from ms-maxvollmer/gltf2_fixes
GLTF2 fixes
2020-12-25 19:22:53 +01:00
Danny-Kint 7bb4b3fb03
Merge branch 'master' into dev/gltf-KHR_materials 2020-12-25 16:19:07 +01:00
Kim Kulling 3f5238d7c1
Merge branch 'master' into gltf2_fixes 2020-12-24 16:48:36 +01:00
Kim Kulling 2013932e7a
Merge pull request #3555 from someonewithpc/master
Fix #3222
2020-12-24 16:48:08 +01:00
Jean-Louis effe52368c No need to allocate a full size buffer for small files 2020-12-24 12:18:07 +01:00
Jean-Louis 895137c7d7 Fix unzip max buffer length error 2020-12-24 11:39:59 +01:00
Jean-Louis c464d01778 Fix fopen64, ftello64, fseeko64 declarations on all platforms 2020-12-24 03:18:09 +01:00
Jean-Louis 54be7ac582 Update unzip contrib 2020-12-24 01:53:40 +01:00
Hugo Sales 2873d862b0
Update CMakeLists.txt 2020-12-23 15:44:37 +00:00
Danny-Kint dbffe25c9d
Merge branch 'master' into dev/gltf-KHR_materials 2020-12-23 11:33:04 +01:00
Danny Kabrane 383c97e380 Add KHR_materials_transmission during export 2020-12-23 10:43:21 +01:00
Danny Kabrane 2b097c1e73 Add KHR_materials_transmission during import 2020-12-23 10:43:01 +01:00
Danny Kabrane 197bf1e617 Add KHR_materials_clearcoat during export 2020-12-23 09:56:15 +01:00
Danny Kabrane f8c63d874b support KHR_materials_clearcoat during import 2020-12-23 08:12:09 +01:00
Kim Kulling 102d380711
Merge pull request #3540 from wasd845/master
_dest may be destructed twice if _dest is not null in MergeScenes()
2020-12-22 12:07:01 +01:00
Kim Kulling b4b011e764
Merge branch 'master' into master 2020-12-22 11:11:45 +01:00
Kim Kulling ed2b680f46
Merge pull request #3533 from Biswa96/fix-casting-mingw
Common: Fix GCC error invalid conversion in MINGW.
2020-12-21 20:04:27 +01:00
Kim Kulling 50f9fb28b6
Merge branch 'master' into fix-casting-mingw 2020-12-21 18:29:18 +01:00
Danny Kabrane aa9d6ce7b7 add support for khr_materials_sheen during export 2020-12-21 14:34:16 +01:00
Danny Kabrane 0fdda99ea1 add underscore (MATERIAL_SHEEN instead of MATERIALSHEEN) 2020-12-21 14:33:35 +01:00
Martin 947d72d281
Merge branch 'master' into patch-1 2020-12-21 09:53:22 +01:00
Kim Kulling 5f5f1cf7a0
Merge pull request #3531 from JLouis-B/gltf2-exporter-crash
Fixed a crash of the Gltf 2 exporter in the case of an animation without scale animation key.
2020-12-20 21:57:44 +01:00
Danny Kabrane 63b0a97369 import KHR_materials_sheen 2020-12-20 07:59:12 +01:00
Kim Kulling 981923821a
Merge branch 'master' into gltf2-exporter-crash 2020-12-18 16:27:06 +01:00
Martin 6003be382c
Merge branch 'master' into patch-1 2020-12-17 14:29:51 +01:00
cywang b75ea77365 Merge branch 'develop3' of https://github.com/wasd845/assimp into develop3 2020-12-17 17:09:20 +08:00
cywang 15cff94926 add operator* in aiQuaterniont 2020-12-17 17:08:06 +08:00
wasd845 2250462853
Merge branch 'master' into develop3 2020-12-17 16:18:35 +08:00
cywang b6f8448b78 add operator* in aiQuaterniont 2020-12-17 16:13:35 +08:00
cywang f6dd11ca1a add operator* in aiQuaterniont 2020-12-17 15:07:03 +08:00
Kim Kulling b3e1ee3ca0
Merge pull request #3524 from inhosens/master
FBXConverter : Fix timescales of FBX animations
2020-12-16 22:33:16 +01:00
Inho Lee 4e5b25cd81 Keep AnimMesh data during the SortByPTypeProcess
A Postprocessing step, SortByPTypeProcess, can rebuild Mesh data,
but it does not handle AnimMesh.
This patch helps to rebuild appropriate AnimMeshes for the Mesh.
2020-12-16 19:19:30 +01:00
Inho Lee b8bf1eac04 FBXConverter : Fix timescales of FBX animations
FBX animations were recorded by framenumber, not by time.
This patch will change it as a base of milliseconds.
2020-12-16 15:02:46 +01:00
Martin 8003a016c2
Add some spaces to format code consistently 2020-12-15 12:36:00 +01:00
Martin 3718980c09
Only consider continuation tokens at end of line 2020-12-15 12:16:22 +01:00
Max Vollmer a15adc9fbc Fixed copypaste error 2020-12-14 17:01:42 +00:00
Max Vollmer 9d3c0081eb Throw if property length is out of bounds 2020-12-14 16:49:04 +00:00
Max Vollmer 1db51503d8 Throw instead of assert on invalid file input 2020-12-14 16:44:56 +00:00
Max Vollmer 5436e16802 * Fix memory leak in GLTF2 Importer that occurs when an exception gets thrown while constructing a scene
* Fix crash in GLTF2 Importer when a scene with dangling/uninitialized pointers gets deleted after an exception was thrown
* Fix crash in GLTF2 Importer when channel sampler is not set (negative index)
2020-12-14 16:37:02 +00:00
Max Vollmer (Microsoft Havok) 0e939cc450
Merge pull request #1 from assimp/master
Merge main into fork
2020-12-14 16:12:45 +00:00
Kim Kulling 2f1ff974fd
Merge pull request #3519 from MalcolmTyrrell/3dsMax2021PbrMaterials
3ds Max 2021 PBR Materials in FBX
2020-12-14 17:11:47 +01:00
wasd845 4e9176d2cd
_dest may be destructed twice if _dest is not null in MergeScenes() 2020-12-14 19:16:29 +08:00
Jean-Louis Boudrand 922f874e78 Merge branch 'gltf2-exporter-crash' of https://github.com/JLouis-B/assimp into gltf2-exporter-crash 2020-12-13 17:03:09 +01:00
Jean-Louis Boudrand d18fce3f06 Fix https://github.com/assimp/assimp/issues/3054
Corrected the animation of each bone of an animation were exported in different animations (+tabs fixes)
2020-12-13 17:02:50 +01:00
Jean-Louis Boudrand 33e7e2366c
Merge branch 'master' into gltf2-exporter-crash 2020-12-13 16:48:40 +01:00
Biswapriyo Nath c65f2cb3fb Remove extra semicolon while GCC being pedantic. 2020-12-13 00:12:44 +05:30
Biswapriyo Nath e2af015a57 Common: Fix GCC error invalid conversion in MINGW. 2020-12-11 21:43:09 +05:30
Kim Kulling 7dd0596010
Merge branch 'master' into 3dsMax2021PbrMaterials 2020-12-11 14:31:00 +01:00
Kim Kulling 3d49d06bcc
Merge pull request #3518 from Biswa96/add-msvc-check
Check _MSC_VER for MSVC specific pragma directives.
2020-12-11 14:30:25 +01:00
Kim Kulling a2adef8726
Merge branch 'master' into add-msvc-check 2020-12-11 14:11:10 +01:00
Kim Kulling 80bb8ab726
Merge pull request #3521 from huiji12321/master
Additional Compiler Options for mips64el
2020-12-11 14:07:49 +01:00
Jean-Louis Boudrand 8701a86c9d Fixed a crash of the Gltf 2 exporter in the case of an animation without a translation, rotation or scale animation key. 2020-12-10 23:47:54 +01:00
huiji12321 db475e7d4a
Merge branch 'master' into master 2020-12-10 09:04:24 +08:00
Kim Kulling 10092cd1ec
Merge pull request #3515 from LoicFr/master
glTF2Exporter: fix crash when exporting a scene with several meshes p…
2020-12-09 21:14:51 +01:00
Kim Kulling e4a1fb171e
Merge branch 'master' into master 2020-12-09 17:58:18 +01:00
Kim Kulling c168c4689e
Merge branch 'master' into master 2020-12-09 13:59:27 +01:00
Kim Kulling 99e4a10dc3
Merge pull request #3528 from tellypresence/issue-3525_use_option_for_rapidjson_no_member_iterator
Provide option for rapidjson no-member-iterator define
2020-12-09 13:58:52 +01:00
tellypresence 6db5b7046f Provide option for rapidjson no-member-iterator define
Originally added to fix warning on MSVC but breaks android build
2020-12-09 20:21:43 +09:00
Kim Kulling 816bbc852c
Merge branch 'master' into master 2020-12-08 19:54:04 +01:00
Kim Kulling aee01e8345
Merge pull request #3514 from ms-maxvollmer/gltf_fixes
GLTF: Fix crash on invalid base64 data + improved error messages
2020-12-08 19:48:53 +01:00
Kim Kulling 233d834514
Merge branch 'master' into gltf_fixes 2020-12-07 20:36:53 +01:00
Kim Kulling 41904ad7ce
Merge pull request #3516 from assimp/kimkulling-patch-8
Update Readme.md
2020-12-07 20:30:21 +01:00
Kim Kulling 1f8c75c871
Merge branch 'master' into kimkulling-patch-8 2020-12-07 16:55:07 +01:00
Kim Kulling c0d7ea981a
Merge branch 'master' into gltf_fixes 2020-12-04 16:02:16 +01:00
Kim Kulling 63f1b66224
Merge pull request #3512 from boguscoder/master
Fix for 3489 | Preserve morph targets when splitting by bone count
2020-12-04 15:58:22 +01:00
Kim Kulling eccdc6dc96
Merge branch 'master' into master 2020-12-04 15:30:56 +01:00
Kim Kulling f87ab4b4d7
Merge pull request #3506 from MalcolmTyrrell/fbxExceptionSafety
Fbx exception safety
2020-12-04 15:30:27 +01:00
Kim Kulling 5020a0aa33
Merge branch 'master' into fbxExceptionSafety 2020-12-04 11:01:56 +01:00
Max Vollmer (Microsoft Havok) e737adde50
Merge branch 'master' into gltf_fixes 2020-12-04 08:58:52 +00:00
huiji12321 1910bbbdd9 Additional Compiler Options for mips64el 2020-12-04 16:47:43 +08:00
Kim Kulling f67a9f253f
Merge branch 'master' into 3dsMax2021PbrMaterials 2020-12-03 22:20:01 +01:00
Kim Kulling 00b626c3c5
Merge pull request #3505 from Neil-Clifford-FB/scenepreprocessor-memoryleak
Sceneprecessor - potential memory leak
2020-12-03 20:41:50 +01:00
Kim Kulling c7aeb882e6
Update ScenePreprocessor.cpp 2020-12-03 17:28:51 +01:00
Malcolm Tyrrell 471d2acc92 Improvements & style 2020-12-03 11:17:45 +00:00
Max Vollmer (Microsoft Havok) a0ebad1698
Merge branch 'master' into gltf_fixes 2020-12-03 09:28:48 +00:00
Kim Kulling c5f45e26bd
Merge branch 'master' into scenepreprocessor-memoryleak 2020-12-03 10:08:05 +01:00
Malcolm Tyrrell 19af3f0d31 Swap the meaning using the out_mat property. 2020-12-02 16:59:29 +00:00
Biswapriyo Nath 8d8ba521e2 Check _MSC_VER for MSVC specific pragma directives.
This fixes build issues when compiled with compiles like Clang or GCC.
2020-12-02 02:05:14 +05:30
Kim Kulling 542ca843be
Update Readme.md 2020-12-01 16:38:18 +01:00
Malcolm Tyrrell f7be3048de New 3ds Max PBR Materials in FBX 2020-12-01 12:05:42 +00:00
Kim Kulling 0458ead7a2
Merge pull request #3503 from natanaeljr/master
Update Android port README.md with ABI doc
2020-12-01 12:30:09 +01:00
Kim Kulling 75204dfe7f
Update README.md 2020-12-01 08:58:45 +01:00
FRICOTEAUX b47c5c8c27 glTF2Exporter: fix crash when exporting a scene with several meshes per node (regression coming from commit e8d2b84 on 08/03/2020 "clean all warnings for vs-2019") 2020-11-30 20:11:41 +01:00
Kim Kulling 223372aaba
Merge branch 'master' into master 2020-11-30 19:05:31 +01:00
Max Vollmer 53ff0702ce Fixed check for base64 char values 2020-11-30 16:21:29 +00:00
Max Vollmer 7d72c78c8e Some improvements 2020-11-30 15:20:51 +00:00
Max Vollmer 6ed1488e6e * Improved error messages
* Throw instead of asserts on invalid file input
2020-11-30 15:04:06 +00:00
Oleg Bogdanov 4d4a3c42f6 Fix for 3489 | Preserve morph targets when splitting by bone count 2020-11-28 10:01:50 -08:00
Kim Kulling 88be8ec698
Merge branch 'master' into fbxExceptionSafety 2020-11-27 21:49:58 +01:00
Kim Kulling 9ae112309f
Merge pull request #3511 from MalcolmTyrrell/fbxVideoKeys
Simplification: textures_converted keys can just be pointers
2020-11-27 21:49:21 +01:00
Malcolm Tyrrell 149b8d1fd1 Don't need operator< either. 2020-11-27 14:26:51 +00:00
Malcolm Tyrrell 14f79caf41 textures_converted keys can just be pointers 2020-11-26 16:29:37 +00:00
Neil Clifford ea60563822
Merge branch 'master' into scenepreprocessor-memoryleak 2020-11-26 08:57:57 +00:00
Kim Kulling 11b4153949
Merge pull request #3487 from inhosens/master
Prevent to generate redundant morph targets for glTF2
2020-11-25 17:13:38 +01:00
Kim Kulling 4590f06756
Merge branch 'master' into master 2020-11-25 16:57:49 +01:00
Kim Kulling dc9db3eaf2
Merge pull request #3504 from Neil-Clifford-FB/fbxparser-overead
FBXParser.cpp - handle buffer over-read correctly
2020-11-25 11:30:52 +01:00
Kim Kulling c059e58c5e
Merge branch 'master' into fbxparser-overead 2020-11-24 08:36:15 +01:00
Kim Kulling fe78310486
Merge branch 'master' into fbxExceptionSafety 2020-11-23 10:08:23 +01:00
Kim Kulling afd69bea8a
Merge pull request #3510 from Evangel63/scene_name
Added mName to aiScene.
2020-11-23 10:07:58 +01:00
Evangel 98e42e22b8 Added check around setting pScene->mName from asset.scene. 2020-11-22 15:49:41 +10:00
Evangel 30584c1ec1 Replaced name with scene_name to avoid shadowing. 2020-11-22 15:36:08 +10:00
Evangel 67abcb10ba Added mName to aiScene. Primarily to provide access to the "name" member of glTF2 scenes. 2020-11-22 15:33:31 +10:00
Malcolm Tyrrell 885a196c74 Unsigned 2020-11-19 16:30:44 +00:00
Kim Kulling 8108338215
Merge branch 'master' into master 2020-11-19 16:34:15 +01:00
Kim Kulling b1f3c48551
Merge pull request #3484 from MalcolmTyrrell/findDegeneratesOptimization
Optimize FindDegenerates so it doesn't explode
2020-11-19 16:33:46 +01:00
Neil Clifford fc842a0f97 Sceneprecessor potential memory leak 2020-11-19 13:20:43 +00:00
Neil Clifford 7b59cc297e FBXParser.cpp - handle buffer over-read cases correctly 2020-11-19 12:20:06 +00:00
Kim Kulling d10bf9a0d3
Merge branch 'master' into master 2020-11-18 21:30:58 +01:00
Inho Lee e3083c21f0 glTF2: import correct animation values for CUBICSPLINE
CUBICSPLINE interpolation has tangent values with the animation data.
Current import don't care this interpolation type but it will help not
to fetch tangent values instead of animation data.

Note: Assimp cannot support interpolation types yet.
2020-11-17 17:21:07 +01:00
Malcolm Tyrrell c00153089a Neater construction 2020-11-17 10:45:10 +00:00
Malcolm Tyrrell 213a9f9d55 First pass at PotentialNode 2020-11-17 10:39:03 +00:00
Malcolm Tyrrell c4573a6d5c
Merge branch 'master' into findDegeneratesOptimization 2020-11-17 09:44:13 +00:00
Natanael Rabello 813f171493 Update Android port README.md with ABI doc 2020-11-16 21:45:01 -03:00
Kim Kulling 749a4963a2
Merge pull request #3501 from Nodrev/issue_3500
Fixing issue 3500, invalid outer cone angle readed from gltf2 file on  machines which defines M_PI as a double value
2020-11-16 22:03:54 +01:00
Kim Kulling c4ba5eeeea
Merge branch 'master' into issue_3500 2020-11-16 21:52:14 +01:00
Kim Kulling 25aaa333eb
Merge pull request #3502 from MalcolmTyrrell/fbxTextureFix
Prevent crash with malformed texture reference
2020-11-16 21:51:41 +01:00
Malcolm Tyrrell 3221522f95 Prevent crash with malformed texture reference 2020-11-16 17:29:19 +00:00
Malcolm Tyrrell d9b90f714a Fix typo 2020-11-16 11:06:39 +00:00
Malcolm Tyrrell 3ce0958b98
Merge branch 'master' into findDegeneratesOptimization 2020-11-16 09:13:13 +00:00
Jean-François Verdon 09ca11d063 Fixing issue 3500, invalid outer cone angle readed from gltf2 file on machines which defines M_PI as a double value 2020-11-16 09:19:13 +01:00
Kim Kulling 5e7d6a0e41
Merge pull request #3490 from MalcolmTyrrell/nullBufferviewFix
GLTF2: Null bufferview crash fix
2020-11-16 00:15:37 +01:00
Kim Kulling 647cef8a8b
Merge branch 'master' into nullBufferviewFix 2020-11-15 19:02:09 +01:00
Kim Kulling 0d5e5790cb
Fix findings. 2020-11-14 12:44:49 +01:00
Kim Kulling db7e594221
Merge branch 'master' into findDegeneratesOptimization 2020-11-14 12:32:57 +01:00
Kim Kulling 21a55a34ea
Merge pull request #3498 from assimp/kimkulling-patch-8
closes https://github.com/assimp/assimp/issues/3187
2020-11-12 08:54:23 +01:00
Kim Kulling e08690ac51
Merge branch 'master' into kimkulling-patch-8 2020-11-11 21:22:46 +01:00
Kim Kulling b433243daf
Merge pull request #3497 from assimp/fix_lws_with_envelop
closes https://github.com/assimp/assimp/issues/1044
2020-11-11 21:16:11 +01:00
Kim Kulling 75818f26eb
closes https://github.com/assimp/assimp/issues/3187
Do not use pthread for android
2020-11-11 21:13:17 +01:00
Inho Lee 8845d7eed3 Prevent to generate redundant morph targets for glTF2 2020-11-11 20:49:22 +01:00
Kim Kulling fa0951012f closes https://github.com/assimp/assimp/issues/1044: fix envelope handling in lightintensity. 2020-11-11 20:32:55 +01:00
Kim Kulling 707ad68fba
Merge branch 'master' into findDegeneratesOptimization 2020-11-11 09:54:08 +01:00
Kim Kulling c394c6fdda
Merge pull request #3486 from assimp/kimkulling-patch-8
Delete AMFImporter_Postprocess.cpp
2020-11-10 17:11:54 +01:00
Kim Kulling ab34b25a03
Merge branch 'master' into kimkulling-patch-8 2020-11-10 15:32:04 +01:00
Kim Kulling 5da3e633e3
Merge pull request #3494 from assimp/issue_3198
closes https://github.com/assimp/assimp/issues/3198: make aiMaterial:…
2020-11-10 13:21:16 +01:00
Kim Kulling 8c91d1a3cd closes https://github.com/assimp/assimp/issues/3198: make aiMaterial::GetName const. 2020-11-10 12:50:17 +01:00
Kim Kulling 957e468c8a
Merge pull request #3493 from assimp/issue_3448
closes https://github.com/assimp/assimp/issues/3448
2020-11-10 12:03:57 +01:00
Kim Kulling a8381113eb
Update ObjFileMtlImporter.cpp 2020-11-10 10:23:28 +01:00
Kim Kulling 856d4c016e
closes https://github.com/assimp/assimp/issues/3448
Add transmission alpha value. if any.
2020-11-10 10:03:09 +01:00
Malcolm Tyrrell 0f246edb97 Prevent GetValue from corrupting memory 2020-11-06 13:43:16 +00:00
Malcolm Tyrrell 34e3e6293a Style 2020-11-06 09:57:48 +00:00
Malcolm Tyrrell 0af05e7a60 Better message 2020-11-05 15:10:52 +00:00
Malcolm Tyrrell 01b2088dd3 A missing bufferview was causing a crash. 2020-11-05 15:02:41 +00:00
Kim Kulling 6873d79505
Delete AMFImporter_Postprocess.cpp 2020-11-03 13:00:28 +01:00
Malcolm Tyrrell a68f78ab94 C++11 2020-11-02 15:03:17 +00:00
Malcolm Tyrrell 75570307d6 Remove unneeded line 2020-11-02 14:50:20 +00:00
Malcolm Tyrrell 3deae8760c Optimize FindDegenerates so it doesn't explode 2020-11-02 14:43:35 +00:00
Kim Kulling de610b8ce9
Merge pull request #3455 from traversaro/fix/3365
Fix CMake config generation problems
2020-10-29 15:47:53 +01:00
Kim Kulling 206f28b8ad
Merge branch 'master' into fix/3365 2020-10-29 13:40:00 +01:00
Kim Kulling bff65f3827
Merge pull request #3463 from maiqingqiang/fix/xcode-compile-20201018
fix xcode compile bug
2020-10-29 13:39:13 +01:00
Kim Kulling 72bc41b50f
Merge branch 'master' into fix/xcode-compile-20201018 2020-10-28 22:00:08 +01:00
Kim Kulling 18471a39ca
Merge pull request #3460 from MalcolmTyrrell/readFbxWeightsInConfig
AI_CONFIG_IMPORT_FBX_READ_WEIGHTS
2020-10-28 21:59:39 +01:00
Kim Kulling 8c135f779e
Merge branch 'master' into readFbxWeightsInConfig 2020-10-28 20:38:29 +01:00
Kim Kulling 3fd95aff4e
Merge branch 'master' into fix/3365 2020-10-27 17:43:28 +01:00
Kim Kulling f0a0b5c85e
Merge pull request #3471 from MomoDeve/patch-1
MSVC crash while importing fbx model workaround
2020-10-27 17:42:56 +01:00
Kim Kulling df768bdd99
Merge branch 'master' into patch-1 2020-10-27 16:20:33 +01:00
Kim Kulling 753503ad83
Merge pull request #3478 from assimp/new_openddl
openddl: latest greatest.
2020-10-27 10:03:50 +01:00
Kim Kulling 43f7224d0c
Update CMakeLists.txt 2020-10-27 09:46:31 +01:00
Kim Kulling 22ad7028f0
Delete CMakeLists.txt 2020-10-27 09:42:46 +01:00
Kim Kulling 4bba338d92
Update CMakeLists.txt 2020-10-27 09:23:20 +01:00
Kim Kulling 7e1a8f09c5 more openddl-fixes 2020-10-26 21:35:44 +01:00
Kim Kulling aee2e9a87d
Merge branch 'master' into patch-1 2020-10-25 20:35:06 +01:00
Kim Kulling 57e691e28e openddl: latest greatest. 2020-10-25 10:34:43 +01:00
Kim Kulling 55feb0cb78
Merge branch 'master' into fix/xcode-compile-20201018 2020-10-23 22:06:49 +02:00
Kim Kulling 831af12974
Merge pull request #3476 from ms-maxvollmer/gltf_crash_fixes
Fixes for crashes in GLTF2 Importer
2020-10-23 16:31:10 +02:00
Max Vollmer 4006bb71f4 Fixes for crashes in GLTF2 Importer 2020-10-23 12:01:43 +01:00
John Mai cea54d1ac5
Merge branch 'master' into fix/xcode-compile-20201018 2020-10-23 14:06:25 +08:00
Kim Kulling 6ee5e248ee
Fix typo 2020-10-22 22:26:29 +02:00
Kim Kulling 8d7e5db98c
Fix typo. 2020-10-22 22:26:03 +02:00
Kim Kulling a5a331847b
Merge pull request #3412 from MalcolmTyrrell/fbxReportAssetIssuesProperly
Fbx report asset issues properly
2020-10-22 22:24:44 +02:00
#Momo b168d8f441
replaced data with taking address of first element
oops, seems like `data()` returns `char*` only since C++17. Replaced with taking address of first string element
2020-10-21 23:41:33 +03:00
#Momo 7781fe5781
MSVC crash workaround
I do not know why, but the following line causes crash if assimp was compiled using MSVC with RelWithDebInfo configuration:
`std::transform(shading.begin(), shading.end(), shading.begin(), Assimp::ToLower<char>);`
replacing `shading.begin()` with `shading.data()` fixes this issue.
2020-10-21 23:21:50 +03:00
Kim Kulling b842b4a3c1
Merge branch 'master' into fbxReportAssetIssuesProperly 2020-10-21 20:02:48 +02:00
Kim Kulling f13a69a817
Merge pull request #3470 from assimp/kimkulling-patch-7
Update FUNDING.yml
2020-10-21 17:04:36 +02:00
Kim Kulling f96698a6d2
Update FUNDING.yml 2020-10-21 16:39:19 +02:00
Kim Kulling 7c5f04deed
Merge pull request #3466 from assimp/collada_cleanup
Collada cleanup
2020-10-20 00:20:40 +02:00
Kim Kulling bbac168ced
Merge branch 'master' into collada_cleanup 2020-10-19 23:56:52 +02:00
Kim Kulling 69143ed149 fix unittests. 2020-10-19 23:53:27 +02:00
Kim Kulling 080322b9e2 cleanup collada xml migration. 2020-10-19 19:06:11 +02:00
Malcolm Tyrrell a2cd5619b4
Merge branch 'master' into readFbxWeightsInConfig 2020-10-19 10:16:02 +01:00
Kim Kulling 376e468877
Merge pull request #3231 from xiaozhuai/master
optimize CMakeLists.txt
2020-10-18 18:29:45 +02:00
john d48ac9d0a4 fix xcode compile bug 2020-10-18 10:54:04 +08:00
Kim Kulling 37c09ecb69
Update CMakeLists.txt 2020-10-17 10:58:06 +02:00
Kim Kulling 56e1a80e24
Merge branch 'master' into master 2020-10-17 10:57:26 +02:00
Kim Kulling fc11ca2f5e
Merge pull request #3461 from inhosens/dev_1016
glTF1's orthgraphic camera & glTF2's skinning
2020-10-17 10:56:38 +02:00
Inho Lee ad7f8910e9 Rollback the method to handle empty bones for GLTF2
A patch made the assimp to ignore empty bones.
However, some assets can have bones which don't have weights
but are connected to other bones.
2020-10-16 17:09:17 +02:00
Inho Lee 9f880e2214 Fix glTF1 orthographic camera 2020-10-16 08:56:55 +02:00
Kim Kulling c035177847
Merge pull request #3451 from xantares/patch-1
CMake: Fix FindRT warning
2020-10-15 20:08:35 +02:00
Malcolm Tyrrell 0363c18f1f Read weights 2020-10-15 10:07:24 +01:00
Silvio Traversaro 3b5212067c Fix CMake config generation
Use standard CMake function to generate the CMake config files.
2020-10-14 23:55:28 +02:00
Kim Kulling 76d370b054
Merge branch 'master' into patch-1 2020-10-14 22:05:56 +02:00
Kim Kulling dbd99bf700
Merge pull request #3456 from rbsheth/rbsheth_hunter_hotfix
Hotfix for Hunter builds
2020-10-14 22:05:34 +02:00
Kim Kulling 828068d224
Merge branch 'master' into rbsheth_hunter_hotfix 2020-10-14 21:14:42 +02:00
Kim Kulling f713d30e9b
Merge pull request #3454 from jsmaatta/master
Fix for issue #3445
2020-10-14 21:13:52 +02:00
Kim Kulling 7660070aa4
Merge branch 'master' into master 2020-10-14 21:01:35 +02:00
Kim Kulling b9f83c8db8
Merge pull request #3458 from assimp/issue_3449
Add handling for source for params
2020-10-14 20:57:08 +02:00
Kim Kulling 857f62cde0 closes pParam.mReference = source; 2020-10-14 20:34:46 +02:00
Rahul Sheth 4e57c1ee7f Hotfix for Hunter builds 2020-10-14 11:49:05 -04:00
Jukka Maatta 6848a18999 Fix for issue #3445
Add const to avoid creating a temporary copy.

This should fix the cmake compilation error on XGLLoader.cpp shown in bug #3445

The fix is similar to commit bbe6f7f213
2020-10-13 21:56:43 +03:00
Kim Kulling 84ef3dc0fc
Merge branch 'master' into fbxReportAssetIssuesProperly 2020-10-13 18:37:03 +02:00
Kim Kulling ba1145885d
Merge pull request #3452 from rbsheth/rbsheth_add_pugixml
Update Hunter for pugixml
2020-10-13 12:01:32 +02:00
Rahul Sheth b7c6719ed8 Fix test builds 2020-10-12 16:47:36 -04:00
Rahul Sheth f12e6eb6f4 Update Hunter for pugixml 2020-10-12 16:30:03 -04:00
xantares 22ea239049
CMake: Fix FindRT warning
This fixes the following warning:
The package name passed to `find_package_handle_standard_args` (rt) does                                                                                                                                                                   not match the name of the calling package (RT).
2020-10-12 10:42:41 +02:00
Kim Kulling 636f28965f
Merge branch 'master' into fbxReportAssetIssuesProperly 2020-10-11 18:13:43 +02:00
Kim Kulling 1df00143f5
Merge pull request #3446 from stromaster/patch-1
fix for fbx files using stingray materials;
2020-10-11 18:05:57 +02:00
Sahin Serdar Kocdemir eb9928e029
fix for fbx files using stringray materials; 2020-10-09 07:28:15 +01:00
Malcolm Tyrrell 20733537d7
Merge branch 'master' into fbxReportAssetIssuesProperly 2020-10-08 09:54:04 +01:00
Kim Kulling c7ab7ff457
Merge pull request #3413 from Optimizer0/master
[Bug-Fix] Fixed Strict Aliasing Level 3 Warnings
2020-10-08 10:17:32 +02:00
Optimizer0 1d3f8bd871
Merge branch 'master' into master 2020-10-06 15:48:11 +05:30
Kim Kulling 95d0443a5d
Merge pull request #3415 from assimp/issue_3379
closes https://github.com/assimp/assimp/issues/3379: reproduce error …
2020-10-06 10:38:09 +02:00
Optimizer0 152343b186
Merge branch 'master' into master 2020-10-06 08:35:26 +05:30
Kim Kulling d676e1a13f closes https://github.com/assimp/assimp/issues/3379: reproduce error of unresolved symbol with static lib 2020-10-05 21:37:18 +02:00
Kim Kulling 3b9d4cfd28
Merge pull request #2966 from assimp/pugi_xml
[WIP] Pugi xml
2020-10-05 20:02:51 +02:00
Kim Kulling 09a473ff02 fic tests. 2020-10-05 19:06:48 +02:00
Kim Kulling 52826a03f8 remove all hunter-dependencies for pugixml. 2020-10-05 18:53:42 +02:00
Kim Kulling 23f144a7b7 pugixml: use pugixml in headeronly mode. 2020-10-05 18:44:59 +02:00
Malcolm Tyrrell 4bdaf20b70 Add comment. 2020-10-05 14:23:42 +01:00
Isuru2000psn f2b3ec2e0c strict-aliasing level 3 warnings fix 2020-10-05 15:29:09 +05:30
Malcolm Tyrrell 585fb89154 Make an assert a DeadlyImportError. 2020-10-02 15:25:16 +01:00
Malcolm Tyrrell 57756750f6 Limit the output 2020-10-02 15:20:50 +01:00
Malcolm Tyrrell 17702605cf Limit the number of characters printed. 2020-10-02 14:41:36 +01:00
Malcolm Tyrrell 6b9c477763 The floar parsing routines are now DeadlyErrors. 2020-10-02 13:58:55 +01:00
Kim Kulling 9303fb31f6
Enable export only for windows 2020-10-02 11:30:37 +02:00
Kim Kulling 9d296f3943
export pugixml symbold in assimp 2020-10-01 22:02:03 +02:00
kimkulling b6dde74155 adaptions to support hunter 2020-10-01 16:35:34 +02:00
kimkulling d75fa2bb4b fix invalid path. 2020-10-01 10:43:48 +02:00
kimkulling c740f61f97 hunter integration: pugixml 2020-10-01 10:29:52 +02:00
Kim Kulling c7f7ed8901
Update ColladaLoader.cpp 2020-09-30 20:51:54 +02:00
Kim Kulling 0191c661b5
fix division by zero. 2020-09-30 20:39:26 +02:00
Kim Kulling 4affe21709
Update ccpp.yml 2020-09-30 19:28:04 +02:00
Kim Kulling 0f4ce80ff1
Update sanitizer.yml 2020-09-30 19:27:32 +02:00
Kim Kulling 177426185e
Fix invalid cast 2020-09-30 16:38:13 +02:00
Kim Kulling 50d21e08f3
fix memoy leak. 2020-09-30 12:05:32 +02:00
Kim Kulling ea741fd8bd
init readbuffer with 0-token. 2020-09-30 11:57:29 +02:00
Kim Kulling b4f79411aa
Fix lowrcase names. 2020-09-30 11:24:41 +02:00
Kim Kulling 788099a223
Merge branch 'master' into pugi_xml 2020-09-29 21:29:37 +02:00
Kim Kulling 6a4c338625
Merge pull request #3405 from sherief/master
Fix for build break due to warnings-as-errors.
2020-09-29 21:10:38 +02:00
Kim Kulling c591f7de2f make xml parsing more verbose. 2020-09-29 21:01:10 +02:00
Kim Kulling 484d305987 pugi: enable static linkage explicitely. 2020-09-29 20:33:39 +02:00
Kim Kulling adcf84c41f Merge branch 'pugi_xml' of https://github.com/assimp/assimp into pugi_xml 2020-09-29 19:18:27 +02:00
Kim Kulling 880fe75671 add missing dep to assimp_cmd 2020-09-29 19:14:14 +02:00
Kim Kulling db49a541c3
remove unused attributes. 2020-09-28 20:35:30 +02:00
Kim Kulling ef9a78b49d
remove unused attributes. 2020-09-28 20:34:44 +02:00
Kim Kulling 8f0888f7fc diable hunter fr pugi. 2020-09-28 20:03:51 +02:00
Kim Kulling effccfe2e6
Remove dead code. 2020-09-28 15:23:26 +02:00
Kim Kulling bf4ad2837f
Remove dead code. 2020-09-28 15:20:59 +02:00
Kim Kulling 69822fd5e6
remove pugixml from hunter 2020-09-28 10:23:25 +02:00
Kim Kulling c598a12340
Remove unused variable. 2020-09-28 09:15:56 +02:00
Kim Kulling 89ac168014 ogre: fix warning: not inited variable. 2020-09-27 21:23:55 +02:00
Kim Kulling 1c85676a9c collada: fix warning: not inited variable. 2020-09-27 21:19:23 +02:00
Kim Kulling 052cc2e070 collada: fix warning: not inited variable. 2020-09-27 21:16:51 +02:00
Kim Kulling 5038f21d06 collada: fix warning: not inited variable. 2020-09-27 21:14:21 +02:00
Kim Kulling 202907d471 collada: fix warning: unused variable. 2020-09-27 21:11:42 +02:00
Kim Kulling 3f97a1df2c collada: fix warning: unused variable. 2020-09-27 21:09:06 +02:00
Kim Kulling bdd3c96eee amf: fix warning: unused variable. 2020-09-27 21:06:14 +02:00
Kim Kulling 5877f81419 amf: fix warning: unused variable. 2020-09-27 21:03:59 +02:00
Kim Kulling 5230b91611 amf: fix warning: unused variable. 2020-09-27 21:01:48 +02:00
Kim Kulling 8143ea5aec amf: fix warning: unused variable. 2020-09-27 20:58:08 +02:00
Kim Kulling 9a19a4723b amf: fix warning: unused variable. 2020-09-27 20:54:21 +02:00
Kim Kulling a6b90c354b fix pugi warnings 2020-09-27 20:38:09 +02:00
Kim Kulling 5653a82a87 fix the unittests. 2020-09-27 20:20:44 +02:00
Kim Kulling 9234fee35e Ogre: fix xml migration. 2020-09-27 09:36:38 +02:00
Sherief Farouk a3c8cfc0ff Fix for build break due to warnings-as-errors when not building M3D exporter. 2020-09-26 23:21:23 -07:00
Kim Kulling d6892b3f58 Merge branch 'master' into pugi_xml 2020-09-25 21:00:09 +02:00
Kim Kulling 557273818d collada: next iteration. 2020-09-23 21:23:12 +02:00
Kim Kulling 22dd53a4a2
Merge pull request #3394 from ms-maxvollmer/gltfBufferViewSizeFix
GLTF2: Throw instead of assert when input file is invalid.
2020-09-23 21:22:14 +02:00
Kim Kulling 34351b3cb9 fix collada material parsing. 2020-09-23 00:20:06 +02:00
Kim Kulling c0e58c1895
Merge branch 'master' into gltfBufferViewSizeFix 2020-09-22 20:02:16 +02:00
Kim Kulling 93ae409e74 Merge branch 'pugi_xml' of https://github.com/assimp/assimp into pugi_xml 2020-09-22 17:29:49 +02:00
Kim Kulling 6e91605268 reformat. 2020-09-22 17:29:46 +02:00
kimkulling 71f20eaa8a next fixes 2020-09-22 15:51:21 +02:00
kimkulling dee8e5bee1 Merge branch 'pugi_xml' of https://github.com/assimp/assimp into pugi_xml 2020-09-22 15:20:35 +02:00
Kim Kulling c4039d5cf0 fix collada data parsing. 2020-09-21 20:05:16 +02:00
kimkulling 8c88526da8 fix collada unittests. 2020-09-21 16:39:24 +02:00
Kim Kulling 11261671a3
Merge pull request #3400 from assimp/kimkulling-patch-7
Update Readme.md
2020-09-20 19:56:38 +02:00
Kim Kulling 3e025cdc8d
Update Readme.md 2020-09-20 18:33:02 +02:00
Kim Kulling 64c1405dfd
Merge pull request #3382 from rbsheth/rbsheth_hunter_rapidjson
Fix RapidJSON defines and add Hunter builds to CI
2020-09-19 21:37:16 +02:00
Max Vollmer (Microsoft Havok) c9fb21661f
Merge branch 'master' into gltfBufferViewSizeFix 2020-09-18 08:01:24 +01:00
rahulshethsc 354e09e785
Merge branch 'master' into rbsheth_hunter_rapidjson 2020-09-17 14:39:04 -04:00
Rahul Sheth aa125c48ab Try fixing required action names 2020-09-17 14:38:49 -04:00
Kim Kulling fbc0914a21
Merge pull request #3383 from crocdialer/collada_animation_ticks_per_sec_issue_3162
collada: set aiAnimation->mTicksPerSecond to 1000.0
2020-09-17 14:37:55 +02:00
Fabian Schmidt 338c0b753c
Merge branch 'master' into collada_animation_ticks_per_sec_issue_3162 2020-09-16 21:43:35 +02:00
Max Vollmer (Microsoft Havok) 9c1edaee96
Merge branch 'master' into gltfBufferViewSizeFix 2020-09-16 10:08:47 +01:00
Kim Kulling 14d6141f69 Collada: fix scenenode parsing. 2020-09-14 21:35:36 +02:00
Kim Kulling 9e2c4e0cf4
Merge branch 'master' into rbsheth_hunter_rapidjson 2020-09-14 09:00:11 +02:00
Kim Kulling 3e5feb4320
Merge pull request #3375 from MalcolmTyrrell/makeInternalErrorsAccessible
Make internal errors accessible
2020-09-14 08:59:09 +02:00
Kim Kulling 2901f68668
Adapt code style. 2020-09-14 08:45:18 +02:00
Kim Kulling 0e9621012c
Adapt code style - finally :-). 2020-09-14 08:43:31 +02:00
Kim Kulling 1ff9e2b522
Adapt code style. 2020-09-14 08:40:21 +02:00
Kim Kulling 23defc275a
Merge branch 'master' into makeInternalErrorsAccessible 2020-09-14 08:36:13 +02:00
kimkulling d0932c405f fix duplicated node parsing. 2020-09-11 15:46:46 +02:00
Kim Kulling c1f50e116a fix next unittests. 2020-09-11 00:46:29 +02:00
Kim Kulling 31f3812241 XGL: fix import of node values. 2020-09-10 21:03:02 +02:00
kimkulling 6ec07e4dc7 XGL: next steps. 2020-09-10 17:31:30 +02:00
kimkulling cca9eddb1c Fix material-base AMF-unittest. 2020-09-10 13:56:04 +02:00
Max Vollmer 615ffdf93f What: Throw instead of assert when input file is invalid.
Why: Assimp shouldn't crash on invalid files. Asserts are disabled on Release builds.
2020-09-10 10:47:58 +01:00
kkulling c2f0bf68af Merge branch 'pugi_xml' of https://github.com/assimp/assimp into pugi_xml 2020-09-10 11:02:51 +02:00
Kim Kulling d854f3b842 AMF: fix adding for child-nodes. 2020-09-10 00:05:53 +02:00
Kim Kulling bd91033172
Merge branch 'master' into collada_animation_ticks_per_sec_issue_3162 2020-09-08 20:53:00 +02:00
Kim Kulling 4f30b2aa5c
Merge pull request #3391 from Naios/unref_param
Fix an unreferenced formal parameter warning on MSVC when no exporter…
2020-09-08 20:35:46 +02:00
Kim Kulling 0618db1f99 AMF: some smaller refactorings to improve readability. 2020-09-07 20:52:46 +02:00
Denis Blank f3b25b999b Fix an unreferenced formal parameter warning on MSVC when no exporter is built 2020-09-05 23:20:31 +02:00
Kim Kulling ef6b93a949
Merge branch 'master' into collada_animation_ticks_per_sec_issue_3162 2020-09-04 16:27:47 +02:00
Kim Kulling 689406fbda Fix Colladat import. 2020-09-04 07:33:10 +02:00
Rahul Sheth 78b30d1752
Merge branch 'master' into rbsheth_hunter_rapidjson 2020-09-03 09:51:32 -04:00
Rahul Sheth df56a97794 Dummy commit 2 to trigger Github Actions 2020-09-03 08:41:22 -04:00
Rahul Sheth 56a3759925 Dummy commit 1 2020-09-03 08:41:08 -04:00
kimkulling 1e6a1c63ec Remove irrxml search. 2020-09-03 11:45:43 +02:00
Kim Kulling 9ce0671134
Merge pull request #3387 from Gargaj/patch-1
add missing define to glTF importer
2020-09-03 08:42:18 +02:00
Kim Kulling be5089ae40 Collada: correct parsing of float data in xml nodes. 2020-09-02 22:38:19 +02:00
Kim Kulling 075540e15a AMF: fixes. 2020-09-02 22:37:57 +02:00
Kim Kulling 0b8ed5c03a fix crash when x3d is empty 2020-09-02 21:49:40 +02:00
Kim Kulling 34f343233e 3ml: fix xml parsing. 2020-09-02 21:49:20 +02:00
Kim Kulling 0c05398602 xml-parser: ensure that traverse-collectors are only collecting xmlnodes. 2020-09-02 21:48:58 +02:00
kkulling 87d2580aad fix 3mf rel-parsing 2020-09-02 17:45:37 +02:00
Gargaj 9053dfea05
add missing define to glTF importer 2020-09-02 16:28:12 +02:00
Kim Kulling 3081e83f43
Merge pull request #3385 from jnhyatt/smart-ptr-fix
Fix Bad Ownership Acquisition
2020-09-02 16:24:25 +02:00
Kim Kulling 4dad3eab3f
Merge branch 'master' into smart-ptr-fix 2020-09-02 16:14:45 +02:00
Kim Kulling a7d3172dd8
Merge pull request #3386 from flowtsohg/master
Update Jassimp's AiTextureType.java
2020-09-02 16:14:08 +02:00
Chananya Freiman 542d784457 Update Jassimp's AiTextureType.java
The newer PBR enums are missing, making it impossible to import many models.
2020-09-02 02:52:56 +03:00
Kim Kulling 73fa2cbe88 Fix memory handling of xml-nodes in the parser. 2020-09-01 21:48:50 +02:00
Joshua Hyatt 638499a278 Replace unique_ptr and add custom deleter 2020-09-01 10:30:31 -06:00
Kim Kulling 3c2133a3b9 fix node collection for collada xml parsing 2020-09-01 07:51:17 +02:00
kimkulling e62b4e5cce next iteration. 2020-08-31 16:10:38 +02:00
Kim Kulling 6d5c388780 Introduce node iterator. 2020-08-30 21:10:04 +02:00
Joshua Hyatt dcf9a7b2d8 Conform variable names to code standards 2020-08-29 23:58:31 -06:00
Joshua Hyatt 953e976de6 Close stream when finished 2020-08-29 23:56:50 -06:00
Joshua Hyatt cc2613f264 Replace unique_ptr with raw pointer 2020-08-29 23:06:33 -06:00
Joshua Hyatt c769f8d4ad Replace unique_ptr with raw pointer to avoid destructing stream 2020-08-29 22:21:34 -06:00
kimkulling 30a4eae17f simplify some ttributes access in loaded xml. 2020-08-28 16:25:22 +02:00
kimkulling 0730eebe6f fix collada handling of xml nodes. 2020-08-28 16:17:56 +02:00
crocdialer 3c98197be0 set aiAnimation->mTicksPerSecond to 1000.0. this is analog to the behaviour of gltf2-importer 2020-08-28 16:09:15 +02:00
Kim Kulling b7e9595e54 fix loop of xml-files. 2020-08-28 00:09:51 +02:00
Rahul Sheth 6b32f34fc2 Try disabling C4389 for GTest only for MSVC 2020-08-27 17:02:42 -04:00
Rahul Sheth b15c111805 Try Hunter-based Github Actions 2020-08-27 16:55:39 -04:00
Rahul Sheth 5f19c8890b Update to the latest Hunter 2020-08-27 16:51:34 -04:00
Rahul Sheth 59c8b4ed84 Move RapidJSON definitions to CMake 2020-08-27 16:51:06 -04:00
kimkulling 582a8b1887 Fix xml-migration bild. 2020-08-27 17:05:09 +02:00
kimkulling 6f77d2e06d Prepare unittest for XmlParser. 2020-08-27 17:04:58 +02:00
Kim Kulling c359b973bb finish migration of collada. 2020-08-26 22:31:46 +02:00
Rahul Sheth 5087348a37 Build tests and tools with Hunter 2020-08-25 11:30:46 -04:00
Kim Kulling 904f17f29f next collada-iteration 2020-08-24 07:44:54 +02:00
Kim Kulling 7adfe1f2d8 Xml: introduce helper for attribute parsing. 2020-08-21 06:45:30 +02:00
Malcolm Tyrrell 962fe7cd4d Oops. Fix string to match restored error text. 2020-08-20 15:10:11 +01:00
Malcolm Tyrrell fa93ba76fe Do need to export base class. 2020-08-20 15:01:24 +01:00
Malcolm Tyrrell 16c227e27c Undo one other small change. 2020-08-20 14:53:00 +01:00
Malcolm Tyrrell 8f893e3653 Actually, just keep the old behaviour for now. 2020-08-20 14:32:15 +01:00
Kim Kulling cb631517a7 next iteration. 2020-08-19 22:44:13 +02:00
Malcolm Tyrrell 9b5e758bdd Even simpler DeadlyErrorBase 2020-08-19 17:59:13 +01:00
Malcolm Tyrrell 6f9c61e157 Use case which matches surrounding code. 2020-08-19 17:57:25 +01:00
Malcolm Tyrrell 6c2ceb55f8 Simplify some FBX error code. 2020-08-19 17:20:57 +01:00
kimkulling d393f677ce Collada: next methods migrated. 2020-08-19 17:10:30 +02:00
Malcolm Tyrrell d7c65c36cd Add unit test for formatting. 2020-08-19 11:31:46 +01:00
Malcolm Tyrrell 3ccf503d3e Forward template arguments. 2020-08-19 11:31:32 +01:00
Kim Kulling 56381241c5 move hasAttribute to XmlParser scope. 2020-08-19 00:19:56 +02:00
Kim Kulling 554ed1bf91 next step.s 2020-08-18 20:44:06 +02:00
Malcolm Tyrrell 0f6127e90e No need to build strings. 2020-08-18 18:21:20 +01:00
Malcolm Tyrrell e1a0163e7e Make all exceptions available. 2020-08-18 18:14:51 +01:00
Malcolm Tyrrell b7c789da67 Stop concatenating std::strings. Use formatter. 2020-08-18 17:35:08 +01:00
kimkulling 6a8edb21f8 fix merge issues 2020-08-18 17:41:37 +02:00
Malcolm Tyrrell 0ffcdf160e Build formatting into DeadlyImportError 2020-08-18 16:32:34 +01:00
kimkulling 7e93ae4428 3MF: Migration. 2020-08-18 16:54:29 +02:00
Malcolm Tyrrell 974252bd8f Fix two warnings that annoy clang. 2020-08-18 10:33:47 +01:00
Malcolm Tyrrell 4f1e904ec8 Fix typo. 2020-08-18 10:33:47 +01:00
Malcolm Tyrrell 829ff1adf0 Maybe this will help. 2020-08-18 10:33:47 +01:00
Malcolm Tyrrell a4110a59c5 Use runtime error. 2020-08-18 10:33:47 +01:00
Malcolm Tyrrell 19cdfd12df Unit test for internal failures. 2020-08-18 10:33:47 +01:00
Malcolm Tyrrell b1ed751b83 Provide an API for accessing internal errors. 2020-08-18 10:33:42 +01:00
Kim Kulling 48ec3ef458
Merge pull request #3374 from fuj1n/update_utf8cpp
Update utf8cpp to fix use of C++17 deprecated feature
2020-08-17 21:11:05 +02:00
Arthur (fuj1n) Uzulin 995ab805ff Update utf8cpp to fix use of C++17 deprecated feature 2020-08-17 17:54:48 +10:00
Kim Kulling 51a417ce6f
Merge pull request #3372 from lsliegeo/nff_ai_real
NFF importer double precision support
2020-08-16 13:56:33 +02:00
lsliegeo 0d00ff7043 use ai_real instead of float 2020-08-15 14:57:49 +02:00
Kim Kulling 9fc00cbf74
Merge pull request #3369 from assimp/issue_3364
Fix incorrect index
2020-08-11 20:50:11 +02:00
Kim Kulling 1bbae19779
Fix leak 2020-08-11 20:28:12 +02:00
Kim Kulling b1b9fa94cf
Update utStandardShapes.cpp 2020-08-11 20:21:35 +02:00
Kim Kulling 9bad20e99e
Add test to CMakeLists 2020-08-11 20:03:30 +02:00
Kim Kulling 45f76f36f3
Add test to CMakeLists 2020-08-11 20:03:23 +02:00
Kim Kulling 153a6efecc
Add test 2020-08-11 20:02:14 +02:00
Kim Kulling 729882debb
Fix incorrect index
closes https://github.com/assimp/assimp/issues/3364
2020-08-11 19:57:36 +02:00
Kim Kulling 394651e640 x3d: migration of goups. 2020-08-10 22:13:45 +02:00
Kim Kulling f90bb2ca26
Merge pull request #3363 from malortie/fix-cmake-override-output-path3
Fixed runtime output directory overridden.
2020-08-08 10:54:31 +02:00
Kim Kulling b3f85613fc
Merge branch 'master' into fix-cmake-override-output-path3 2020-08-08 10:42:36 +02:00
Kim Kulling 65265594ba
Merge pull request #3362 from assimp/issue_3004
Fix nncorrectly named Assimp .dll
2020-08-08 09:19:53 +02:00
Kim Kulling fbd9c9651d
fix clang detection 2020-08-08 09:06:41 +02:00
Marc-Antoine Lortie 11daed69d3 Fixed overwriting of CMake global output directory variables. 2020-08-07 16:04:39 -04:00
Kim Kulling 30d83d40c1
fix brackets for template in template 2020-08-07 19:15:28 +02:00
kimkulling 29b72fe6d4 fix cmake warning 2020-08-07 16:22:34 +02:00
kimkulling aaea564cbe closes https://github.com/assimp/assimp/issues/3004 : use prefix when ms_tools were found. 2020-08-07 16:14:44 +02:00
Kim Kulling 4c8b9fb96d
Merge pull request #3360 from assimp/issue_2992
closes https://github.com/assimp/assimp/issues/2992: detect double support
2020-08-07 14:41:30 +02:00
kimkulling 13d7fad7f7 closes https://github.com/assimp/assimp/issues/2992: add single or double precision + missing compilers. 2020-08-07 14:23:07 +02:00
Kim Kulling 8504c191db
Merge pull request #3356 from qarmin/more_ubsan_flags
Added more undefined sanitizer flags
2020-08-05 20:24:13 +02:00
Kim Kulling 919f730844
Merge branch 'master' into more_ubsan_flags 2020-08-05 19:59:18 +02:00
Kim Kulling 89eb7f889a
Merge pull request #3355 from assimp/issue_3353
Fix wrong function defines
2020-08-05 19:56:46 +02:00
Kim Kulling 58bf23be55
Merge branch 'master' into issue_3353 2020-08-05 18:03:26 +02:00
Kim Kulling b94183376c
Fix possible overflow in new. 2020-08-05 17:56:44 +02:00
Kim Kulling c238508706
Merge pull request #3357 from assimp/issue_3291
Export opacity is 3DS
2020-08-04 21:04:58 +02:00
Kim Kulling 1f348c5fc0
Remove redundant float f 2020-08-04 20:55:29 +02:00
Kim Kulling aabf12827b
fix typo 2020-08-04 17:52:43 +02:00
Kim Kulling 855b47452e
Export opacity is 3DS
closes https://github.com/assimp/assimp/issues/3291
2020-08-04 17:41:28 +02:00
Rafał Mikrut c60373c0ba
Merge branch 'master' into more_ubsan_flags 2020-08-03 23:17:53 +02:00
Rafał Mikrut 447805f01a Added more undefined sanitizer flags 2020-08-03 23:12:08 +02:00
Kim Kulling aa6c35f683
Merge pull request #3350 from MalcolmTyrrell/fbxVersionCheck
FBX Version/Size Check
2020-08-03 21:30:03 +02:00
Kim Kulling e7ae576614
undo change 2020-08-03 15:54:19 +02:00
Kim Kulling 435bba30dd
Move functions into the correct preprocessor branch 2020-08-03 09:30:02 +02:00
Kim Kulling 008e551f8e
Merge branch 'master' into fbxVersionCheck 2020-07-31 14:33:21 +02:00
Kim Kulling ac8a8a5ad4
Merge pull request #3349 from rmstyrczula/fixFbxExportNullptr
FBXExport: Fix crash if scene->mMetaData is null
2020-07-31 14:32:32 +02:00
Malcolm Tyrrell 0282f358a4 Remove unneeded check. 2020-07-31 12:40:17 +01:00
Malcolm Tyrrell 301bae3967 Improve message 2020-07-30 16:37:41 +01:00
Malcolm Tyrrell eaf0587dd8 FBX Version/Size Check 2020-07-30 14:56:01 +01:00
Ryan Styrczula 3170c3d15c FBXExport: Fix crash if scene->mMetaData is null 2020-07-30 09:21:43 -04:00
Kim Kulling 58b81a2590 start migrating X3D. 2020-07-26 10:17:21 +02:00
Kim Kulling 575ce6136d
Merge pull request #3347 from rbsheth/rbsheth_fix_warn
Fixing more build warnings
2020-07-25 19:06:21 +02:00
Rahul Sheth ad18e365e5 Fixing more warnings 2020-07-24 16:33:36 -04:00
Kim Kulling 6828cf2f03
Merge pull request #3328 from awr1/fix-mingw-priumax
Fix MinGW builds (issues related to pragmas and format strings)
2020-07-24 11:34:25 +02:00
Kim Kulling c7a9ef30cc
Merge branch 'master' into fix-mingw-priumax 2020-07-24 11:14:15 +02:00
Kim Kulling e8cbc0928e
Merge pull request #3346 from assimp/fix_compiler_warnings
Fix warning: comparison between unsigned and signed.
2020-07-24 11:11:39 +02:00
Kim Kulling 6886ea6c65 Fix warning: comparison between unsigned and signed. 2020-07-24 10:57:24 +02:00
Kim Kulling 59e15b7fd1
Merge pull request #3345 from assimp/fix_include
add missing include for logging.
2020-07-23 21:37:00 +02:00
Kim Kulling c62fa76cda
Merge branch 'master' into fix_include 2020-07-23 21:09:11 +02:00
Kim Kulling dcc8419722 add missing include for logging. 2020-07-23 21:01:08 +02:00
Kim Kulling 07c1396b50
Merge pull request #3344 from assimp/fix_include
use correct include.
2020-07-23 20:26:56 +02:00
Kim Kulling 9a4b3fd9de use correct include. 2020-07-23 20:16:11 +02:00
Kim Kulling 8edb0d5278
Merge pull request #3343 from assimp/fix_assimp_fuzzing
fix namespace issue in fuzzer.
2020-07-23 20:08:17 +02:00
Kim Kulling eb44eb13e6 fix namespace issue in fuzzer. 2020-07-23 19:15:46 +02:00
Kim Kulling c67a5bd903
Merge pull request #3342 from assimp/kimkulling-patch-7
Remove travis + assveyor.
2020-07-23 12:00:10 +02:00
Kim Kulling b2df27a6f0
Merge branch 'master' into kimkulling-patch-7 2020-07-23 11:46:33 +02:00
Kim Kulling c71dbcc37e
Merge pull request #3329 from MalcolmTyrrell/gltfIndexOutOfRangeFix
Handle Gltf2 files where a value in a mesh index buffer is out of range.
2020-07-23 11:43:39 +02:00
Kim Kulling 5e0b9e0f32
Remove travix + assveyor. 2020-07-23 11:35:36 +02:00
Kim Kulling 0f442b1ff2
Merge branch 'master' into gltfIndexOutOfRangeFix 2020-07-23 11:27:34 +02:00
Kim Kulling 52c29612f7
Merge pull request #3333 from RichardTea/acloader_enums
ACLoader: Use Surface type enums
2020-07-23 11:27:07 +02:00
Kim Kulling a33557be71
Merge branch 'master' into acloader_enums 2020-07-22 23:50:51 +02:00
Kim Kulling ac83e3593e
Merge pull request #3335 from RichardTea/issue-3334_cl_D9025
Issue 3334 cl d9025
2020-07-22 23:50:12 +02:00
Kim Kulling 162c8be184
Merge branch 'master' into issue-3334_cl_D9025 2020-07-22 22:57:14 +02:00
Kim Kulling a2186a0553
Merge pull request #3336 from RichardTea/issue-3332_msvc2017
Use #ifdef _MSC_VER for pragma warnings (Issue 3332)
2020-07-21 00:40:05 +02:00
Kim Kulling 76a6bb36f6
Merge branch 'master' into issue-3332_msvc2017 2020-07-20 22:04:35 +02:00
Kim Kulling 6a9ca736c1
Merge pull request #3337 from MeyerFabian/build/clang-cl-windows
clang with msvc backend
2020-07-20 21:04:55 +02:00
MeyerFabian 51e592123a Fix two deletions. 2020-07-20 18:42:57 +02:00
MeyerFabian a19e4e4112 Make clang with msvc abi work. 2020-07-20 18:28:50 +02:00
MeyerFabian 13ee2306c3 build/clang-cl-windows 2020-07-20 17:04:11 +02:00
RichardTea 9cad10a995 Disable MSVC warnings on all MSVC
Fixes the build on MSVC 2017 (and probably MSVC 2015)
2020-07-17 14:58:51 +01:00
RichardTea a4eceb7b3f Set CMP0092 the other way 2020-07-17 12:06:52 +01:00
RichardTea c527a33aa8 Merge remote-tracking branch 'upstream/master' 2020-07-17 12:00:38 +01:00
RichardTea ef37fc4632
Merge branch 'master' into issue-3334_cl_D9025 2020-07-17 11:59:53 +01:00
RichardTea ce133e5add Set CMake policy CMP0092
Disable cmake's automatic /W3 for MSVC
2020-07-17 11:58:17 +01:00
RichardTea f2e3e43fbc
Merge branch 'master' into acloader_enums 2020-07-17 11:30:50 +01:00
RichardTea 17b9403b7a ACLoader: Use enum for Surface flags 2020-07-17 11:23:50 +01:00
Kim Kulling b2e53783de
Merge branch 'master' into fix-mingw-priumax 2020-07-17 12:07:46 +02:00
Kim Kulling 37056f0242
Merge pull request #3327 from rbsheth/rbsheth_update_hunter
Hunter-related build fixes
2020-07-17 12:02:28 +02:00
Kim Kulling fa486240d5
Merge branch 'master' into rbsheth_update_hunter 2020-07-17 11:39:55 +02:00
Kim Kulling 1975579268
Merge pull request #3326 from rmstyrczula/master
DefaultIOStream: Remove assert on empty count
2020-07-17 11:33:02 +02:00
RichardTea 719cc82a1f Apply clangformat 2020-07-17 10:29:44 +01:00
RichardTea 8c60879485 Rollup to 'upstream/master' 2020-07-17 10:03:48 +01:00
Kim Kulling 516bdc2a4b
Merge branch 'master' into master 2020-07-16 22:48:02 +02:00
Kim Kulling c55ca47666
Merge pull request #3322 from AndrewJDR/master
Build viewer and publish artifacts on windows-msvc.
2020-07-16 22:47:17 +02:00
Kim Kulling 147c5f7cd2
Merge branch 'master' into master 2020-07-16 21:37:46 +02:00
Kim Kulling 0a165ee666
Merge pull request #3311 from ms-maxvollmer/gltf1_gltf2_split
Added macros to enable/disable GLTF1 and GLTF2 independently
2020-07-16 21:37:08 +02:00
Kim Kulling deddaf49df finish migrate ogrexmlserializer. 2020-07-16 11:33:28 +02:00
Kim Kulling df8792d24b
Merge branch 'master' into gltf1_gltf2_split 2020-07-16 10:45:55 +02:00
Kim Kulling 44fd987d57
Merge pull request #3330 from infosia/bad_nodeanim_ptr
fix invalid pointer for bone animation
2020-07-16 10:39:21 +02:00
Kota Iguchi 84e68eaf24 fix invalid pointer for bone animation 2020-07-16 15:26:02 +09:00
Malcolm Tyrrell 04df5f8b1e Don't use make_unique 2020-07-15 15:47:25 +01:00
Malcolm Tyrrell e51e07982d Remove generic lambda usage. 2020-07-15 15:05:42 +01:00
Malcolm Tyrrell e1bab44e19 Exception safety 2020-07-15 15:02:27 +01:00
Malcolm Tyrrell 37e1fb9cd7 Fix message 2020-07-15 14:19:13 +01:00
Malcolm Tyrrell f3170a96ba Ensure data does not depend on faces we may not have created. 2020-07-15 12:36:48 +01:00
Malcolm Tyrrell d4f5f29b44 Add missing asset 2020-07-15 12:22:39 +01:00
Malcolm Tyrrell fff6396e3c Rename to avoid overloading problems. 2020-07-15 12:22:28 +01:00
Malcolm Tyrrell 212903e935 Unit test for all indices out of range, and fix. 2020-07-15 12:19:00 +01:00
Malcolm Tyrrell 7e7161852a Add a unit test. 2020-07-15 11:19:10 +01:00
Malcolm Tyrrell c0d978786e Fix warning 2020-07-15 09:12:52 +01:00
Malcolm Tyrrell a56134ba33 Drop faces when indices are out of range. 2020-07-15 09:05:09 +01:00
awr1 77cf6e3433 Ensure that zip.h warning disable is pushed 2020-07-14 22:07:24 -05:00
awr1 638369e995 Try to fix lexing issue with preproc w/r/t __has_warning 2020-07-14 21:58:36 -05:00
awr1 cc8cd88d7a Preproc conditional should be &&, not || 2020-07-14 21:50:22 -05:00
awr1 bad0df9a1a Remove unnecessary inversion in preproc 2020-07-14 21:48:46 -05:00
awr1 b3f61f8759 Fix error where -Wunused-but-set-variable might not be available 2020-07-14 21:44:33 -05:00
awr1 3bf6963d20 Use a better divider for import error 2020-07-14 21:34:30 -05:00
awr1 93d567e3b1 Fix sprintf format string 2020-07-14 21:32:22 -05:00
awr1 700d8e6614 Fix MinGW builds (issues related to pragmas and format strings) 2020-07-14 21:19:07 -05:00
Rahul Sheth 0bad2c7b6a Move library configuration outside Hunter block 2020-07-14 19:00:42 -04:00
Rahul Sheth abc6b9ce4c ifdef fixes to fix MSVC warnings 2020-07-14 19:00:38 -04:00
Rahul Sheth 209a61d0e7 Update hunter and utf8cpp inclusion 2020-07-14 19:00:23 -04:00
Ryan Styrczula 84e342acd7 DefaultIOStream: Remove assert on empty count
fwrite() is valid to call with a 0 count, and will simply return 0.
See:
    https://en.cppreference.com/w/cpp/io/c/fwrite
    http://www.cplusplus.com/reference/cstdio/fwrite/

There are code paths where StreamWriter will call Tell(), which calls
Flush(), which calls Write(buffer.data(), 1, buffer.size()). This can
happen when nothing has yet been written to the buffer, so size is 0.
2020-07-14 10:39:18 -04:00
Kim Kulling b19ebf5d54 Fix merge conflicts. 2020-07-14 09:02:14 +02:00
Kim Kulling 8cfd2a4cc1 Migrate OgreSerializer. 2020-07-14 09:00:06 +02:00
Kim Kulling 67a710efad
Merge pull request #3320 from IOBYTE/master
add triangle strip support to AC file loader
2020-07-13 22:10:12 +02:00
Kim Kulling f5d5d7c5ed
Merge branch 'master' into master 2020-07-13 20:35:24 +02:00
Kim Kulling bdcad5cd0a
Merge pull request #3292 from rmstyrczula/master
FBXExporter: Use scene metadata for global settings
2020-07-13 20:32:44 +02:00
Ryan Styrczula 0c2f7a119c FBXExporter: Forgot WritePropColor defaultValue 2020-07-13 13:56:06 -04:00
Ryan Styrczula 6619ec8253 FBXExporter: Use scene metadata for global settings
Models with non-standard axes and scale are not imported and exported
correctly if the input metadata is ignored.
2020-07-13 13:56:06 -04:00
Kim Kulling c8d759de64
Merge branch 'master' into master 2020-07-12 19:11:02 +02:00
Kim Kulling aff5bba9da
Merge pull request #3289 from ifiddynine/patch-1
Fix Blender .fbx metalness detection
2020-07-12 19:05:55 +02:00
Kim Kulling 78d0b81b6c
Merge branch 'master' into patch-1 2020-07-12 18:54:34 +02:00
Kim Kulling 411bf89b64
Merge pull request #3323 from assimp/LoicFr-master
Loic fr master
2020-07-12 18:52:38 +02:00
Kim Kulling eaac92830a Merge branch 'master' of https://github.com/LoicFr/assimp into LoicFr-master 2020-07-12 12:05:34 +02:00
Andrew Johnson a9a0c30932 Build viewer and publish artifacts on windows-msvc.
This commit introduces Github Actions support for building the tools and viewer and making
these available for download as a zip file in the artifacts area of the Github Actions page.
This allows for continuous validation that the viewer and tools build successfully, and
the download is useful for quick testing of the very latest assimp functionality without needing
to download and build it from source.

This only applies to windows-msvc, since the assimp viewer is only supported on that platform.
It downloads the June 2010 DirectX SDK from the Microsoft servers and installs it. It also
uses a cache to prevent having to perform this DX SDK download and installation repeatedly for every
commit.

Note, it's necessary install the older June 2010 DXSDK because assimp uses the now deprecated D3DX libraries,
and these libraries are not included in the stock Windows Server image provided by Github Actions.
2020-07-11 22:05:06 -07:00
Kim Kulling 231447c8d6
Merge pull request #3227 from thomasbiang/gltf2_sparseAccessor_export
Gltf2 Sparse Accessor Export (blendshape export using sparse accessor)
2020-07-11 23:06:47 +02:00
Kim Kulling b1dd77fbbc
Merge branch 'master' into gltf2_sparseAccessor_export 2020-07-11 22:57:31 +02:00
Kim Kulling ec156e4da3
Merge pull request #3280 from thomasbiang/extras_property_callback
Customize Extras in Gltf2 Exporter with ExporterProperty Callback
2020-07-11 22:56:38 +02:00
Kim Kulling 306e03d497
Merge branch 'master' into extras_property_callback 2020-07-11 22:46:19 +02:00
Kim Kulling 108b3a62e5
Update Exporter.hpp
revert merge issue
2020-07-11 22:45:45 +02:00
Kim Kulling 1324b4b27d
Merge pull request #3321 from assimp/kimkulling-patch-7
use c-style cast in a c-file
2020-07-11 22:43:44 +02:00
Kim Kulling b8ec93aa21
use c-styl cast in a c-file 2020-07-11 22:34:43 +02:00
Kim Kulling 2cd1192bf1
Merge pull request #3300 from mahiuchun/strrchr
Use strrchr() when finding the '.' that begins the file extension.
2020-07-11 21:19:55 +02:00
Kim Kulling 9682ab0685
Merge branch 'master' into strrchr 2020-07-11 21:10:58 +02:00
Kim Kulling 21678df589 ogre + collada migration. 2020-07-10 22:25:38 +02:00
Kim Kulling 1379175f18
Merge pull request #3314 from assimp/issue_3252
closes https://github.com/assimp/assimp/issues/3252: fix build.
2020-07-09 09:50:32 +02:00
Robert Reif 628394baec check for invalid vertex 2020-07-07 23:29:54 -04:00
RichardTea d79a617e18 Rollup to 'upstream/master' 2020-07-07 20:03:10 +01:00
kimkulling 9aa468262f closes https://github.com/assimp/assimp/issues/3252: fix build. 2020-07-07 17:35:03 +02:00
Robert Reif 37c74f6fa3 add test to unit for acc file format loader 2020-07-06 20:16:22 -04:00
Robert Reif f753a6e7ad add acc file test using existing ac file converted to acc format 2020-07-06 20:14:03 -04:00
Robert Reif 6c29247180 add triangle strip support to AC file loader 2020-07-06 17:41:14 -04:00
Max Vollmer (Microsoft Havok) fb11705dd0
Merge branch 'master' into gltf1_gltf2_split 2020-07-06 09:11:06 +01:00
Max Vollmer abf43eaf74 * Added ASSIMP_BUILD_NO_GLTF1_IMPORTER, ASSIMP_BUILD_NO_GLTF2_IMPORTER, ASSIMP_BUILD_NO_GLTF1_EXPORTER, and ASSIMP_BUILD_NO_GLTF2_EXPORTER to allow disabling GLTF1 and GLTF2 independently.
* ASSIMP_BUILD_NO_GLTF_IMPORTER and ASSIMP_BUILD_NO_GLTF_EXPORTER remain with same behavior as before
2020-07-05 19:22:31 +01:00
Kim Kulling a211aff522
Merge pull request #3307 from MalcolmTyrrell/defsIncludeFix
Ensure asserts are defined where expected.
2020-07-05 20:20:23 +02:00
Kim Kulling d04f8b3174
Merge branch 'master' into defsIncludeFix 2020-07-05 18:59:37 +02:00
Kim Kulling 95a23af16f
Merge pull request #3309 from mahiuchun/const
Improve ToBinary() for double precision.
2020-07-04 21:22:42 +02:00
Kim Kulling 77b705048b fix merge issues. 2020-07-04 13:42:23 +02:00
Kim Kulling 839986ca14 next step of AMF-Migration. 2020-07-04 09:04:06 +02:00
Hill Ma 3fb7747429 Improve ToBinary() for double precision.
The constant 0x80000000 is specific to 32 bit types. Make the bit mask
according to the size of types.
2020-07-03 18:14:45 -07:00
Kim Kulling d74c10dcb7 Merge branch 'master' into pugi_xml 2020-07-03 17:29:38 +02:00
Kim Kulling 10c709831f
Merge pull request #3306 from assimp/issue_3305
closes https://github.com/assimp/assimp/issues/3305: remove merge issue.
2020-07-02 17:46:53 +02:00
Malcolm Tyrrell 51150cb3df Ensure asserts are defined where expected. 2020-07-02 14:53:29 +01:00
Kim Kulling 693da43095 closes https://github.com/assimp/assimp/issues/3305: remove merge issue. 2020-07-02 15:22:06 +02:00
Kim Kulling b1369d0912 next steps. 2020-07-02 15:18:59 +02:00
RichardTea 9e27fb3b89 Rollup to upstream/master 2020-07-01 16:28:32 +01:00
Kim Kulling 7b7764afb9
Merge pull request #3301 from mahiuchun/double
Fix build when ASSIMP_DOUBLE_PRECISION is on.
2020-06-30 21:24:35 +02:00
Kim Kulling 7fda533484
Merge branch 'master' into double 2020-06-30 21:12:02 +02:00
Kim Kulling dea412c9a0
Merge pull request #3303 from malortie/fix-loop-variable-HL1MDLLoader
Fixed variable in loop - HL1MDLLoader.cpp
2020-06-30 21:11:32 +02:00
Yingying Wang 97085c1c05 update sync 2020-06-30 11:48:37 -07:00
Yingying Wang 36f899bf09 sync update 2020-06-30 11:45:11 -07:00
Yingying Wang 3f2e5518eb update sync 2020-06-30 11:29:08 -07:00
Marc-Antoine Lortie 03340787ec Fixed variable in loop - HL1MDLLoader.cpp
Commit 7e5a0acc48 made changes to HL1MDLLoader.cpp. Several variables have been renamed. A loop variable 'i' was renamed to faceIdx, but one reference was left unchanged.
2020-06-29 07:50:51 -04:00
Kim Kulling 4ff5a06ef4
Merge pull request #3302 from assimp/kimkulling-patch-6
Move patreon to contribution
2020-06-29 12:52:19 +02:00
Kim Kulling 1ab7a3a16b
Merge branch 'master' into kimkulling-patch-6 2020-06-29 10:36:09 +02:00
Kim Kulling 718f81ddcf
Merge pull request #3293 from ifiddynine/patch-2
Fix Maya PBR & stingray texture detection
2020-06-29 10:35:41 +02:00
Kim Kulling eeb4a981bd
Merge branch 'master' into patch-2 2020-06-29 09:55:55 +02:00
Kim Kulling 9a87338854
Update Readme.md 2020-06-29 09:55:29 +02:00
Kim Kulling 28b65c84b0
Create fileformats.md
Optimize the readabilaty of the frontpage.
2020-06-29 09:52:36 +02:00
Kim Kulling ba94bfd197
Move patreon to contribution 2020-06-29 09:51:00 +02:00
Hill Ma 30f09e9fc0 Fix build when ASSIMP_DOUBLE_PRECISION is on.
Tested:
$ cmake -DASSIMP_DOUBLE_PRECISION=1 -DASSIMP_BUILD_MDL_IMPORTER=0 ..; make

The MDL importer is disabled due to the fact that there is some float-only code
in MDL. This also means bin/assimp and bin/unit would not link successfully with
the above build flags.
2020-06-28 17:36:21 -07:00
Hill Ma 0b18d27042 Use strrchr() when finding the '.' that begins the file extension.
Sometimes we encounter file paths like ../foo/bar.obj; searching from the end of
the string would yield the correct result.
2020-06-28 16:02:33 -07:00
Kim Kulling 879ff365fc
Merge pull request #3299 from assimp/rename_fuzz_target
rename fuzzer target
2020-06-28 19:27:26 +02:00
Kim Kulling b2f05a9a54 rename fuzzer target 2020-06-28 19:18:36 +02:00
Kim Kulling fb20e15163 start to migrate colladat and amf 2020-06-27 15:57:06 +02:00
Kim Kulling 45531df9aa
Merge pull request #3298 from Evangel63/recursive_metadata
Added arbitrary recursive metadata to allow for glTF2's extensions to…
2020-06-27 15:52:16 +02:00
Evangel 6d85280c8d Added bool, removed unused debug parameter 2020-06-27 12:53:26 +10:00
Evangel d75d59a4fd Added operator== and operator!= to aiMetadata to allow for testing.
Updated utMetadata.copy_test to reflect that there's now 8 metadata types.
2020-06-26 15:07:42 +10:00
Evangel f6b4370f6a Added arbitrary recursive metadata to allow for glTF2's extensions to be properly represented.
Primary changes are to include/assimp/metadata.h, adding in the aiMetadata GetAiType function,
adding the operator= to allow an aiMetadata type to be assigned, adding a check for the
AI_AIMETADATA type flag as it can't be trivially memcpy'd.

operator= is implemented with a by-value argument as then the copy is made by the copy
constructor and we can just swap everything out and let the destructor handle the mess.

Implemented parsing of the "extensions" flag on all glTF2 Nodes. Doesn't use the ReadValue
helper function on numbers as it did not seem to fill out the Nullable structure properly.
2020-06-26 14:28:41 +10:00
Kim Kulling b7b38c2282
Merge branch 'master' into patch-2 2020-06-25 16:52:40 +02:00
Kim Kulling 8a57d5df40
Merge pull request #3294 from rmstyrczula/FindInvalidData
FindInvalidDataProcess: Mark removed meshes as "out"
2020-06-25 16:50:51 +02:00
Kim Kulling ba6af9ff98
Merge branch 'master' into FindInvalidData 2020-06-25 16:41:24 +02:00
Kim Kulling 50b55726d2
Merge pull request #3297 from MalcolmTyrrell/aiAssertHandler
Allow users to customize the behavior of assert violations
2020-06-25 14:15:32 +02:00
Kim Kulling 95e822a6ec
Merge branch 'master' into aiAssertHandler 2020-06-24 20:47:10 +02:00
Kim Kulling e845988c22
Merge pull request #3296 from assimp/replace_NULL
Repo-Cleanup
2020-06-24 20:45:50 +02:00
Kim Kulling 1466bbacf8 fix unittests. 2020-06-24 20:30:02 +02:00
Malcolm Tyrrell 170c00eee7 Useful comment. 2020-06-24 11:51:03 +01:00
Malcolm Tyrrell edaa8e4a80 Need to use ASSIMP_BUILD_DEBUG. 2020-06-24 11:37:43 +01:00
Kim Kulling ae05dbb252 define CheckValidFacesIndices also in release builds. 2020-06-23 21:11:18 +02:00
Kim Kulling 6205af4efb replace NULL and avoid ai_assert with more than 2 tests. 2020-06-23 21:05:42 +02:00
Malcolm Tyrrell 2977643352 Fix. 2020-06-23 12:08:06 +01:00
Malcolm Tyrrell 9188f56839 Allow assert handling to be replaced. 2020-06-23 11:55:51 +01:00
Ryan Styrczula 5717ea466f FindInvalidDataProcess: Mark removed meshes as "out"
There's a code path where an input scene only has a single mesh.
In this case, if ProcessMesh returns 2, we delete the mesh and move on
with the postprocessing. UpdateMeshReferences is not called and so the
deleted mesh is left dangling in nodes.

In a later step (SplitMesh in my testing), it then tries to deference a
null pointer and we explode.

With `out = true`, we can now hit the DeadlyImportError instead of a
segfault.
2020-06-22 17:24:16 -04:00
Filip Lundgren 2006286528
Fix Maya PBR & stingray texture detection 2020-06-22 23:14:16 +02:00
Filip Lundgren ba09e1ef94
Fix Blender .fbx metalness detection 2020-06-21 23:56:11 +02:00
Kim Kulling 6397bfbf90 replace NULL by nullptr on loadFile. 2020-06-21 12:03:38 +02:00
Kim Kulling c70d57be4f
Merge pull request #3288 from infosia/themachinery-issues-0001
Check invalid vertex id for bone weight
2020-06-20 21:40:18 +02:00
Kota Iguchi 6acaaee80f Check invalid vertex id for bone weight 2020-06-20 15:27:28 +09:00
Kim Kulling c2a732938e
Merge pull request #3287 from assimp/issue_3253
closes https://github.com/assimp/assimp/issues/3253 : remove useless …
2020-06-18 20:01:03 +02:00
Kim Kulling b3af5c5a14
closes https://github.com/assimp/assimp/issues/3253 : remove useless code 2020-06-17 20:37:39 +02:00
Kim Kulling 4cd7e48f19
Merge pull request #3284 from assimp/kimkulling-patch-6
Update issue templates
2020-06-17 09:04:24 +02:00
Kim Kulling bb613df543 Update issue templates
To make our life easier
2020-06-16 16:31:47 +02:00
Kim Kulling f776cc8008
Merge pull request #3248 from assimp/issue_3165
closes https://github.com/assimp/assimp/issues/3165: fix gcc build.
2020-06-15 21:44:22 +02:00
ywang e65434bf82 extra callback 2020-06-11 17:37:06 -07:00
ywang f57e7221c0 temp 2020-06-10 13:23:29 -07:00
Yingying Wang 578a7ac502 add Callback API in ExporterProperties 2020-06-09 11:20:48 -07:00
Yingying Wang 8fed101432 avoid all zero 2020-06-08 16:18:11 -07:00
Yingying Wang f18f1a35f6 accommodate linux build 2020-06-08 14:49:50 -07:00
Yingying Wang 2065512470 remove comments 2020-06-08 14:41:53 -07:00
Yingying Wang 5d1cff5496 Merge branch 'gltf2_sparseAccessor_export' of https://github.com/thomasbiang/assimp into gltf2_sparseAccessor_export 2020-06-08 14:33:58 -07:00
Yingying Wang 12dc736d94 Merge branch 'master' of https://github.com/thomasbiang/assimp into gltf2_sparseAccessor_export 2020-06-08 14:32:23 -07:00
Yingying Wang 71b16bf3df Merge branch 'master' of https://github.com/thomasbiang/assimp into gltf2_sparseAccessor_export 2020-06-08 14:30:32 -07:00
Kim Kulling a399d1bd25
Merge branch 'master' into gltf2_sparseAccessor_export 2020-06-07 17:57:08 +02:00
FRICOTEAUX 87584eb007 glTF2: fix "file size doesn't match" issue when importing GLB in Blender 2020-05-28 11:05:38 +02:00
Yingying Wang 98767cbb08 pull master 2020-05-27 10:23:28 -07:00
Kim Kulling f4dd5eafd0
Merge branch 'master' into master 2020-05-26 21:48:39 +02:00
Kim Kulling 2be731d1bf Merge branch 'master' into pugi_xml 2020-05-22 10:09:46 +02:00
Yingying Wang 50f0a86798 conditional export 2020-05-19 16:10:41 -07:00
Yingying Wang c10e409a5d merge 2020-05-18 12:16:45 -07:00
xiaozhuai 80c88ffc73 optimize CMakeLists.txt 2020-05-18 15:40:12 +08:00
Yingying Wang b8e39b58d1 clean up 2020-05-15 12:32:58 -07:00
Yingying Wang f6720271cb sparce accessor exporter 2020-05-15 12:20:31 -07:00
RichardTea e1decbd532 Merge remote-tracking branch 'upstream/master' 2020-05-05 09:30:44 +01:00
Trevor David Black a0aa067b5f Moved Texture writing into its own function 2020-05-01 08:35:04 -07:00
Trevor David Black 2c9d3bea64 Printing out unique textures 2020-04-30 14:01:09 -07:00
Trevor David Black 3dc550a9b2 Got a working geometry prototype, sponza renders correctly when camera and light is added 2020-04-25 00:10:31 -07:00
Trevor David Black 07065e2235 Working first proof of concept. Renders ambient term in pbrt 2020-04-22 13:38:06 -07:00
Trevor David Black cb88210c62 Completed scene wide rendering output 2020-04-20 12:23:22 -07:00
Trevor David Black 1045fb7798 Got 90 percent solution for exporting camera data 2020-04-20 11:55:46 -07:00
Trevor David Black f9f2d617a2 Added a very basic camera. Still work to do 2020-04-17 10:42:13 -07:00
Trevor David Black 3ad53ab630 Printing file metadata 2020-04-08 13:29:03 -07:00
Trevor David Black 8c3b374486 Pbrt file exporter hello world 2020-04-06 12:12:37 -07:00
Kim Kulling 03182c21b8 xml-migration amf - next steps. 2020-02-26 22:19:42 +01:00
Kim Kulling 979153522c xml-migration: migration of XGLImporter. 2020-02-05 22:51:39 +01:00
Kim Kulling 1a8d5667b6 xml-migration: migrate shared code from irr-loader. 2020-02-04 20:47:20 +01:00
Kim Kulling bd2ffc8d58 Merge branch 'pugi_xml' of https://github.com/assimp/assimp into pugi_xml 2020-02-03 21:19:30 +01:00
Kim Kulling c1fcee9c5a XMl-Migration: Migration of IrrMesh. 2020-02-03 21:19:03 +01:00
Kim Kulling 02df65d541
Merge branch 'master' into pugi_xml 2020-01-28 13:13:47 +01:00
Kim Kulling 00ad892a49 xml: last changes. 2020-01-27 23:54:59 +01:00
Kim Kulling 0cb236bae3 next steps. 2020-01-27 22:18:48 +01:00
Kim Kulling 8ef106e185 xml-migration: introduce xmlnode. 2020-01-27 22:11:27 +01:00
Kim Kulling 6a471b4390 xml-migration: next steps. 2020-01-27 22:10:42 +01:00
Kim Kulling 02acb3f8c2 Merge branch 'master' into pugi_xml 2020-01-23 21:26:04 +01:00
Kim Kulling 11f49f85c4 try to migrate AMF 2020-01-23 21:25:25 +01:00
Kim Kulling a905303764 IrrXml: replaced irrXml by pugixml. 2020-01-23 21:16:10 +01:00
Kim Kulling d48b93cf34 Merge branch 'master' into pugi_xml 2020-01-18 08:28:19 +01:00
Madrich a413774e24
Merge pull request #16 from assimp/master
Update
2019-11-25 14:09:26 +01:00
Kim Kulling 8761f3c67a add pugi to include. 2019-08-08 22:07:06 +02:00
Kim Kulling db3bb22933 Xml: Prepare replacement of irrXml. 2019-07-21 12:19:19 +02:00
Madrich 5fb77f8523
Merge pull request #15 from assimp/master
Update Fork
2019-07-13 06:49:58 +02:00
Madrich 990dc9453e
Merge pull request #14 from assimp/master
Update
2019-05-06 12:11:40 +02:00
2103 changed files with 315233 additions and 129213 deletions

View File

@ -1,2 +0,0 @@
service_name: travis-pro
repo_token: GZXuNlublKFy7HAewHAZLk5ZwgipTFAOA

3
.github/FUNDING.yml vendored
View File

@ -1,3 +1,2 @@
patreon: assimp
custom: https://www.paypal.com/cgi-bin/webscr?cmd=_s-xclick&hosted_button_id=4JRJVPXC4QJM4
open_collective: assimp open_collective: assimp
patreon: assimp

View File

@ -0,0 +1,32 @@
---
name: Bug report
about: Create a report to help us improve
title: 'Bug:'
labels: 'Bug'
assignees: ''
---
**Describe the bug**
A clear and concise description of what the bug is.
**To Reproduce**
Steps to reproduce the behavior:
1. Go to '...'
2. Click on '....'
3. Scroll down to '....'
4. See error
**Expected behavior**
A clear and concise description of what you expected to happen.
**Screenshots**
If applicable, add screenshots to help explain your problem.
**Platform (please complete the following information):**
- OS: [e.g. iOS]
- Browser [e.g. chrome, safari]
- Version [e.g. 22]
**Additional context**
Add any other context about the problem here.

View File

@ -0,0 +1,20 @@
---
name: Feature request
about: Suggest an idea for this project
title: ''
labels: 'Feature-Request'
assignees: ''
---
**Is your feature request related to a problem? Please describe.**
A clear and concise description of what the problem is. Ex. I'm always frustrated when [...]
**Describe the solution you'd like**
A clear and concise description of what you want to happen.
**Describe alternatives you've considered**
A clear and concise description of any alternative solutions or features you've considered.
**Additional context**
Add any other context or screenshots about the feature request here.

View File

@ -0,0 +1,25 @@
---
name: Technical debt
about: Create a report to help us to fix and detect tech debts
title: ''
labels: 'Techdebt'
assignees: ''
---
**Describe the technical debt**
A clear and concise description of what the tech debt is about.
**Better solution**
A clear and concise description of what you would expect.
**Screenshots**
If applicable, add screenshots to help explain your problem.
**Desktop (please complete the following information):**
- OS: [e.g. iOS]
- Browser [e.g. chrome, safari]
- Version [e.g. 22]
**Additional context**
Add any other context about the problem here.

11
.github/dependabot.yml vendored 100644
View File

@ -0,0 +1,11 @@
version: 2
updates:
- package-ecosystem: "github-actions"
directory: "/"
schedule:
interval: "weekly"
- package-ecosystem: "gitsubmodule"
directory: "/" # the .gitmodules file must be placed at the top-level directory of a git working tree
schedule:
interval: "weekly"
open-pull-requests-limit: 15 # Assimp has 15 dependencies

View File

@ -6,54 +6,187 @@ on:
pull_request: pull_request:
branches: [ master ] branches: [ master ]
permissions:
contents: write # to fetch code (actions/checkout),and release
jobs: jobs:
job: build:
name: ${{ matrix.os }}-${{ matrix.cxx }}-build-and-test name: ${{ matrix.name }}-build-and-test
runs-on: ${{ matrix.os }} runs-on: ${{ matrix.os }}
strategy: strategy:
fail-fast: false fail-fast: false
matrix: matrix:
name: [ubuntu-gcc, macos-clang, windows-msvc, ubuntu-clang] name: [ubuntu-latest-g++, macos-latest-clang++, windows-latest-cl.exe, ubuntu-latest-clang++]
# For Windows msvc, for Linux and macOS let's use the clang compiler, use gcc for Linux. # For Windows msvc, for Linux and macOS let's use the clang compiler, use gcc for Linux.
include: include:
- name: windows-msvc - name: windows-latest-cl.exe
os: windows-latest os: windows-latest
cxx: cl.exe cxx: cl.exe
cc: cl.exe cc: cl.exe
- name: ubuntu-clang - name: ubuntu-latest-clang++
os: ubuntu-latest os: ubuntu-latest
cxx: clang++ cxx: clang++
cc: clang cc: clang
- name: macos-clang - name: macos-latest-clang++
os: macos-latest os: macos-latest
cxx: clang++ cxx: clang++
cc: clang cc: clang
- name: ubuntu-gcc - name: ubuntu-latest-g++
os: ubuntu-latest os: ubuntu-latest
cxx: g++ cxx: g++
cc: gcc cc: gcc
steps: steps:
- uses: actions/checkout@v2 - name: ccache
uses: hendrikmuhs/ccache-action@v1.2
- uses: actions/checkout@v4
with:
submodules: true
- uses: lukka/get-cmake@latest - uses: lukka/get-cmake@latest
- uses: ilammy/msvc-dev-cmd@v1 - uses: ilammy/msvc-dev-cmd@v1
- uses: lukka/set-shell-env@v1 - name: Set Compiler Environment
uses: lukka/set-shell-env@v1
with: with:
CXX: ${{ matrix.cxx }} CXX: ${{ matrix.cxx }}
CC: ${{ matrix.cc }} CC: ${{ matrix.cc }}
- name: Cache DX SDK
id: dxcache
if: contains(matrix.name, 'windows')
uses: actions/cache@v4
with:
path: '${{ github.workspace }}/DX_SDK'
key: ${{ runner.os }}-DX_SDK
restore-keys: |
${{ runner.os }}-DX_SDK
- name: Download DXSetup
if: contains(matrix.name, 'windows') && steps.dxcache.outputs.cache-hit != 'true'
run: |
curl -s -o DXSDK_Jun10.exe --location https://download.microsoft.com/download/A/E/7/AE743F1F-632B-4809-87A9-AA1BB3458E31/DXSDK_Jun10.exe
cmd.exe /c start /wait .\DXSDK_Jun10.exe /U /O /F /S /P "${{ github.workspace }}\DX_SDK"
- name: Set Windows specific CMake arguments
if: contains(matrix.name, 'windows')
id: windows_extra_cmake_args
run: echo ":set-output name=args::=-DASSIMP_BUILD_ASSIMP_TOOLS=1 -DASSIMP_BUILD_ASSIMP_VIEW=1" >> $GITHUB_OUTPUT
- name: Set Hunter specific CMake arguments
if: contains(matrix.name, 'hunter')
id: hunter_extra_cmake_args
run: echo "args=-DBUILD_SHARED_LIBS=OFF -DASSIMP_HUNTER_ENABLED=ON -DCMAKE_TOOLCHAIN_FILE=${{ github.workspace }}/cmake/polly/${{ matrix.toolchain }}.cmake" >> $GITHUB_OUTPUT
- name: configure and build - name: configure and build
uses: lukka/run-cmake@v2 uses: lukka/run-cmake@v3
env:
DXSDK_DIR: '${{ github.workspace }}/DX_SDK'
with: with:
cmakeListsOrSettingsJson: CMakeListsTxtAdvanced cmakeListsOrSettingsJson: CMakeListsTxtAdvanced
cmakeListsTxtPath: '${{ github.workspace }}/CMakeLists.txt' cmakeListsTxtPath: '${{ github.workspace }}/CMakeLists.txt'
cmakeAppendedArgs: '-GNinja -DCMAKE_BUILD_TYPE=Release' cmakeAppendedArgs: '-GNinja -DCMAKE_BUILD_TYPE=Release ${{ steps.windows_extra_cmake_args.outputs.args }} ${{ steps.hunter_extra_cmake_args.outputs.args }}'
buildWithCMakeArgs: '-- -v' buildWithCMakeArgs: '--parallel 24 -v'
buildDirectory: '${{ github.workspace }}/build/' buildDirectory: '${{ github.workspace }}/build/'
- name: Exclude certain tests in Hunter specific builds
if: contains(matrix.name, 'hunter')
id: hunter_extra_test_args
run: echo "args=--gtest_filter=-utOpenGEXImportExport.Importissue1340_EmptyCameraObject:utColladaZaeImportExport.importBlenFromFileTest" >> $GITHUB_OUTPUT
- name: test - name: test
run: cd build/bin && ./unit run: cd build/bin && ./unit ${{ steps.hunter_extra_test_args.outputs.args }}
shell: bash shell: bash
- uses: actions/upload-artifact@v4
if: matrix.name == 'windows-msvc'
with:
name: 'assimp-bins-${{ matrix.name }}'
path: build/bin/assimp*.exe
- uses: marvinpinto/action-automatic-releases@latest
if: contains(matrix.name, 'windows-msvc-hunter')
with:
repo_token: "${{ secrets.GITHUB_TOKEN }}"
automatic_release_tag: "master"
prerelease: true
title: "AutoRelease"
files: |
build/bin/assimp*.exe
create-release:
needs: [build]
runs-on: ubuntu-latest
if: startsWith(github.ref, 'refs/tags/')
steps:
- id: create-release
uses: actions/create-release@v1
env:
GITHUB_TOKEN: '${{secrets.GITHUB_TOKEN}}'
with:
tag_name: '${{github.ref}}'
release_name: 'Release ${{github.ref}}'
draft: false
prerelease: true
- run: |
echo '${{steps.create-release.outputs.upload_url}}' > release_upload_url.txt
- uses: actions/upload-artifact@v4
with:
name: create-release
path: release_upload_url.txt
upload-release:
strategy:
matrix:
name: [ubuntu-latest-g++, macos-latest-clang++, windows-latest-cl.exe, ubuntu-latest-clang++, ubuntu-gcc-hunter, macos-clang-hunter, windows-msvc-hunter]
# For Windows msvc, for Linux and macOS let's use the clang compiler, use gcc for Linux.
include:
- name: windows-latest-cl.exe
os: windows-latest
cxx: cl.exe
cc: cl.exe
- name: ubuntu-latest-clang++
os: ubuntu-latest
cxx: clang++
cc: clang
- name: macos-latest-clang++
os: macos-latest
cxx: clang++
cc: clang
- name: ubuntu-latest-g++
os: ubuntu-latest
cxx: g++
cc: gcc
- name: ubuntu-gcc-hunter
os: ubuntu-latest
toolchain: ninja-gcc-cxx17-fpic
- name: macos-clang-hunter
os: macos-latest
toolchain: ninja-clang-cxx17-fpic
- name: windows-msvc-hunter
os: windows-latest
toolchain: ninja-vs-win64-cxx17
needs: [create-release]
runs-on: ubuntu-latest
if: startsWith(github.ref, 'refs/tags/')
steps:
- uses: softprops/action-gh-release@v2
with:
name: create-release
- id: upload-url
run: |
echo "url=$(cat create-release/release_upload_url.txt)" >> $GITHUB_OUTPUT
- uses: actions/download-artifact@v4
with:
name: 'assimp-bins-${{ matrix.name }}-${{ github.sha }}'
- uses: actions/upload-release-asset@v1
env:
GITHUB_TOKEN: '${{secrets.GITHUB_TOKEN}}'
with:
files: |
*.zip

26
.github/workflows/cifuzz.yml vendored 100644
View File

@ -0,0 +1,26 @@
name: CIFuzz
on: [pull_request]
jobs:
Fuzzing:
runs-on: ubuntu-latest
steps:
- name: Build Fuzzers
id: build
uses: google/oss-fuzz/infra/cifuzz/actions/build_fuzzers@master
with:
oss-fuzz-project-name: 'assimp'
dry-run: false
language: c++
- name: Run Fuzzers
uses: google/oss-fuzz/infra/cifuzz/actions/run_fuzzers@master
with:
oss-fuzz-project-name: 'assimp'
fuzz-seconds: 300
dry-run: false
language: c++
- name: Upload Crash
uses: actions/upload-artifact@v4
if: failure() && steps.build.outcome == 'success'
with:
name: artifacts
path: ./out/artifacts

51
.github/workflows/inno_setup vendored 100644
View File

@ -0,0 +1,51 @@
name: Build Windows Installer
on:
push:
branches: [ master ]
pull_request:
branches: [ master ]
jobs:
build:
name: Build the Inno Setup Installer
runs-on: windows-latest
steps:
- uses: actions/checkout@v4
- uses: lukka/get-cmake@latest
- uses: ilammy/msvc-dev-cmd@v1
- name: Cache DX SDK
id: dxcache
uses: actions/cache@v4
with:
path: '${{ github.workspace }}/DX_SDK'
key: ${{ runner.os }}-DX_SDK
restore-keys: |
${{ runner.os }}-DX_SDK
- name: Download DXSetup
run: |
curl -s -o DXSDK_Jun10.exe --location https://download.microsoft.com/download/A/E/7/AE743F1F-632B-4809-87A9-AA1BB3458E31/DXSDK_Jun10.exe
cmd.exe /c start /wait .\DXSDK_Jun10.exe /U /O /F /S /P "${{ github.workspace }}\DX_SDK"
- name: Set Windows specific CMake arguments
id: windows_extra_cmake_args
run: echo "::set-output name=args::-DASSIMP_BUILD_ASSIMP_TOOLS=1 -DASSIMP_BUILD_ASSIMP_VIEW=1 -DASSIMP_BUILD_ZLIB=1"
- name: configure and build
uses: lukka/run-cmake@v3
env:
DXSDK_DIR: '${{ github.workspace }}/DX_SDK'
with:
cmakeListsOrSettingsJson: CMakeListsTxtAdvanced
cmakeListsTxtPath: '${{ github.workspace }}/CMakeLists.txt'
cmakeAppendedArgs: '-GNinja -DCMAKE_BUILD_TYPE=Release ${{ steps.windows_extra_cmake_args.outputs.args }} ${{ steps.hunter_extra_cmake_args.outputs.args }}'
buildWithCMakeArgs: '--parallel 24 -v'
buildDirectory: '${{ github.workspace }}/build/'
- name: Compile .ISS to .EXE Installer
uses: Minionguyjpro/Inno-Setup-Action@v1.2.2
with:
path: packaging/windows-innosetup/script_x64.iss
options: /O+

View File

@ -6,12 +6,15 @@ on:
pull_request: pull_request:
branches: [ master ] branches: [ master ]
permissions:
contents: read # to fetch code (actions/checkout)
jobs: jobs:
job1: job1:
name: adress-sanitizer name: adress-sanitizer
runs-on: ubuntu-latest runs-on: ubuntu-latest
steps: steps:
- uses: actions/checkout@v2 - uses: actions/checkout@v4
- uses: lukka/get-cmake@latest - uses: lukka/get-cmake@latest
- uses: lukka/set-shell-env@v1 - uses: lukka/set-shell-env@v1
with: with:
@ -19,7 +22,7 @@ jobs:
CC: clang CC: clang
- name: configure and build - name: configure and build
uses: lukka/run-cmake@v2 uses: lukka/run-cmake@v3
with: with:
cmakeListsOrSettingsJson: CMakeListsTxtAdvanced cmakeListsOrSettingsJson: CMakeListsTxtAdvanced
cmakeListsTxtPath: '${{ github.workspace }}/CMakeLists.txt' cmakeListsTxtPath: '${{ github.workspace }}/CMakeLists.txt'
@ -35,7 +38,7 @@ jobs:
name: undefined-behavior-sanitizer name: undefined-behavior-sanitizer
runs-on: ubuntu-latest runs-on: ubuntu-latest
steps: steps:
- uses: actions/checkout@v2 - uses: actions/checkout@v4
- uses: lukka/get-cmake@latest - uses: lukka/get-cmake@latest
- uses: lukka/set-shell-env@v1 - uses: lukka/set-shell-env@v1
with: with:
@ -43,7 +46,7 @@ jobs:
CC: clang CC: clang
- name: configure and build - name: configure and build
uses: lukka/run-cmake@v2 uses: lukka/run-cmake@v3
with: with:
cmakeListsOrSettingsJson: CMakeListsTxtAdvanced cmakeListsOrSettingsJson: CMakeListsTxtAdvanced
cmakeListsTxtPath: '${{ github.workspace }}/CMakeLists.txt' cmakeListsTxtPath: '${{ github.workspace }}/CMakeLists.txt'
@ -54,3 +57,13 @@ jobs:
- name: test - name: test
run: cd build/bin && ./unit run: cd build/bin && ./unit
shell: bash shell: bash
job3:
name: printf-sanitizer
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- name: run scan_printf script
run: ./scripts/scan_printf.sh
shell: bash

13
.gitignore vendored
View File

@ -18,11 +18,14 @@ build
*.VC.db-wal *.VC.db-wal
*.VC.opendb *.VC.opendb
*.ipch *.ipch
.vs/
out/
CMakeSettings.json
# Output # Output
bin/ bin/
lib/ lib/
x64/
# QtCreator # QtCreator
CMakeLists.txt.user CMakeLists.txt.user
@ -91,6 +94,7 @@ test/gtest/src/gtest-stamp/gtest-gitinfo.txt
test/gtest/src/gtest-stamp/gtest-gitclone-lastrun.txt test/gtest/src/gtest-stamp/gtest-gitclone-lastrun.txt
Assimp.opensdf Assimp.opensdf
contrib/zlib/CTestTestfile.cmake contrib/zlib/CTestTestfile.cmake
contrib/zlib/Debug/zlibstaticd.pdb
ipch/assimp_viewer-44bbbcd1/assimp_viewerd-ccc45335.ipch ipch/assimp_viewer-44bbbcd1/assimp_viewerd-ccc45335.ipch
bin64/assimp-vc140-mt.dll bin64/assimp-vc140-mt.dll
bin64/assimp-vc140-mtd.dll bin64/assimp-vc140-mtd.dll
@ -113,3 +117,10 @@ tools/assimp_qt_viewer/moc_glview.cpp_parameters
tools/assimp_qt_viewer/moc_mainwindow.cpp tools/assimp_qt_viewer/moc_mainwindow.cpp
tools/assimp_qt_viewer/moc_mainwindow.cpp_parameters tools/assimp_qt_viewer/moc_mainwindow.cpp_parameters
tools/assimp_qt_viewer/ui_mainwindow.h tools/assimp_qt_viewer/ui_mainwindow.h
#Generated directory
generated/*
# 3rd party cloned repos/tarballs etc
# tinyusdz repo, automatically cloned via CMake
contrib/tinyusdz/autoclone

View File

@ -1,67 +0,0 @@
#---------------------------------------------------------------------------
#Open Asset Import Library (assimp)
#---------------------------------------------------------------------------
# Copyright (c) 2006-2020, assimp team
#
# License see LICENSE file
#
function generate() {
OPTIONS="-DASSIMP_WERROR=ON"
OPTIONS="$OPTIONS -DASSIMP_NO_EXPORT=NO"
if [ "$DISABLE_EXPORTERS" = "YES" ] ; then
OPTIONS="$OPTIONS -DASSIMP_NO_EXPORT=YES"
else
OPTIONS="$OPTIONS -DASSIMP_NO_EXPORT=NO"
fi
if [ "$SHARED_BUILD" = "ON" ] ; then
OPTIONS="$OPTIONS -DBUILD_SHARED_LIBS=ON"
else
OPTIONS="$OPTIONS -DBUILD_SHARED_LIBS=OFF"
fi
if [ "$ENABLE_COVERALLS" = "ON" ] ; then
OPTIONS="$OPTIONS -DASSIMP_COVERALLS=ON"
else
OPTIONS="$OPTIONS -DASSIMP_COVERALLS=OFF"
fi
if [ "$ASAN" = "ON" ] ; then
OPTIONS="$OPTIONS -DASSIMP_ASAN=ON"
else
OPTIONS="$OPTIONS -DASSIMP_ASAN=OFF"
fi
if [ "$UBSAN" = "ON" ] ; then
OPTIONS="$OPTIONS -DASSIMP_UBSAN=ON"
fi
cmake -G "Unix Makefiles" $OPTIONS
}
# build and run unittests, if not android
if [ $ANDROID ]; then
ant -v -Dmy.dir=${TRAVIS_BUILD_DIR} -f ${TRAVIS_BUILD_DIR}/port/jassimp/build.xml ndk-jni
fi
if [ "$TRAVIS_OS_NAME" = "linux" ]; then
if [ $ANALYZE = "ON" ] ; then
if [ "$CC" = "clang" ]; then
scan-build cmake -G "Unix Makefiles" -DBUILD_SHARED_LIBS=OFF -DASSIMP_BUILD_TESTS=OFF
scan-build --status-bugs make -j2
else
cppcheck --version
generate \
&& cppcheck --error-exitcode=1 -j2 -Iinclude -Icode code 2> cppcheck.txt
if [ -s cppcheck.txt ]; then
cat cppcheck.txt
exit 1
fi
fi
else
generate \
&& make -j4 \
&& sudo make install \
&& sudo ldconfig \
&& (cd test/unit; ../../bin/unit)
fi
fi

View File

@ -1,78 +0,0 @@
sudo: required
language: cpp
cache: ccache
before_install:
- if [ "$TRAVIS_OS_NAME" = "linux" ]; then sudo apt-get update -qq && sudo apt-get install cmake cppcheck && sudo apt-get install cmake python3 && sudo apt-get install -qq freeglut3-dev libxmu-dev libxi-dev ; echo -n | openssl s_client -connect scan.coverity.com:443 | sed -ne '/-BEGIN CERTIFICATE-/,/-END CERTIFICATE-/p' | sudo tee -a /etc/ssl/certs/ca- ; fi
- 'if [ "$TRAVIS_OS_NAME" = "osx" ]; then
if brew ls --versions cmake > /dev/null; then
echo cmake already installed.;
else
brew install cmake;
fi;
brew install python3;
brew install homebrew/x11/freeglut;
fi'
- echo -e "#ifndef A_R_H_INC\n#define A_R_H_INC\n#define GitVersion ${TRAVIS_JOB_ID}\n#define GitBranch \"${TRAVIS_BRANCH}\"\n#endif // A_R_H_INC" > revision.h
# install latest LCOV (1.9 was failing)
- if [ "$TRAVIS_OS_NAME" = "linux" ]; then cd ${TRAVIS_BUILD_DIR} && wget http://ftp.de.debian.org/debian/pool/main/l/lcov/lcov_1.11.orig.tar.gz && tar xf lcov_1.11.orig.tar.gz && sudo make -C lcov-1.11/ install && gem install coveralls-lcov && lcov --version && g++ --version ; fi
os:
- linux
compiler:
- gcc
- clang
env:
global:
- secure: "lZ7pHQvl5dpZWzBQAaIMf0wqrvtcZ4wiZKeIZjf83TEsflW8+z0uTpIuN30ZV6Glth/Sq1OhLnTP5+N57fZU/1ebA5twHdvP4bS5CIUUg71/CXQZNl36xeaqvxsG/xRrdpKOsPdjAOsQ9KPTQulsX43XDLS7CasMiLvYOpqKcPc="
- PV=r8e PLATF=linux-x86_64 NDK_HOME=${TRAVIS_BUILD_DIR}/android-ndk-${PV} PATH=${PATH}:${NDK_HOME}
git:
depth: 1
matrix:
include:
- os: linux
compiler: clang
env: ASAN=ON
- os: linux
compiler: clang
env: UBSAN=ON
- os: linux
compiler: clang
env: SHARED_BUILD=ON
- os: linux
compiler: gcc
env: ANALYZE=ON
- os: linux
compiler: gcc
env: ENABLE_COVERALLS=ON
- os: linux
compiler: gcc
env: SHARED_BUILD=ON
install:
- if [ $ANDROID ]; then wget -c http://dl.google.com/android/ndk/android-ndk-${PV}-${PLATF}.tar.bz2 && tar xf android-ndk-${PV}-${PLATF}.tar.bz2 ; fi
before_script:
cmake . -DASSIMP_ENABLE_BOOST_WORKAROUND=YES
script:
- export COVERALLS_SERVICE_NAME=travis-ci
- export COVERALLS_REPO_TOKEN=abc12345
- . ./.travis.sh
after_success:
- if [ "$TRAVIS_OS_NAME" = "linux" ]; then cd ${TRAVIS_BUILD_DIR} && lcov --directory . --capture --output-file coverage.info && lcov --remove coverage.info '/usr/*' 'contrib/*' 'test/*' --output-file coverage.info && lcov --list coverage.info && coveralls-lcov --source-encoding=ISO-8859-1 --repo-token=${COVERALLS_TOKEN} coverage.info ; fi
addons:
coverity_scan:
project:
name: "assimp/assimp"
notification_email: kim.kulling@googlemail.com
build_command_prepend: "cmake ./"
build_command: "make -j4"
branch_pattern: coverity_scan

View File

@ -1,3 +0,0 @@
set(ASSIMP_INCLUDE_DIRS
"@PROJECT_SOURCE_DIR@"
"@PROJECT_BINARY_DIR@")

View File

@ -1,11 +0,0 @@
set(ASSIMP_PACKAGE_VERSION "@ASSIMP_SOVERSION@")
# Check whether the requested PACKAGE_FIND_VERSION is compatible
if("${ASSIMP_PACKAGE_VERSION}" VERSION_LESS "${ASSIMP_PACKAGE_FIND_VERSION}")
set(ASSIMP_PACKAGE_VERSION_COMPATIBLE FALSE)
else()
set(ASSIMP_PACKAGE_VERSION_COMPATIBLE TRUE)
if ("${ASSIMP_PACKAGE_VERSION}" VERSION_EQUAL "${ASSIMP_PACKAGE_FIND_VERSION}")
set(ASSIMP_PACKAGE_VERSION_EXACT TRUE)
endif()
endif()

View File

@ -10,16 +10,15 @@
:: Also see: https://github.com/assimp/assimp/pull/2646 :: Also see: https://github.com/assimp/assimp/pull/2646
SET SOURCE_DIR=. SET SOURCE_DIR=.
SET GENERATOR=Visual Studio 16 2019
:: For generators see "cmake --help" SET BINARIES_DIR="./build/Win32"
SET GENERATOR=Visual Studio 15 2017 cmake . -G "%GENERATOR%" -A Win32 -S %SOURCE_DIR% -B %BINARIES_DIR%
cmake --build %BINARIES_DIR% --config debug
SET BINARIES_DIR="./BINARIES/Win32"
cmake CMakeLists.txt -G "%GENERATOR%" -S %SOURCE_DIR% -B %BINARIES_DIR%
cmake --build %BINARIES_DIR% --config release cmake --build %BINARIES_DIR% --config release
SET BINARIES_DIR="./BINARIES/x64" SET BINARIES_DIR="./build/x64"
cmake CMakeLists.txt -G "%GENERATOR% Win64" -S %SOURCE_DIR% -B %BINARIES_DIR% cmake . -G "%GENERATOR%" -A x64 -S %SOURCE_DIR% -B %BINARIES_DIR%
cmake --build %BINARIES_DIR% --config debug cmake --build %BINARIES_DIR% --config debug
cmake --build %BINARIES_DIR% --config release cmake --build %BINARIES_DIR% --config release

View File

@ -1,20 +1,33 @@
# Build Instructions # Build / Install Instructions
## Build on all platforms using vcpkg ## Install on all platforms using vcpkg
You can download and install assimp using the [vcpkg](https://github.com/Microsoft/vcpkg/) dependency manager: You can download and install assimp using the [vcpkg](https://github.com/Microsoft/vcpkg/) dependency manager:
```bash ```bash
git clone https://github.com/Microsoft/vcpkg.git git clone https://github.com/Microsoft/vcpkg.git
cd vcpkg cd vcpkg
./bootstrap-vcpkg.sh ./bootstrap-vcpkg.sh
./vcpkg integrate install ./vcpkg integrate install
vcpkg install assimp ./vcpkg install assimp
``` ```
The assimp port in vcpkg is kept up to date by Microsoft team members and community contributors. If the version is out of date, please [create an issue or pull request](https://github.com/Microsoft/vcpkg) on the vcpkg repository. The assimp port in vcpkg is kept up to date by Microsoft team members and community contributors. If the version is out of date, please [create an issue or pull request](https://github.com/Microsoft/vcpkg) on the vcpkg repository.
## Install on Ubuntu
You can install the Asset-Importer-Lib via apt:
```
sudo apt-get update
sudo apt-get install libassimp-dev
```
## Install pyassimp
You need to have pip installed:
```
pip install pyassimp
```
## Manual build instructions ## Manual build instructions
### Install CMake ### Install CMake
Asset-Importer-Lib can be build for a lot of different platforms. We are using cmake to generate the build environment for these via cmake. So you have to make sure that you have a working cmake-installation on your system. You can download it at https://cmake.org/ or for linux install it via Asset-Importer-Lib can be built for a lot of different platforms. We are using cmake to generate the build environment for these via cmake. So you have to make sure that you have a working cmake-installation on your system. You can download it at https://cmake.org/ or for linux install it via
```bash ```bash
sudo apt-get install cmake sudo apt-get install cmake
``` ```
@ -24,15 +37,22 @@ Make sure you have a working git-installation. Open a command prompt and clone t
```bash ```bash
git clone https://github.com/assimp/assimp.git git clone https://github.com/assimp/assimp.git
``` ```
### Build from source:
```bash
cd assimp
cmake CMakeLists.txt
cmake --build .
```
Note that by default this builds a shared library into the `bin` directory. If you want to build it as a static library see the build options at the bottom of this file.
### Build instructions for Windows with Visual-Studio ### Build instructions for Windows with Visual-Studio
First you have to install Visual-Studio on your windows-system. You can get the Community-Version for free here: https://visualstudio.microsoft.com/de/downloads/ First, you have to install Visual-Studio on your windows-system. You can get the Community-Version for free here: https://visualstudio.microsoft.com/de/downloads/
To generate the build environment for your IDE open a command prompt, navigate to your repo and type: To generate the build environment for your IDE open a command prompt, navigate to your repo and type:
```bash ```bash
cmake CMakeLists.txt cmake CMakeLists.txt
``` ```
This will generate the project files for the visual studio. All dependencies used to build Asset-IMporter-Lib shall be part of the repo. If you want to use you own zlib.installation this is possible as well. Check the options for it. This will generate the project files for the visual studio. All dependencies used to build Asset-Importer-Lib shall be part of the repo. If you want to use you own zlib installation this is possible as well. Check the options for it.
### Build instructions for Windows with UWP ### Build instructions for Windows with UWP
See <https://stackoverflow.com/questions/40803170/cmake-uwp-using-cmake-to-build-universal-windows-app> See <https://stackoverflow.com/questions/40803170/cmake-uwp-using-cmake-to-build-universal-windows-app>
@ -44,9 +64,9 @@ Open a terminal and got to your repository. You can generate the makefiles and b
cmake CMakeLists.txt cmake CMakeLists.txt
make -j4 make -j4
``` ```
The option -j descripes the number of parallel processes for the build. In this case make will try to use 4 cores for the build. The option -j describes the number of parallel processes for the build. In this case make will try to use 4 cores for the build.
If you want to use a IDE for linux you can try QTCreator for instance. If you want to use an IDE for linux you can try QTCreator for instance.
### Build instructions for MinGW ### Build instructions for MinGW
Older versions of MinGW's compiler (e.g. 5.1.0) do not support the -mbig_obj flag Older versions of MinGW's compiler (e.g. 5.1.0) do not support the -mbig_obj flag
@ -66,23 +86,28 @@ Besides the toolchain, compilation should be the same as for Linux / Unix.
### CMake build options ### CMake build options
The cmake-build-environment provides options to configure the build. The following options can be used: The cmake-build-environment provides options to configure the build. The following options can be used:
- **BUILD_SHARED_LIBS ( default ON )**: Generation of shared libs ( dll for windows, so for Linux ). Set this to OFF to get a static lib. - **ASSIMP_HUNTER_ENABLED (default OFF)**: Enable Hunter package manager support.
- **BUILD_FRAMEWORK ( default OFF, MacOnly)**: Build package as Mac OS X Framework bundle - **BUILD_SHARED_LIBS (default ON)**: Generation of shared libs (dll for windows, so for Linux). Set this to OFF to get a static lib.
- **ASSIMP_DOUBLE_PRECISION( default OFF )**: All data will be stored as double values. - **ASSIMP_BUILD_FRAMEWORK (default OFF, MacOnly)**: Build package as Mac OS X Framework bundle.
- **ASSIMP_OPT_BUILD_PACKAGES ( default OFF)**: Set to ON to generate CPack configuration files and packaging targets - **ASSIMP_DOUBLE_PRECISION (default OFF)**: All data will be stored as double values.
- **ASSIMP_ANDROID_JNIIOSYSTEM ( default OFF )**: Android JNI IOSystem support is active - **ASSIMP_OPT_BUILD_PACKAGES (default OFF)**: Set to ON to generate CPack configuration files and packaging targets.
- **ASSIMP_NO_EXPORT ( default OFF )**: Disable Assimp's export functionality - **ASSIMP_ANDROID_JNIIOSYSTEM (default OFF)**: Android JNI IOSystem support is active.
- **ASSIMP_BUILD_ZLIB ( default OFF )**: Build your own zlib - **ASSIMP_NO_EXPORT (default OFF)**: Disable Assimp's export functionality.
- **ASSIMP_BUILD_ASSIMP_TOOLS ( default ON )**: If the supplementary tools for Assimp are built in addition to the library. - **ASSIMP_BUILD_ZLIB (default OFF)**: Build our own zlib.
- **ASSIMP_BUILD_SAMPLES ( default OFF )**: If the official samples are built as well (needs Glut). - **ASSIMP_BUILD_ALL_EXPORTERS_BY_DEFAULT (default ON)**: Build Assimp with all exporters enabled.
- **ASSIMP_BUILD_TESTS ( default ON )**: If the test suite for Assimp is built in addition to the library. - **ASSIMP_BUILD_ALL_IMPORTERS_BY_DEFAULT (default ON)**: Build Assimp with all importers enabled.
- **ASSIMP_COVERALLS ( default OFF )**: Enable this to measure test coverage. - **ASSIMP_BUILD_ASSIMP_TOOLS (default OFF)**: If the supplementary tools for Assimp are built in addition to the library.
- **ASSIMP_ERROR_MAX( default OFF)**: Enable all warnings. - **ASSIMP_BUILD_SAMPLES (default OFF)**: If the official samples are built as well (needs Glut).
- **ASSIMP_WERROR( default OFF )**: Treat warnings as errors. - **ASSIMP_BUILD_TESTS (default ON)**: If the test suite for Assimp is built in addition to the library.
- **ASSIMP_ASAN ( default OFF )**: Enable AddressSanitizer. - **ASSIMP_COVERALLS (default OFF)**: Enable this to measure test coverage.
- **ASSIMP_UBSAN ( default OFF )**: Enable Undefined Behavior sanitizer. - **ASSIMP_INSTALL (default ON)**: Install Assimp library. Disable this if you want to use Assimp as a submodule.
- **SYSTEM_IRRXML ( default OFF )**: Use system installed Irrlicht/IrrXML library. - **ASSIMP_WARNINGS_AS_ERRORS (default ON)**: Treat all warnings as errors.
- **BUILD_DOCS ( default OFF )**: Build documentation using Doxygen. - **ASSIMP_ASAN (default OFF)**: Enable AddressSanitizer.
- **INJECT_DEBUG_POSTFIX( default ON )**: Inject debug postfix in .a/.so lib names - **ASSIMP_UBSAN (default OFF)**: Enable Undefined Behavior sanitizer.
- **IGNORE_GIT_HASH ( default OFF )**: Don't call git to get the hash. - **ASSIMP_BUILD_DOCS (default OFF)**: Build documentation using Doxygen. OBSOLETE, see https://github.com/assimp/assimp-docs
- **ASSIMP_INSTALL_PDB ( default ON )**: Install MSVC debug files. - **ASSIMP_INJECT_DEBUG_POSTFIX (default ON)**: Inject debug postfix in .a/.so/.lib/.dll lib names
- **ASSIMP_IGNORE_GIT_HASH (default OFF)**: Don't call git to get the hash.
- **ASSIMP_INSTALL_PDB (default ON)**: Install MSVC debug files.
- **USE_STATIC_CRT (default OFF)**: Link against the static MSVC runtime libraries.
- **ASSIMP_BUILD_DRACO (default OFF)**: Build Draco libraries. Primarily for glTF.
- **ASSIMP_BUILD_ASSIMP_VIEW (default ON, if DirectX found, OFF otherwise)**: Build Assimp view tool (requires DirectX).

View File

@ -1,6 +1,6 @@
# Open Asset Import Library (assimp) # Open Asset Import Library (assimp)
# ---------------------------------------------------------------------- # ----------------------------------------------------------------------
# Copyright (c) 2006-2020, assimp team # Copyright (c) 2006-2024, assimp team
# #
# All rights reserved. # All rights reserved.
# #
@ -34,24 +34,44 @@
# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE # (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. # OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
#---------------------------------------------------------------------- #----------------------------------------------------------------------
SET(CMAKE_POLICY_DEFAULT_CMP0012 NEW)
SET(CMAKE_POLICY_DEFAULT_CMP0074 NEW) SET(CMAKE_POLICY_DEFAULT_CMP0074 NEW)
SET(CMAKE_POLICY_DEFAULT_CMP0092 NEW)
CMAKE_MINIMUM_REQUIRED( VERSION 3.0 ) CMAKE_MINIMUM_REQUIRED( VERSION 3.22 )
# Experimental USD importer: disabled, need to opt-in
# Note: assimp github PR automatic checks will fail the PR due to compiler warnings in
# the external, 3rd party tinyusdz code which isn't technically part of the PR since it's
# auto-cloned during build; so MUST disable the feature or the PR will be rejected
option(ASSIMP_BUILD_USD_IMPORTER "Enable USD file import" off)
option(ASSIMP_BUILD_USD_VERBOSE_LOGS "Enable verbose USD import debug logging" off)
option(ASSIMP_BUILD_USE_CCACHE "Use ccache to speed up compilation." on)
if(ASSIMP_BUILD_USE_CCACHE)
find_program(CCACHE_PATH ccache)
if (CCACHE_PATH)
set_property(GLOBAL PROPERTY RULE_LAUNCH_COMPILE ${CCACHE_PATH})
set_property(GLOBAL PROPERTY RULE_LAUNCH_LINK ${CCACHE_PATH})
endif()
endif()
# Disabled importers: m3d for 5.1 or later
ADD_DEFINITIONS( -DASSIMP_BUILD_NO_M3D_IMPORTER)
ADD_DEFINITIONS( -DASSIMP_BUILD_NO_M3D_EXPORTER)
# Toggles the use of the hunter package manager # Toggles the use of the hunter package manager
option(ASSIMP_HUNTER_ENABLED "Enable Hunter package manager support" OFF) option(ASSIMP_HUNTER_ENABLED "Enable Hunter package manager support" OFF)
IF(ASSIMP_HUNTER_ENABLED) IF(ASSIMP_HUNTER_ENABLED)
include("cmake/HunterGate.cmake") include("cmake-modules/HunterGate.cmake")
HunterGate( HunterGate(
URL "https://github.com/ruslo/hunter/archive/v0.23.176.tar.gz" URL "https://github.com/cpp-pm/hunter/archive/v0.25.5.tar.gz"
SHA1 "2e9ae973d028660b735ac4c6142725ca36a0048a" SHA1 "a20151e4c0740ee7d0f9994476856d813cdead29"
) )
add_definitions(-DASSIMP_USE_HUNTER) add_definitions(-DASSIMP_USE_HUNTER)
ENDIF() ENDIF()
PROJECT( Assimp VERSION 5.0.1 ) PROJECT(Assimp VERSION 5.4.3)
# All supported options ############################################### # All supported options ###############################################
@ -59,7 +79,6 @@ OPTION( BUILD_SHARED_LIBS
"Build package with shared libraries." "Build package with shared libraries."
ON ON
) )
OPTION( ASSIMP_BUILD_FRAMEWORK OPTION( ASSIMP_BUILD_FRAMEWORK
"Build package as Mac OS X Framework bundle." "Build package as Mac OS X Framework bundle."
OFF OFF
@ -80,13 +99,9 @@ OPTION( ASSIMP_NO_EXPORT
"Disable Assimp's export functionality." "Disable Assimp's export functionality."
OFF OFF
) )
OPTION( ASSIMP_BUILD_ZLIB
"Build your own zlib"
OFF
)
OPTION( ASSIMP_BUILD_ASSIMP_TOOLS OPTION( ASSIMP_BUILD_ASSIMP_TOOLS
"If the supplementary tools for Assimp are built in addition to the library." "If the supplementary tools for Assimp are built in addition to the library."
ON OFF
) )
OPTION ( ASSIMP_BUILD_SAMPLES OPTION ( ASSIMP_BUILD_SAMPLES
"If the official samples are built as well (needs Glut)." "If the official samples are built as well (needs Glut)."
@ -104,9 +119,9 @@ OPTION( ASSIMP_INSTALL
"Disable this if you want to use assimp as a submodule." "Disable this if you want to use assimp as a submodule."
ON ON
) )
OPTION ( ASSIMP_ERROR_MAX OPTION ( ASSIMP_WARNINGS_AS_ERRORS
"Enable all warnings." "Treat all warnings as errors."
OFF ON
) )
OPTION ( ASSIMP_ASAN OPTION ( ASSIMP_ASAN
"Enable AddressSanitizer." "Enable AddressSanitizer."
@ -116,10 +131,6 @@ OPTION ( ASSIMP_UBSAN
"Enable Undefined Behavior sanitizer." "Enable Undefined Behavior sanitizer."
OFF OFF
) )
OPTION ( ASSIMP_SYSTEM_IRRXML
"Use system installed Irrlicht/IrrXML library."
OFF
)
OPTION ( ASSIMP_BUILD_DOCS OPTION ( ASSIMP_BUILD_DOCS
"Build documentation using Doxygen." "Build documentation using Doxygen."
OFF OFF
@ -134,10 +145,46 @@ OPTION ( ASSIMP_IGNORE_GIT_HASH
OFF OFF
) )
IF ( WIN32 ) IF (WIN32)
OPTION ( ASSIMP_BUILD_ASSIMP_VIEW OPTION( ASSIMP_BUILD_ZLIB
"If the Assimp view tool is built. (requires DirectX)" "Build your zlib"
OFF ) ON
)
ELSE()
OPTION( ASSIMP_BUILD_ZLIB
"Build your zlib"
OFF
)
ENDIF()
IF (WIN32)
# Use a subset of Windows.h
ADD_DEFINITIONS( -DWIN32_LEAN_AND_MEAN )
IF(MSVC)
OPTION( ASSIMP_INSTALL_PDB
"Create MSVC debug symbol files and add to Install target."
ON )
IF(NOT (MSVC_VERSION LESS 1900))
# Multibyte character set has been deprecated since at least MSVC2015 (possibly earlier)
ADD_DEFINITIONS( -DUNICODE -D_UNICODE )
ENDIF()
# Link statically against c/c++ lib to avoid missing redistributable such as
# "VCRUNTIME140.dll not found. Try reinstalling the app.", but give users
# a choice to opt for the shared runtime if they want.
option(USE_STATIC_CRT "Link against the static runtime libraries." OFF)
# The CMAKE_CXX_FLAGS vars can be overridden by some Visual Studio generators, so we use an alternative
# global method here:
if (${USE_STATIC_CRT})
add_compile_options(
$<$<CONFIG:>:/MT>
$<$<CONFIG:Debug>:/MTd>
$<$<CONFIG:Release>:/MT>
)
endif()
ENDIF()
ENDIF() ENDIF()
IF (IOS AND NOT ASSIMP_HUNTER_ENABLED) IF (IOS AND NOT ASSIMP_HUNTER_ENABLED)
@ -147,21 +194,6 @@ IF (IOS AND NOT ASSIMP_HUNTER_ENABLED)
ADD_DEFINITIONS(-DENABLE_BITCODE) ADD_DEFINITIONS(-DENABLE_BITCODE)
ENDIF () ENDIF ()
# Use subset of Windows.h
if (WIN32)
ADD_DEFINITIONS( -DWIN32_LEAN_AND_MEAN )
endif()
IF(MSVC)
OPTION( ASSIMP_INSTALL_PDB
"Install MSVC debug files."
ON
)
IF(NOT (MSVC_VERSION LESS 1900))
# Multibyte character set is deprecated since at least MSVC2015 (possibly earlier)
ADD_DEFINITIONS( -DUNICODE -D_UNICODE )
ENDIF()
ENDIF()
IF (ASSIMP_BUILD_FRAMEWORK) IF (ASSIMP_BUILD_FRAMEWORK)
SET (BUILD_SHARED_LIBS ON) SET (BUILD_SHARED_LIBS ON)
@ -171,6 +203,7 @@ ENDIF()
IF(NOT BUILD_SHARED_LIBS) IF(NOT BUILD_SHARED_LIBS)
MESSAGE(STATUS "Shared libraries disabled") MESSAGE(STATUS "Shared libraries disabled")
SET(LINK_SEARCH_START_STATIC TRUE) SET(LINK_SEARCH_START_STATIC TRUE)
SET(CMAKE_FIND_LIBRARY_SUFFIXES ${CMAKE_STATIC_LIBRARY_SUFFIX} ${CMAKE_FIND_LIBRARY_SUFFIXES})
ELSE() ELSE()
MESSAGE(STATUS "Shared libraries enabled") MESSAGE(STATUS "Shared libraries enabled")
ENDIF() ENDIF()
@ -183,10 +216,9 @@ SET (ASSIMP_VERSION ${ASSIMP_VERSION_MAJOR}.${ASSIMP_VERSION_MINOR}.${ASSIMP_VER
SET (ASSIMP_SOVERSION 5) SET (ASSIMP_SOVERSION 5)
SET( ASSIMP_PACKAGE_VERSION "0" CACHE STRING "the package-specific version used for uploading the sources" ) SET( ASSIMP_PACKAGE_VERSION "0" CACHE STRING "the package-specific version used for uploading the sources" )
if(NOT ASSIMP_HUNTER_ENABLED) set(CMAKE_CXX_STANDARD 17)
# Enable C++11 support globally set(CMAKE_CXX_STANDARD_REQUIRED ON)
set_property( GLOBAL PROPERTY CXX_STANDARD 11 ) set(CMAKE_C_STANDARD 99)
endif()
IF(NOT ASSIMP_IGNORE_GIT_HASH) IF(NOT ASSIMP_IGNORE_GIT_HASH)
# Get the current working branch # Get the current working branch
@ -213,19 +245,9 @@ IF(NOT GIT_COMMIT_HASH)
ENDIF() ENDIF()
IF(ASSIMP_DOUBLE_PRECISION) IF(ASSIMP_DOUBLE_PRECISION)
ADD_DEFINITIONS(-DASSIMP_DOUBLE_PRECISION) ADD_DEFINITIONS(-DASSIMP_DOUBLE_PRECISION)
ENDIF() ENDIF()
CONFIGURE_FILE(
${CMAKE_CURRENT_LIST_DIR}/revision.h.in
${CMAKE_CURRENT_BINARY_DIR}/revision.h
)
CONFIGURE_FILE(
${CMAKE_CURRENT_LIST_DIR}/include/assimp/config.h.in
${CMAKE_CURRENT_BINARY_DIR}/include/assimp/config.h
)
INCLUDE_DIRECTORIES( BEFORE INCLUDE_DIRECTORIES( BEFORE
./ ./
code/ code/
@ -243,104 +265,146 @@ SET(ASSIMP_LIBRARY_SUFFIX "" CACHE STRING "Suffix to append to library names")
IF( UNIX ) IF( UNIX )
# Use GNUInstallDirs for Unix predefined directories # Use GNUInstallDirs for Unix predefined directories
INCLUDE(GNUInstallDirs) INCLUDE(GNUInstallDirs)
# Ensure that we do not run into issues like http://www.tcm.phy.cam.ac.uk/sw/inodes64.html on 32 bit Linux
IF(NOT ${OPERATING_SYSTEM} MATCHES "Android")
IF ( CMAKE_SIZEOF_VOID_P EQUAL 4) # only necessary for 32-bit Linux
ADD_DEFINITIONS(-D_FILE_OFFSET_BITS=64 )
ENDIF()
ENDIF()
ENDIF() ENDIF()
# Grouped compiler settings ######################################## # Grouped compiler settings ########################################
IF ((CMAKE_C_COMPILER_ID MATCHES "GNU") AND NOT CMAKE_COMPILER_IS_MINGW) IF ((CMAKE_C_COMPILER_ID MATCHES "GNU") AND NOT MINGW AND NOT HAIKU)
IF(NOT ASSIMP_HUNTER_ENABLED) IF(NOT ASSIMP_HUNTER_ENABLED)
SET(CMAKE_CXX_STANDARD 11)
SET(CMAKE_POSITION_INDEPENDENT_CODE ON) SET(CMAKE_POSITION_INDEPENDENT_CODE ON)
ENDIF() ENDIF()
IF(CMAKE_CXX_COMPILER_VERSION GREATER_EQUAL 13)
MESSAGE(STATUS "GCC13 detected disabling \"-Wdangling-reference\" in Cpp files as it appears to be a false positive")
ADD_COMPILE_OPTIONS("$<$<COMPILE_LANGUAGE:CXX>:-Wno-dangling-reference>")
ENDIF()
# hide all not-exported symbols # hide all not-exported symbols
SET(CMAKE_CXX_FLAGS "-fvisibility=hidden -fno-strict-aliasing -Wall ${CMAKE_CXX_FLAGS}") IF(CMAKE_HOST_SYSTEM_PROCESSOR MATCHES "mips64" )
SET(CMAKE_C_FLAGS "-fno-strict-aliasing ${CMAKE_C_FLAGS}") SET(CMAKE_CXX_FLAGS "-mxgot -fvisibility=hidden -fno-strict-aliasing -Wall ${CMAKE_CXX_FLAGS}")
SET(LIBSTDC++_LIBRARIES -lstdc++) SET(CMAKE_C_FLAGS "-fno-strict-aliasing ${CMAKE_C_FLAGS}")
SET(LIBSTDC++_LIBRARIES -lstdc++)
ELSE()
SET(CMAKE_CXX_FLAGS "-fvisibility=hidden -fno-strict-aliasing -Wall ${CMAKE_CXX_FLAGS}")
SET(CMAKE_C_FLAGS "-fno-strict-aliasing ${CMAKE_C_FLAGS}")
SET(LIBSTDC++_LIBRARIES -lstdc++)
ENDIF()
ELSEIF(MSVC) ELSEIF(MSVC)
# enable multi-core compilation with MSVC # enable multi-core compilation with MSVC
ADD_COMPILE_OPTIONS(/MP /bigobj /W4 /WX ) IF(CMAKE_CXX_COMPILER_ID MATCHES "Clang" ) # clang-cl
ADD_COMPILE_OPTIONS(/bigobj)
ELSE() # msvc
ADD_COMPILE_OPTIONS(/MP /bigobj)
ENDIF()
# disable "elements of array '' will be default initialized" warning on MSVC2013 # disable "elements of array '' will be default initialized" warning on MSVC2013
IF(MSVC12) IF(MSVC12)
ADD_COMPILE_OPTIONS(/wd4351) ADD_COMPILE_OPTIONS(/wd4351)
ENDIF() ENDIF()
# supress warning for double to float conversion if Double precision is activated
ADD_COMPILE_OPTIONS(/wd4244)
SET(CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} /D_DEBUG /Zi /Od") SET(CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} /D_DEBUG /Zi /Od")
ELSEIF ( "${CMAKE_CXX_COMPILER_ID}" MATCHES "Clang" ) # Allow user to disable PDBs
if(ASSIMP_INSTALL_PDB)
SET(CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE} /Zi")
SET(CMAKE_SHARED_LINKER_FLAGS_RELEASE "${CMAKE_SHARED_LINKER_FLAGS_RELEASE} /DEBUG:FULL /PDBALTPATH:%_PDB% /OPT:REF /OPT:ICF")
elseif((GENERATOR_IS_MULTI_CONFIG) OR (CMAKE_BUILD_TYPE MATCHES Release))
message("-- MSVC PDB generation disabled. Release binary will not be debuggable.")
endif()
# Source code is encoded in UTF-8
ADD_COMPILE_OPTIONS(/source-charset:utf-8)
ELSEIF (CMAKE_CXX_COMPILER_ID MATCHES "Clang" )
IF(NOT ASSIMP_HUNTER_ENABLED) IF(NOT ASSIMP_HUNTER_ENABLED)
SET(CMAKE_CXX_STANDARD 11)
SET(CMAKE_POSITION_INDEPENDENT_CODE ON) SET(CMAKE_POSITION_INDEPENDENT_CODE ON)
ENDIF() ENDIF()
SET(CMAKE_CXX_FLAGS "-fvisibility=hidden -fno-strict-aliasing -Wall -Wno-long-long ${CMAKE_CXX_FLAGS}" ) SET(CMAKE_CXX_FLAGS "-fvisibility=hidden -fno-strict-aliasing -Wall -Wno-long-long ${CMAKE_CXX_FLAGS}" )
SET(CMAKE_C_FLAGS "-fno-strict-aliasing ${CMAKE_C_FLAGS}") SET(CMAKE_C_FLAGS "-fno-strict-aliasing ${CMAKE_C_FLAGS}")
ELSEIF( CMAKE_COMPILER_IS_MINGW ) ELSEIF( MINGW )
IF (CMAKE_CXX_COMPILER_VERSION VERSION_LESS 7.0) IF (CMAKE_CXX_COMPILER_VERSION VERSION_LESS 7.0)
message(FATAL_ERROR "MinGW is too old to be supported. Please update MinGW and try again.") message(FATAL_ERROR "MinGW is too old to be supported. Please update MinGW and try again.")
ELSEIF(CMAKE_CXX_COMPILER_VERSION VERSION_LESS 7.3) ELSEIF(CMAKE_CXX_COMPILER_VERSION VERSION_LESS 7.3)
message(WARNING "MinGW is old, if you experience errors, update MinGW.") message(WARNING "MinGW is old, if you experience errors, update MinGW.")
ENDIF() ENDIF()
IF(NOT ASSIMP_HUNTER_ENABLED) IF(NOT ASSIMP_HUNTER_ENABLED)
SET(CMAKE_CXX_FLAGS "-std=c++11 ${CMAKE_CXX_FLAGS}") SET(CMAKE_CXX_FLAGS "-std=gnu++17 ${CMAKE_CXX_FLAGS}")
SET(CMAKE_C_FLAGS "-fPIC ${CMAKE_C_FLAGS}") SET(CMAKE_C_FLAGS "-fPIC ${CMAKE_C_FLAGS}")
ENDIF() ENDIF()
SET(CMAKE_CXX_FLAGS "-fvisibility=hidden -fno-strict-aliasing -Wall -Wno-long-long -Wa,-mbig-obj -O3 ${CMAKE_CXX_FLAGS}") IF (CMAKE_BUILD_TYPE STREQUAL "Debug")
SET(CMAKE_C_FLAGS "-fno-strict-aliasing ${CMAKE_C_FLAGS}") SET(CMAKE_CXX_FLAGS "-fvisibility=hidden -fno-strict-aliasing -Wno-dangling-reference -Wall -Wno-long-long -Wa,-mbig-obj -g ${CMAKE_CXX_FLAGS}")
ADD_DEFINITIONS( -U__STRICT_ANSI__ ) ELSE()
SET(CMAKE_CXX_FLAGS "-fvisibility=hidden -fno-strict-aliasing -Wno-dangling-reference -Wall -Wno-long-long -Wa,-mbig-obj -O3 ${CMAKE_CXX_FLAGS}")
ENDIF()
SET(CMAKE_C_FLAGS "-fno-strict-aliasing ${CMAKE_C_FLAGS}")
ENDIF() ENDIF()
IF ( IOS AND NOT ASSIMP_HUNTER_ENABLED) IF ( IOS AND NOT ASSIMP_HUNTER_ENABLED)
IF (CMAKE_BUILD_TYPE STREQUAL "Debug") IF (CMAKE_BUILD_TYPE STREQUAL "Debug")
SET(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -fembed-bitcode -Og") SET(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -fembed-bitcode -Og")
SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fembed-bitcode -Og") SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fembed-bitcode -Og")
ELSE() ELSE()
SET(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -fembed-bitcode -O3") SET(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -fembed-bitcode -O3")
SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fembed-bitcode -O3") SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fembed-bitcode -O3")
# Experimental for pdb generation
ENDIF() ENDIF()
ENDIF() ENDIF()
IF (ASSIMP_COVERALLS) IF (ASSIMP_COVERALLS)
MESSAGE(STATUS "Coveralls enabled") MESSAGE(STATUS "Coveralls enabled")
INCLUDE(Coveralls) INCLUDE(Coveralls)
SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -g -O0 -fprofile-arcs -ftest-coverage") SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -g -O0 -fprofile-arcs -ftest-coverage")
SET(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -g -O0 -fprofile-arcs -ftest-coverage") SET(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -g -O0 -fprofile-arcs -ftest-coverage")
ENDIF() ENDIF()
IF (ASSIMP_ERROR_MAX)
MESSAGE(STATUS "Turning on all warnings")
IF (MSVC)
ADD_COMPILE_OPTIONS(/W4) # NB: there is a /Wall option, pedantic mode
ELSE()
SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wall")
SET(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Wall")
ENDIF()
ENDIF()
IF (ASSIMP_ASAN) IF (ASSIMP_ASAN)
MESSAGE(STATUS "AddressSanitizer enabled") MESSAGE(STATUS "AddressSanitizer enabled")
SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fsanitize=address") SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fsanitize=address")
SET(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -fsanitize=address") SET(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -fsanitize=address")
ENDIF() ENDIF()
IF (ASSIMP_UBSAN) IF (ASSIMP_UBSAN)
MESSAGE(STATUS "Undefined Behavior sanitizer enabled") MESSAGE(STATUS "Undefined Behavior sanitizer enabled")
SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fsanitize=undefined -fno-sanitize-recover=all")
SET(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -fsanitize=undefined -fno-sanitize-recover=all") SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fsanitize=undefined,shift,shift-exponent,integer-divide-by-zero,unreachable,vla-bound,null,return,signed-integer-overflow,bounds,float-divide-by-zero,float-cast-overflow,nonnull-attribute,returns-nonnull-attribute,bool,enum,vptr,pointer-overflow,builtin -fno-sanitize-recover=all")
SET(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -fsanitize=undefined,shift,shift-exponent,integer-divide-by-zero,unreachable,vla-bound,null,return,signed-integer-overflow,bounds,float-divide-by-zero,float-cast-overflow,nonnull-attribute,returns-nonnull-attribute,bool,enum,vptr,pointer-overflow,builtin -fno-sanitize-recover=all")
ENDIF() ENDIF()
INCLUDE (FindPkgMacros) INCLUDE (FindPkgMacros)
INCLUDE (PrecompiledHeader) INCLUDE (PrecompiledHeader)
# If this is an in-source build (CMAKE_SOURCE_DIR == CMAKE_BINARY_DIR), # Set Assimp project output directory variables.
# write the library/executable files to the respective directories in the # Will respect top-level CMAKE_*_OUTPUT_DIRECTORY variables if any are set.
# source tree. During an out-of-source build, however, do not litter this IF(NOT DEFINED CMAKE_RUNTIME_OUTPUT_DIRECTORY)
# directory, since that is probably what the user wanted to avoid. SET(ASSIMP_RUNTIME_OUTPUT_DIRECTORY "${CMAKE_CURRENT_BINARY_DIR}/bin" CACHE STRING "Path for runtime output files")
IF ( CMAKE_SOURCE_DIR STREQUAL CMAKE_BINARY_DIR )
SET( CMAKE_LIBRARY_OUTPUT_DIRECTORY "${CMAKE_HOME_DIRECTORY}/bin" )
SET( CMAKE_ARCHIVE_OUTPUT_DIRECTORY "${CMAKE_HOME_DIRECTORY}/lib" )
SET( CMAKE_RUNTIME_OUTPUT_DIRECTORY "${CMAKE_HOME_DIRECTORY}/bin" )
ELSE() ELSE()
SET(CMAKE_ARCHIVE_OUTPUT_DIRECTORY "${CMAKE_CURRENT_BINARY_DIR}/lib") SET(ASSIMP_RUNTIME_OUTPUT_DIRECTORY ${CMAKE_RUNTIME_OUTPUT_DIRECTORY} CACHE STRING "Path for runtime output files")
SET(CMAKE_LIBRARY_OUTPUT_DIRECTORY "${CMAKE_CURRENT_BINARY_DIR}/bin") ENDIF()
SET(CMAKE_RUNTIME_OUTPUT_DIRECTORY "${CMAKE_CURRENT_BINARY_DIR}/bin")
ENDIF () IF(NOT DEFINED CMAKE_LIBRARY_OUTPUT_DIRECTORY)
SET(ASSIMP_LIBRARY_OUTPUT_DIRECTORY "${CMAKE_CURRENT_BINARY_DIR}/bin" CACHE STRING "Path for library output files")
ELSE()
SET(ASSIMP_LIBRARY_OUTPUT_DIRECTORY ${CMAKE_LIBRARY_OUTPUT_DIRECTORY} CACHE STRING "Path for runtime output files")
ENDIF()
IF(NOT DEFINED CMAKE_ARCHIVE_OUTPUT_DIRECTORY)
SET(ASSIMP_ARCHIVE_OUTPUT_DIRECTORY "${CMAKE_CURRENT_BINARY_DIR}/lib" CACHE STRING "Path for library output files")
ELSE()
SET(ASSIMP_ARCHIVE_OUTPUT_DIRECTORY ${CMAKE_ARCHIVE_OUTPUT_DIRECTORY} CACHE STRING "Path for runtime output files")
ENDIF()
# Macro used to set the output directories of a target to the
# respective Assimp output directories.
MACRO(TARGET_USE_COMMON_OUTPUT_DIRECTORY target)
set_target_properties(${target} PROPERTIES
RUNTIME_OUTPUT_DIRECTORY ${ASSIMP_RUNTIME_OUTPUT_DIRECTORY}
LIBRARY_OUTPUT_DIRECTORY ${ASSIMP_LIBRARY_OUTPUT_DIRECTORY}
ARCHIVE_OUTPUT_DIRECTORY ${ASSIMP_ARCHIVE_OUTPUT_DIRECTORY}
)
ENDMACRO()
get_cmake_property(is_multi_config GENERATOR_IS_MULTI_CONFIG) get_cmake_property(is_multi_config GENERATOR_IS_MULTI_CONFIG)
@ -351,110 +415,85 @@ ELSE()
ENDIF() ENDIF()
# Only generate this target if no higher-level project already has # Only generate this target if no higher-level project already has
IF (NOT TARGET uninstall) IF (NOT TARGET uninstall AND ASSIMP_INSTALL)
# add make uninstall capability # add make uninstall capability
CONFIGURE_FILE("${CMAKE_CURRENT_SOURCE_DIR}/cmake-modules/cmake_uninstall.cmake.in" "${CMAKE_CURRENT_BINARY_DIR}/cmake_uninstall.cmake" IMMEDIATE @ONLY) CONFIGURE_FILE("${CMAKE_CURRENT_SOURCE_DIR}/cmake-modules/cmake_uninstall.cmake.in" "${CMAKE_CURRENT_BINARY_DIR}/cmake_uninstall.cmake" IMMEDIATE @ONLY)
ADD_CUSTOM_TARGET(uninstall "${CMAKE_COMMAND}" -P "${CMAKE_CURRENT_BINARY_DIR}/cmake_uninstall.cmake") ADD_CUSTOM_TARGET(uninstall "${CMAKE_COMMAND}" -P "${CMAKE_CURRENT_BINARY_DIR}/cmake_uninstall.cmake")
ENDIF() ENDIF()
IF( UNIX )
# Use GNUInstallDirs for Unix predefined directories
INCLUDE(GNUInstallDirs)
SET( ASSIMP_LIB_INSTALL_DIR ${CMAKE_INSTALL_LIBDIR})
SET( ASSIMP_INCLUDE_INSTALL_DIR ${CMAKE_INSTALL_INCLUDEDIR})
SET( ASSIMP_BIN_INSTALL_DIR ${CMAKE_INSTALL_BINDIR})
ELSE()
# Cache these to allow the user to override them on non-Unix platforms
SET( ASSIMP_LIB_INSTALL_DIR "lib" CACHE STRING
"Path the built library files are installed to." )
SET( ASSIMP_INCLUDE_INSTALL_DIR "include" CACHE STRING
"Path the header files are installed to." )
SET( ASSIMP_BIN_INSTALL_DIR "bin" CACHE STRING
"Path the tool executables are installed to." )
SET(CMAKE_INSTALL_FULL_INCLUDEDIR ${CMAKE_INSTALL_PREFIX}/${ASSIMP_INCLUDE_INSTALL_DIR})
SET(CMAKE_INSTALL_FULL_LIBDIR ${CMAKE_INSTALL_PREFIX}/${ASSIMP_LIB_INSTALL_DIR})
SET(CMAKE_INSTALL_FULL_BINDIR ${CMAKE_INSTALL_PREFIX}/${ASSIMP_BIN_INSTALL_DIR})
ENDIF()
set(GENERATED_DIR "${CMAKE_CURRENT_BINARY_DIR}/generated")
IF(ASSIMP_HUNTER_ENABLED) IF(ASSIMP_HUNTER_ENABLED)
set(CONFIG_INSTALL_DIR "lib/cmake/${PROJECT_NAME}") set(CONFIG_INSTALL_DIR "lib/cmake/${PROJECT_NAME}")
set(INCLUDE_INSTALL_DIR "include") set(CMAKE_CONFIG_TEMPLATE_FILE "cmake-modules/assimp-hunter-config.cmake.in")
set(NAMESPACE "${PROJECT_NAME}::")
set(GENERATED_DIR "${CMAKE_CURRENT_BINARY_DIR}/generated") set(TARGETS_EXPORT_NAME "${PROJECT_NAME}Targets")
# Configuration
set(VERSION_CONFIG "${GENERATED_DIR}/${PROJECT_NAME}ConfigVersion.cmake") set(VERSION_CONFIG "${GENERATED_DIR}/${PROJECT_NAME}ConfigVersion.cmake")
set(PROJECT_CONFIG "${GENERATED_DIR}/${PROJECT_NAME}Config.cmake") set(PROJECT_CONFIG "${GENERATED_DIR}/${PROJECT_NAME}Config.cmake")
set(TARGETS_EXPORT_NAME "${PROJECT_NAME}Targets") ELSE()
set(NAMESPACE "${PROJECT_NAME}::") set(CONFIG_INSTALL_DIR "${ASSIMP_LIB_INSTALL_DIR}/cmake/assimp-${ASSIMP_VERSION_MAJOR}.${ASSIMP_VERSION_MINOR}")
set(CMAKE_CONFIG_TEMPLATE_FILE "cmake-modules/assimp-plain-config.cmake.in")
string(TOLOWER ${PROJECT_NAME} PROJECT_NAME_LOWERCASE)
set(NAMESPACE "${PROJECT_NAME_LOWERCASE}::")
set(TARGETS_EXPORT_NAME "${PROJECT_NAME_LOWERCASE}Targets")
set(VERSION_CONFIG "${GENERATED_DIR}/${PROJECT_NAME_LOWERCASE}ConfigVersion.cmake")
set(PROJECT_CONFIG "${GENERATED_DIR}/${PROJECT_NAME_LOWERCASE}Config.cmake")
ENDIF()
# Include module with fuction 'write_basic_package_version_file' set(INCLUDE_INSTALL_DIR "include")
include(CMakePackageConfigHelpers)
# Note: PROJECT_VERSION is used as a VERSION # Include module with fuction 'write_basic_package_version_file'
write_basic_package_version_file("${VERSION_CONFIG}" COMPATIBILITY SameMajorVersion) include(CMakePackageConfigHelpers)
# Use variables: # Note: PROJECT_VERSION is used as a VERSION
# * TARGETS_EXPORT_NAME write_basic_package_version_file("${VERSION_CONFIG}" COMPATIBILITY SameMajorVersion)
# * PROJECT_NAME
configure_package_config_file(
"cmake/assimp-hunter-config.cmake.in"
"${PROJECT_CONFIG}"
INSTALL_DESTINATION "${CONFIG_INSTALL_DIR}"
)
configure_package_config_file(
${CMAKE_CONFIG_TEMPLATE_FILE}
"${PROJECT_CONFIG}"
INSTALL_DESTINATION "${CONFIG_INSTALL_DIR}"
)
if(ASSIMP_INSTALL)
install( install(
FILES "${PROJECT_CONFIG}" "${VERSION_CONFIG}" FILES "${PROJECT_CONFIG}" "${VERSION_CONFIG}"
DESTINATION "${CONFIG_INSTALL_DIR}" DESTINATION "${CONFIG_INSTALL_DIR}"
COMPONENT ${LIBASSIMP-DEV_COMPONENT}
) )
install( install(
EXPORT "${TARGETS_EXPORT_NAME}" EXPORT "${TARGETS_EXPORT_NAME}"
NAMESPACE "${NAMESPACE}" NAMESPACE "${NAMESPACE}"
DESTINATION "${CONFIG_INSTALL_DIR}" DESTINATION "${CONFIG_INSTALL_DIR}"
COMPONENT ${LIBASSIMP-DEV_COMPONENT}
) )
ELSE() endif()
# cmake configuration files
if(${BUILD_SHARED_LIBS})
set(BUILD_LIB_TYPE SHARED)
else()
set(BUILD_LIB_TYPE STATIC)
endif()
IF( UNIX )
# Use GNUInstallDirs for Unix predefined directories
INCLUDE(GNUInstallDirs)
SET( ASSIMP_LIB_INSTALL_DIR ${CMAKE_INSTALL_LIBDIR})
SET( ASSIMP_INCLUDE_INSTALL_DIR ${CMAKE_INSTALL_INCLUDEDIR})
SET( ASSIMP_BIN_INSTALL_DIR ${CMAKE_INSTALL_BINDIR})
ELSE()
# Cache these to allow the user to override them on non-Unix platforms
SET( ASSIMP_LIB_INSTALL_DIR "lib" CACHE STRING
"Path the built library files are installed to." )
SET( ASSIMP_INCLUDE_INSTALL_DIR "include" CACHE STRING
"Path the header files are installed to." )
SET( ASSIMP_BIN_INSTALL_DIR "bin" CACHE STRING
"Path the tool executables are installed to." )
SET(CMAKE_INSTALL_FULL_INCLUDEDIR ${CMAKE_INSTALL_PREFIX}/${ASSIMP_INCLUDE_INSTALL_DIR})
SET(CMAKE_INSTALL_FULL_LIBDIR ${CMAKE_INSTALL_PREFIX}/${ASSIMP_LIB_INSTALL_DIR})
SET(CMAKE_INSTALL_FULL_BINDIR ${CMAKE_INSTALL_PREFIX}/${ASSIMP_BIN_INSTALL_DIR})
ENDIF()
CONFIGURE_FILE("${CMAKE_CURRENT_SOURCE_DIR}/assimp-config.cmake.in" "${CMAKE_CURRENT_BINARY_DIR}/assimp-config.cmake" @ONLY IMMEDIATE)
CONFIGURE_FILE("${CMAKE_CURRENT_SOURCE_DIR}/assimpTargets.cmake.in" "${CMAKE_CURRENT_BINARY_DIR}/assimpTargets.cmake" @ONLY IMMEDIATE)
IF (is_multi_config)
CONFIGURE_FILE("${CMAKE_CURRENT_SOURCE_DIR}/assimpTargets-debug.cmake.in" "${CMAKE_CURRENT_BINARY_DIR}/assimpTargets-debug.cmake" @ONLY IMMEDIATE)
CONFIGURE_FILE("${CMAKE_CURRENT_SOURCE_DIR}/assimpTargets-release.cmake.in" "${CMAKE_CURRENT_BINARY_DIR}/assimpTargets-release.cmake" @ONLY IMMEDIATE)
SET(PACKAGE_TARGETS_FILE "${CMAKE_CURRENT_BINARY_DIR}/assimpTargets-debug.cmake" "${CMAKE_CURRENT_BINARY_DIR}/assimpTargets-release.cmake")
ELSEIF (CMAKE_BUILD_TYPE STREQUAL Debug)
CONFIGURE_FILE("${CMAKE_CURRENT_SOURCE_DIR}/assimpTargets-debug.cmake.in" "${CMAKE_CURRENT_BINARY_DIR}/assimpTargets-debug.cmake" @ONLY IMMEDIATE)
SET(PACKAGE_TARGETS_FILE "${CMAKE_CURRENT_BINARY_DIR}/assimpTargets-debug.cmake")
ELSE()
CONFIGURE_FILE("${CMAKE_CURRENT_SOURCE_DIR}/assimpTargets-release.cmake.in" "${CMAKE_CURRENT_BINARY_DIR}/assimpTargets-release.cmake" @ONLY IMMEDIATE)
SET(PACKAGE_TARGETS_FILE "${CMAKE_CURRENT_BINARY_DIR}/assimpTargets-release.cmake")
ENDIF()
CONFIGURE_FILE("${CMAKE_CURRENT_SOURCE_DIR}/assimp-config-version.cmake.in" "${CMAKE_CURRENT_BINARY_DIR}/assimp-config-version.cmake" @ONLY IMMEDIATE)
#we should generated these scripts after CMake VERSION 3.0.2 using export(EXPORT ...) and write_basic_package_version_file(...)
INSTALL(FILES
"${CMAKE_CURRENT_BINARY_DIR}/assimp-config.cmake"
"${CMAKE_CURRENT_BINARY_DIR}/assimp-config-version.cmake"
"${CMAKE_CURRENT_BINARY_DIR}/assimpTargets.cmake"
${PACKAGE_TARGETS_FILE}
DESTINATION "${ASSIMP_LIB_INSTALL_DIR}/cmake/assimp-${ASSIMP_VERSION_MAJOR}.${ASSIMP_VERSION_MINOR}" COMPONENT ${LIBASSIMP-DEV_COMPONENT})
ENDIF()
IF( ASSIMP_BUILD_DOCS ) IF( ASSIMP_BUILD_DOCS )
ADD_SUBDIRECTORY(doc) ADD_SUBDIRECTORY(doc)
ENDIF() ENDIF()
# Look for system installed irrXML
IF ( ASSIMP_SYSTEM_IRRXML )
FIND_PACKAGE( IrrXML REQUIRED )
ENDIF()
# Search for external dependencies, and build them from source if not found # Search for external dependencies, and build them from source if not found
# Search for zlib # Search for zlib
IF(ASSIMP_HUNTER_ENABLED) IF(ASSIMP_HUNTER_ENABLED)
@ -466,11 +505,21 @@ IF(ASSIMP_HUNTER_ENABLED)
set(ZLIB_LIBRARIES ZLIB::zlib) set(ZLIB_LIBRARIES ZLIB::zlib)
set(ASSIMP_BUILD_MINIZIP TRUE) set(ASSIMP_BUILD_MINIZIP TRUE)
ELSE() ELSE()
# If the zlib is already found outside, add an export in case assimpTargets can't find it.
IF( ZLIB_FOUND AND ASSIMP_INSTALL)
INSTALL( TARGETS zlib zlibstatic
EXPORT "${TARGETS_EXPORT_NAME}")
ENDIF()
IF ( NOT ASSIMP_BUILD_ZLIB ) IF ( NOT ASSIMP_BUILD_ZLIB )
FIND_PACKAGE(ZLIB) FIND_PACKAGE(ZLIB)
ENDIF() ENDIF()
IF( NOT ZLIB_FOUND ) IF ( NOT ZLIB_FOUND AND NOT ASSIMP_BUILD_ZLIB )
message( FATAL_ERROR
"Build configured with -DASSIMP_BUILD_ZLIB=OFF but unable to find zlib"
)
ELSEIF( NOT ZLIB_FOUND )
MESSAGE(STATUS "compiling zlib from sources") MESSAGE(STATUS "compiling zlib from sources")
INCLUDE(CheckIncludeFile) INCLUDE(CheckIncludeFile)
INCLUDE(CheckTypeSize) INCLUDE(CheckTypeSize)
@ -535,15 +584,19 @@ ENDIF()
MARK_AS_ADVANCED ( ASSIMP_BUILD_ARCHITECTURE ASSIMP_BUILD_COMPILER ) MARK_AS_ADVANCED ( ASSIMP_BUILD_ARCHITECTURE ASSIMP_BUILD_COMPILER )
SET ( ASSIMP_BUILD_NONFREE_C4D_IMPORTER OFF CACHE BOOL SET ( ASSIMP_BUILD_NONFREE_C4D_IMPORTER OFF CACHE BOOL
"Build the C4D importer, which relies on the non-free Melange SDK." "Build the C4D importer, which relies on the non-free Cineware SDK."
) )
IF (ASSIMP_BUILD_NONFREE_C4D_IMPORTER) IF (ASSIMP_BUILD_NONFREE_C4D_IMPORTER)
IF ( MSVC ) SET(C4D_INCLUDES "${CMAKE_CURRENT_SOURCE_DIR}/contrib/Cineware/includes")
SET(C4D_INCLUDES "${CMAKE_CURRENT_SOURCE_DIR}/contrib/Melange/includes")
IF (WIN32)
# pick the correct prebuilt library # pick the correct prebuilt library
IF(MSVC15) IF(MSVC143)
SET(C4D_LIB_POSTFIX "_2022")
ELSEIF(MSV142)
SET(C4D_LIB_POSTFIX "_2019")
ELSEIF(MSVC15)
SET(C4D_LIB_POSTFIX "_2017") SET(C4D_LIB_POSTFIX "_2017")
ELSEIF(MSVC14) ELSEIF(MSVC14)
SET(C4D_LIB_POSTFIX "_2015") SET(C4D_LIB_POSTFIX "_2015")
@ -555,50 +608,162 @@ IF (ASSIMP_BUILD_NONFREE_C4D_IMPORTER)
SET(C4D_LIB_POSTFIX "_2010") SET(C4D_LIB_POSTFIX "_2010")
ELSE() ELSE()
MESSAGE( FATAL_ERROR MESSAGE( FATAL_ERROR
"C4D is currently only supported with MSVC 10, 11, 12, 14" "C4D for Windows is currently only supported with MSVC 10, 11, 12, 14, 14.2, 14.3"
) )
ENDIF() ENDIF()
SET(C4D_LIB_BASE_PATH "${CMAKE_CURRENT_SOURCE_DIR}/contrib/Melange/libraries/win") SET(C4D_LIB_BASE_PATH "${CMAKE_CURRENT_SOURCE_DIR}/contrib/Cineware/libraries/win")
SET(C4D_DEBUG_LIBRARIES SET(C4D_DEBUG_LIBRARIES
"${C4D_LIB_BASE_PATH}/melangelib${C4D_LIB_POSTFIX}/melangelib_debug.lib" "${C4D_LIB_BASE_PATH}/cinewarelib${C4D_LIB_POSTFIX}/cinewarelib_debug.lib"
"${C4D_LIB_BASE_PATH}/jpeglib${C4D_LIB_POSTFIX}/jpeglib_debug.lib" "${C4D_LIB_BASE_PATH}/jpeglib${C4D_LIB_POSTFIX}/jpeglib_debug.lib"
) )
SET(C4D_RELEASE_LIBRARIES SET(C4D_RELEASE_LIBRARIES
"${C4D_LIB_BASE_PATH}/melangelib${C4D_LIB_POSTFIX}/melangelib_release.lib" "${C4D_LIB_BASE_PATH}/cinewarelib${C4D_LIB_POSTFIX}/cinewarelib_release.lib"
"${C4D_LIB_BASE_PATH}/jpeglib${C4D_LIB_POSTFIX}/jpeglib_release.lib" "${C4D_LIB_BASE_PATH}/jpeglib${C4D_LIB_POSTFIX}/jpeglib_release.lib"
) )
# winsock and winmm are necessary dependencies of melange (this is undocumented, but true.) # winsock and winmm are necessary (and undocumented) dependencies of Cineware SDK because
# it can be used to communicate with a running Cinema 4D instance
SET(C4D_EXTRA_LIBRARIES WSock32.lib Winmm.lib) SET(C4D_EXTRA_LIBRARIES WSock32.lib Winmm.lib)
ELSEIF (APPLE)
SET(C4D_LIB_BASE_PATH "${CMAKE_CURRENT_SOURCE_DIR}/contrib/Cineware/libraries/osx")
SET(C4D_DEBUG_LIBRARIES
"${C4D_LIB_BASE_PATH}/debug/libcinewarelib.a"
"${C4D_LIB_BASE_PATH}/debug/libjpeglib.a"
)
SET(C4D_RELEASE_LIBRARIES
"${C4D_LIB_BASE_PATH}/release/libcinewarelib.a"
"${C4D_LIB_BASE_PATH}/release/libjpeglib.a"
)
ELSE () ELSE ()
MESSAGE( FATAL_ERROR MESSAGE( FATAL_ERROR
"C4D is currently only available on Windows with melange SDK installed in contrib/Melange" "C4D is currently only available on Windows and macOS with Cineware SDK installed in contrib/Cineware"
) )
ENDIF () ENDIF ()
ELSE () ELSE ()
ADD_DEFINITIONS( -DASSIMP_BUILD_NO_C4D_IMPORTER ) ADD_DEFINITIONS( -DASSIMP_BUILD_NO_C4D_IMPORTER )
ENDIF () ENDIF ()
IF(NOT ASSIMP_HUNTER_ENABLED) if(ASSIMP_BUILD_DRACO_STATIC)
ADD_SUBDIRECTORY(contrib) set(ASSIMP_BUILD_DRACO ON)
endif()
# Draco requires cmake 3.12
IF (DEFINED CMAKE_VERSION AND "${CMAKE_VERSION}" VERSION_LESS "3.12")
message(NOTICE "draco requires cmake 3.12 or newer, cmake is ${CMAKE_VERSION} . Draco is disabled")
SET ( ASSIMP_BUILD_DRACO OFF CACHE BOOL "Disabled: Draco requires newer cmake" FORCE )
ELSE()
OPTION ( ASSIMP_BUILD_DRACO "If the Draco libraries are to be built. Primarily for glTF" OFF )
IF ( ASSIMP_BUILD_DRACO )
# Primarily for glTF v2
# Enable Draco glTF feature set
set(DRACO_GLTF_BITSTREAM ON CACHE BOOL "" FORCE)
# Disable unnecessary or omitted components
set(DRACO_JS_GLUE OFF CACHE BOOL "" FORCE)
set(DRACO_WASM OFF CACHE BOOL "" FORCE)
set(DRACO_MAYA_PLUGIN OFF CACHE BOOL "" FORCE)
set(DRACO_UNITY_PLUGIN OFF CACHE BOOL "" FORCE)
set(DRACO_TESTS OFF CACHE BOOL "" FORCE)
IF(ASSIMP_HUNTER_ENABLED)
hunter_add_package(draco)
find_package(draco CONFIG REQUIRED)
set(draco_LIBRARIES draco::draco)
ELSE()
# Draco 1.4.1 has many warnings and will not build with /WX or -Werror
# See https://github.com/google/draco/issues/672
# and https://github.com/google/draco/issues/673
IF(MSVC)
set(DRACO_CXX_FLAGS "/W0")
ELSE()
list(APPEND DRACO_CXX_FLAGS
"-Wno-bool-compare"
"-Wno-comment"
"-Wno-maybe-uninitialized"
"-Wno-sign-compare"
"-Wno-unused-local-typedefs"
)
if(NOT ASSIMP_BUILD_DRACO_STATIC)
# Draco 1.4.1 does not explicitly export any symbols under GCC/clang
list(APPEND DRACO_CXX_FLAGS
"-fvisibility=default"
)
endif()
ENDIF()
# Don't build or install all of Draco by default
ADD_SUBDIRECTORY( "contrib/draco" EXCLUDE_FROM_ALL )
if(ASSIMP_BUILD_DRACO_STATIC)
set_property(DIRECTORY "contrib/draco" PROPERTY BUILD_SHARED_LIBS OFF)
endif()
if(MSVC OR WIN32)
set(draco_LIBRARIES "draco")
else()
if(ASSIMP_BUILD_DRACO_STATIC)
set(draco_LIBRARIES "draco_static")
else()
set(draco_LIBRARIES "draco_shared")
endif()
endif()
# Don't build the draco command-line tools by default
set_target_properties(draco_encoder draco_decoder PROPERTIES
EXCLUDE_FROM_ALL TRUE
EXCLUDE_FROM_DEFAULT_BUILD TRUE
)
# Do build the draco shared library
set_target_properties(${draco_LIBRARIES} PROPERTIES
EXCLUDE_FROM_ALL FALSE
EXCLUDE_FROM_DEFAULT_BUILD FALSE
)
TARGET_USE_COMMON_OUTPUT_DIRECTORY(${draco_LIBRARIES})
TARGET_USE_COMMON_OUTPUT_DIRECTORY(draco_encoder)
TARGET_USE_COMMON_OUTPUT_DIRECTORY(draco_decoder)
set(draco_INCLUDE_DIRS "${CMAKE_CURRENT_SOURCE_DIR}/contrib/draco/src")
# This is probably wrong
if (ASSIMP_INSTALL)
INSTALL( TARGETS ${draco_LIBRARIES}
EXPORT "${TARGETS_EXPORT_NAME}"
LIBRARY DESTINATION ${ASSIMP_LIB_INSTALL_DIR}
ARCHIVE DESTINATION ${ASSIMP_LIB_INSTALL_DIR}
RUNTIME DESTINATION ${ASSIMP_BIN_INSTALL_DIR}
FRAMEWORK DESTINATION ${ASSIMP_LIB_INSTALL_DIR}
COMPONENT ${LIBASSIMP_COMPONENT}
INCLUDES DESTINATION include
)
endif()
ENDIF()
ENDIF()
ENDIF() ENDIF()
# Main assimp code
ADD_SUBDIRECTORY( code/ ) ADD_SUBDIRECTORY( code/ )
IF ( ASSIMP_BUILD_ASSIMP_TOOLS ) IF ( ASSIMP_BUILD_ASSIMP_TOOLS )
# The viewer for windows only # The viewer for windows only
IF ( WIN32 ) IF (WIN32)
OPTION ( ASSIMP_BUILD_ASSIMP_VIEW "If the Assimp view tool is built. (requires DirectX)" OFF ) FIND_PACKAGE(DirectX)
OPTION ( ASSIMP_BUILD_ASSIMP_VIEW "If the Assimp view tool is built. (requires DirectX)" ${DirectX_FOUND} )
IF ( ASSIMP_BUILD_ASSIMP_VIEW ) IF ( ASSIMP_BUILD_ASSIMP_VIEW )
ADD_SUBDIRECTORY( tools/assimp_view/ ) ADD_SUBDIRECTORY( tools/assimp_view/ )
ENDIF () ENDIF ()
ELSE()
MESSAGE("Building Assimp Viewer only supported on Windows.")
ENDIF () ENDIF ()
# The command line tool # The command line tool
ADD_SUBDIRECTORY( tools/assimp_cmd/ ) ADD_SUBDIRECTORY( tools/assimp_cmd/ )
ENDIF () ENDIF ()
IF ( ASSIMP_BUILD_SAMPLES) IF ( ASSIMP_BUILD_SAMPLES )
SET( SAMPLES_DIR ${CMAKE_CURRENT_SOURCE_DIR}/samples ) SET( SAMPLES_DIR ${CMAKE_CURRENT_SOURCE_DIR}/samples )
SET( SAMPLES_SHARED_CODE_DIR ${SAMPLES_DIR}/SharedCode ) SET( SAMPLES_SHARED_CODE_DIR ${SAMPLES_DIR}/SharedCode )
IF ( WIN32 ) IF ( WIN32 )
@ -612,12 +777,22 @@ IF ( ASSIMP_BUILD_TESTS )
ADD_SUBDIRECTORY( test/ ) ADD_SUBDIRECTORY( test/ )
ENDIF () ENDIF ()
# Generate a pkg-config .pc for the Assimp library. # Generate a pkg-config .pc, revision.h, and config.h for the Assimp library.
CONFIGURE_FILE( "${PROJECT_SOURCE_DIR}/assimp.pc.in" "${PROJECT_BINARY_DIR}/assimp.pc" @ONLY ) CONFIGURE_FILE( "${PROJECT_SOURCE_DIR}/assimp.pc.in" "${PROJECT_BINARY_DIR}/assimp.pc" @ONLY )
IF ( ASSIMP_INSTALL ) IF ( ASSIMP_INSTALL )
INSTALL( FILES "${PROJECT_BINARY_DIR}/assimp.pc" DESTINATION ${ASSIMP_LIB_INSTALL_DIR}/pkgconfig/ COMPONENT ${LIBASSIMP-DEV_COMPONENT}) INSTALL( FILES "${PROJECT_BINARY_DIR}/assimp.pc" DESTINATION ${ASSIMP_LIB_INSTALL_DIR}/pkgconfig/ COMPONENT ${LIBASSIMP-DEV_COMPONENT})
ENDIF() ENDIF()
CONFIGURE_FILE(
${CMAKE_CURRENT_LIST_DIR}/include/assimp/revision.h.in
${CMAKE_CURRENT_BINARY_DIR}/include/assimp/revision.h
)
CONFIGURE_FILE(
${CMAKE_CURRENT_LIST_DIR}/include/assimp/config.h.in
${CMAKE_CURRENT_BINARY_DIR}/include/assimp/config.h
)
IF ( ASSIMP_INSTALL ) IF ( ASSIMP_INSTALL )
IF(CMAKE_CPACK_COMMAND AND UNIX AND ASSIMP_OPT_BUILD_PACKAGES) IF(CMAKE_CPACK_COMMAND AND UNIX AND ASSIMP_OPT_BUILD_PACKAGES)
# Packing information # Packing information
@ -651,7 +826,7 @@ IF ( ASSIMP_INSTALL )
SET(CPACK_DEBIAN_PACKAGE_SECTION "libs" ) SET(CPACK_DEBIAN_PACKAGE_SECTION "libs" )
SET(CPACK_DEBIAN_PACKAGE_DEPENDS "${CPACK_COMPONENTS_ALL}") SET(CPACK_DEBIAN_PACKAGE_DEPENDS "${CPACK_COMPONENTS_ALL}")
SET(CPACK_DEBIAN_PACKAGE_SUGGESTS) SET(CPACK_DEBIAN_PACKAGE_SUGGESTS)
SET(cPACK_DEBIAN_PACKAGE_NAME "assimp") SET(CPACK_DEBIAN_PACKAGE_NAME "assimp")
SET(CPACK_DEBIAN_PACKAGE_REMOVE_SOURCE_FILES contrib/gtest contrib/zlib workspaces test doc obj samples packaging) SET(CPACK_DEBIAN_PACKAGE_REMOVE_SOURCE_FILES contrib/gtest contrib/zlib workspaces test doc obj samples packaging)
SET(CPACK_DEBIAN_PACKAGE_SOURCE_COPY svn export --force) SET(CPACK_DEBIAN_PACKAGE_SOURCE_COPY svn export --force)
SET(CPACK_DEBIAN_CHANGELOG) SET(CPACK_DEBIAN_CHANGELOG)
@ -679,7 +854,8 @@ if(WIN32)
ENDIF() ENDIF()
IF(MSVC_TOOLSET_VERSION) IF(MSVC_TOOLSET_VERSION)
set(MSVC_PREFIX "vc${MSVC_TOOLSET_VERSION}") SET(MSVC_PREFIX "vc${MSVC_TOOLSET_VERSION}")
SET(ASSIMP_MSVC_VERSION ${MSVC_PREFIX})
ELSE() ELSE()
IF(MSVC12) IF(MSVC12)
SET(ASSIMP_MSVC_VERSION "vc120") SET(ASSIMP_MSVC_VERSION "vc120")
@ -687,6 +863,10 @@ if(WIN32)
SET(ASSIMP_MSVC_VERSION "vc140") SET(ASSIMP_MSVC_VERSION "vc140")
ELSEIF(MSVC15) ELSEIF(MSVC15)
SET(ASSIMP_MSVC_VERSION "vc141") SET(ASSIMP_MSVC_VERSION "vc141")
ELSEIF(MSV142)
SET(ASSIMP_MSVC_VERSION "vc142")
ELSEIF(MSVC143)
SET(ASSIMP_MSVC_VERSION "vc143")
ENDIF() ENDIF()
ENDIF() ENDIF()

128
CODE_OF_CONDUCT.md 100644
View File

@ -0,0 +1,128 @@
# Contributor Covenant Code of Conduct
## Our Pledge
We as members, contributors, and leaders pledge to make participation in our
community a harassment-free experience for everyone, regardless of age, body
size, visible or invisible disability, ethnicity, sex characteristics, gender
identity and expression, level of experience, education, socio-economic status,
nationality, personal appearance, race, religion, or sexual identity
and orientation.
We pledge to act and interact in ways that contribute to an open, welcoming,
diverse, inclusive, and healthy community.
## Our Standards
Examples of behavior that contributes to a positive environment for our
community include:
* Demonstrating empathy and kindness toward other people
* Being respectful of differing opinions, viewpoints, and experiences
* Giving and gracefully accepting constructive feedback
* Accepting responsibility and apologizing to those affected by our mistakes,
and learning from the experience
* Focusing on what is best not just for us as individuals, but for the
overall community
Examples of unacceptable behavior include:
* The use of sexualized language or imagery, and sexual attention or
advances of any kind
* Trolling, insulting or derogatory comments, and personal or political attacks
* Public or private harassment
* Publishing others' private information, such as a physical or email
address, without their explicit permission
* Other conduct which could reasonably be considered inappropriate in a
professional setting
## Enforcement Responsibilities
Community leaders are responsible for clarifying and enforcing our standards of
acceptable behavior and will take appropriate and fair corrective action in
response to any behavior that they deem inappropriate, threatening, offensive,
or harmful.
Community leaders have the right and responsibility to remove, edit, or reject
comments, commits, code, wiki edits, issues, and other contributions that are
not aligned to this Code of Conduct, and will communicate reasons for moderation
decisions when appropriate.
## Scope
This Code of Conduct applies within all community spaces, and also applies when
an individual is officially representing the community in public spaces.
Examples of representing our community include using an official e-mail address,
posting via an official social media account, or acting as an appointed
representative at an online or offline event.
## Enforcement
Instances of abusive, harassing, or otherwise unacceptable behavior may be
reported to the community leaders responsible for enforcement at
.
All complaints will be reviewed and investigated promptly and fairly.
All community leaders are obligated to respect the privacy and security of the
reporter of any incident.
## Enforcement Guidelines
Community leaders will follow these Community Impact Guidelines in determining
the consequences for any action they deem in violation of this Code of Conduct:
### 1. Correction
**Community Impact**: Use of inappropriate language or other behavior deemed
unprofessional or unwelcome in the community.
**Consequence**: A private, written warning from community leaders, providing
clarity around the nature of the violation and an explanation of why the
behavior was inappropriate. A public apology may be requested.
### 2. Warning
**Community Impact**: A violation through a single incident or series
of actions.
**Consequence**: A warning with consequences for continued behavior. No
interaction with the people involved, including unsolicited interaction with
those enforcing the Code of Conduct, for a specified period of time. This
includes avoiding interactions in community spaces as well as external channels
like social media. Violating these terms may lead to a temporary or
permanent ban.
### 3. Temporary Ban
**Community Impact**: A serious violation of community standards, including
sustained inappropriate behavior.
**Consequence**: A temporary ban from any sort of interaction or public
communication with the community for a specified period of time. No public or
private interaction with the people involved, including unsolicited interaction
with those enforcing the Code of Conduct, is allowed during this period.
Violating these terms may lead to a permanent ban.
### 4. Permanent Ban
**Community Impact**: Demonstrating a pattern of violation of community
standards, including sustained inappropriate behavior, harassment of an
individual, or aggression toward or disparagement of classes of individuals.
**Consequence**: A permanent ban from any sort of public interaction within
the community.
## Attribution
This Code of Conduct is adapted from the [Contributor Covenant][homepage],
version 2.0, available at
https://www.contributor-covenant.org/version/2/0/code_of_conduct.html.
Community Impact Guidelines were inspired by [Mozilla's code of conduct
enforcement ladder](https://github.com/mozilla/diversity).
[homepage]: https://www.contributor-covenant.org
For answers to common questions about this code of conduct, see the FAQ at
https://www.contributor-covenant.org/faq. Translations are available at
https://www.contributor-covenant.org/translations.

22
Dockerfile 100644
View File

@ -0,0 +1,22 @@
FROM ubuntu:22.04
RUN apt-get update && apt-get install --no-install-recommends -y ninja-build \
git cmake build-essential software-properties-common
RUN add-apt-repository ppa:ubuntu-toolchain-r/test && apt-get update
WORKDIR /opt
RUN apt install zlib1g-dev
# Build Assimp
RUN git clone https://github.com/assimp/assimp.git /opt/assimp
WORKDIR /opt/assimp
RUN git checkout master \
&& mkdir build && cd build && \
cmake -G 'Ninja' \
-DCMAKE_BUILD_TYPE=Release \
-DASSIMP_BUILD_ASSIMP_TOOLS=ON \
.. && \
ninja -j4 && ninja install

37
INSTALL
View File

@ -8,43 +8,10 @@ Getting the documentation
------------------------------ ------------------------------
A regularly-updated copy is available at A regularly-updated copy is available at
http://assimp.sourceforge.net/lib_html/index.html https://assimp-docs.readthedocs.io/en/latest/
A CHM file is included in the SVN repos: ./doc/AssimpDoc_Html/AssimpDoc.chm.
To build the doxygen documentation on your own, follow these steps:
a) download & install latest doxygen
b) make sure doxygen is in the executable search path
c) navigate to ./doc
d) and run 'doxygen'
Open the generated HTML (AssimpDoc_Html/index.html) in the browser of your choice.
Windows only: To generate the CHM doc, install 'Microsoft HTML Workshop'
and configure the path to it in the DOXYFILE first.
------------------------------ ------------------------------
Building Assimp Building Assimp
------------------------------ ------------------------------
More detailed build instructions can be found in the documentation, Just check the build-instructions which you can find here: https://github.com/assimp/assimp/blob/master/Build.md
this section is just for the inpatient among you.
CMake is the preferred build system for Assimp. The minimum required version
is 2.6. If you don't have it yet, downloads for CMake can be found on
http://www.cmake.org/.
For Unix:
1. mkdir build && cd build
2. cmake .. -G 'Unix Makefiles'
3. make -j4
For Windows:
1. Open a command prompt
2. mkdir build
3. cd build
4. cmake ..
5. cmake --build .
For iOS:
Just check the following project, which deploys a compiler toolchain for different iOS-versions: https://github.com/assimp/assimp/tree/master/port/iOS

View File

@ -1,6 +1,6 @@
Open Asset Import Library (assimp) Open Asset Import Library (assimp)
Copyright (c) 2006-2020, assimp team Copyright (c) 2006-2021, assimp team
All rights reserved. All rights reserved.
Redistribution and use of this software in source and binary forms, Redistribution and use of this software in source and binary forms,

1
README
View File

@ -1 +0,0 @@
See Readme.md

175
Readme.md
View File

@ -1,180 +1,82 @@
Open Asset Import Library (assimp) Open Asset Import Library (assimp)
================================== ==================================
A library to import and export various 3d-model-formats including scene-post-processing to generate missing render data.
Open Asset Import Library is a library to load various 3d file formats into a shared, in-memory format. It supports more than __40 file formats__ for import and a growing selection of file formats for export.
### Current project status ### ### Current project status ###
[![Financial Contributors on Open Collective](https://opencollective.com/assimp/all/badge.svg?label=financial+contributors)](https://opencollective.com/assimp) [![Financial Contributors on Open Collective](https://opencollective.com/assimp/all/badge.svg?label=financial+contributors)](https://opencollective.com/assimp)
![C/C++ CI](https://github.com/assimp/assimp/workflows/C/C++%20CI/badge.svg) ![C/C++ CI](https://github.com/assimp/assimp/workflows/C/C++%20CI/badge.svg)
[![Linux Build Status](https://travis-ci.org/assimp/assimp.svg)](https://travis-ci.org/assimp/assimp) [![Codacy Badge](https://app.codacy.com/project/badge/Grade/9973693b7bdd4543b07084d5d9cf4745)](https://www.codacy.com/gh/assimp/assimp/dashboard?utm_source=github.com&amp;utm_medium=referral&amp;utm_content=assimp/assimp&amp;utm_campaign=Badge_Grade)
[![Windows Build Status](https://ci.appveyor.com/api/projects/status/tmo433wax6u6cjp4?svg=true)](https://ci.appveyor.com/project/kimkulling/assimp)
<a href="https://scan.coverity.com/projects/5607">
<img alt="Coverity Scan Build Status"
src="https://scan.coverity.com/projects/5607/badge.svg"/>
</a>
[![Coverage Status](https://coveralls.io/repos/github/assimp/assimp/badge.svg?branch=master)](https://coveralls.io/github/assimp/assimp?branch=master)
[![Join the chat at https://gitter.im/assimp/assimp](https://badges.gitter.im/assimp/assimp.svg)](https://gitter.im/assimp/assimp?utm_source=badge&utm_medium=badge&utm_campaign=pr-badge&utm_content=badge) [![Join the chat at https://gitter.im/assimp/assimp](https://badges.gitter.im/assimp/assimp.svg)](https://gitter.im/assimp/assimp?utm_source=badge&utm_medium=badge&utm_campaign=pr-badge&utm_content=badge)
[![Average time to resolve an issue](http://isitmaintained.com/badge/resolution/assimp/assimp.svg)](http://isitmaintained.com/project/assimp/assimp "Average time to resolve an issue") [![Average time to resolve an issue](http://isitmaintained.com/badge/resolution/assimp/assimp.svg)](http://isitmaintained.com/project/assimp/assimp "Average time to resolve an issue")
[![Codacy Badge](https://api.codacy.com/project/badge/Grade/5be56faac64f46fc941ac890fb4febef)](https://www.codacy.com/app/kimkulling/assimp?utm_source=github.com&amp;utm_medium=referral&amp;utm_content=assimp/assimp&amp;utm_campaign=Badge_Grade) [![Percentage of issues still open](http://isitmaintained.com/badge/open/assimp/assimp.svg)](http://isitmaintained.com/project/assimp/assimp "Percentage of issues still open")
[![Total alerts](https://img.shields.io/lgtm/alerts/g/assimp/assimp.svg?logo=lgtm&logoWidth=18)](https://lgtm.com/projects/g/assimp/assimp/alerts/)
<br> <br>
APIs are provided for C and C++. There are various bindings to other languages (C#, Java, Python, Delphi, D). Assimp also runs on Android and iOS. APIs are provided for C and C++. There are various bindings to other languages (C#, Java, Python, Delphi, D). Assimp also runs on Android and iOS.
Additionally, assimp features various __mesh post-processing tools__: normals and tangent space generation, triangulation, vertex cache locality optimization, removal of degenerate primitives and duplicate vertices, sorting by primitive type, merging of redundant materials and many more.
[Check the latest doc](https://assimp-docs.readthedocs.io/en/latest/). ### Documentation ###
Read [our latest documentation](https://assimp-docs.readthedocs.io/en/latest/).
Additionally, assimp features various __mesh post processing tools__: normals and tangent space generation, triangulation, vertex cache locality optimization, removal of degenerate primitives and duplicate vertices, sorting by primitive type, merging of redundant materials and many more. ### Pre-built binaries ###
Download binaries from [our Itchi Projectspace](https://kimkulling.itch.io/the-asset-importer-lib).
This is the development repo containing the latest features and bugfixes. For productive use though, we recommend one of the stable releases available from [Github Assimp Releases](https://github.com/assimp/assimp/releases). ### Test data ###
Clone [our model database](https://github.com/assimp/assimp-mdb).
Monthly donations via Patreon: ### Communities ###
<br>[![Patreon](https://cloud.githubusercontent.com/assets/8225057/5990484/70413560-a9ab-11e4-8942-1a63607c0b00.png)](http://www.patreon.com/assimp) - Ask questions at [the Assimp Discussion Board](https://github.com/assimp/assimp/discussions).
- Find us on [https://discord.gg/s9KJfaem](https://discord.gg/kKazXMXDy2)
<br> - Ask [the Assimp community on Reddit](https://www.reddit.com/r/Assimp/).
- Ask on [StackOverflow with the assimp-tag](http://stackoverflow.com/questions/tagged/assimp?sort=newest).
One-off donations via PayPal: - Nothing has worked? File a question or an issue-report at [The Assimp-Issue Tracker](https://github.com/assimp/assimp/issues)
<br>[![PayPal](https://www.paypalobjects.com/en_US/i/btn/btn_donate_LG.gif)](https://www.paypal.com/cgi-bin/webscr?cmd=_s-xclick&hosted_button_id=4JRJVPXC4QJM4)
<br>
Please check our Wiki as well: https://github.com/assimp/assimp/wiki
If you want to check our Model-Database, use the following repo: https://github.com/assimp/assimp-mdb
#### Supported file formats #### #### Supported file formats ####
See [the complete list of supported formats](https://github.com/assimp/assimp/blob/master/doc/Fileformats.md).
__Importers__:
- 3D
- [3DS](https://en.wikipedia.org/wiki/.3ds)
- [3MF](https://en.wikipedia.org/wiki/3D_Manufacturing_Format)
- AC
- [AC3D](https://en.wikipedia.org/wiki/AC3D)
- ACC
- AMJ
- ASE
- ASK
- B3D
- [BLEND](https://en.wikipedia.org/wiki/.blend_(file_format))
- [BVH](https://en.wikipedia.org/wiki/Biovision_Hierarchy)
- CMS
- COB
- [DAE/Collada](https://en.wikipedia.org/wiki/COLLADA)
- [DXF](https://en.wikipedia.org/wiki/AutoCAD_DXF)
- ENFF
- [FBX](https://en.wikipedia.org/wiki/FBX)
- [glTF 1.0](https://en.wikipedia.org/wiki/GlTF#glTF_1.0) + GLB
- [glTF 2.0](https://en.wikipedia.org/wiki/GlTF#glTF_2.0):
At the moment for glTF2.0 the following extensions are supported:
+ KHR_lights_punctual ( 5.0 )
+ KHR_materials_pbrSpecularGlossiness ( 5.0 )
+ KHR_materials_unlit ( 5.0 )
+ KHR_texture_transform ( 5.1 under test )
- HMB
- IFC-STEP
- IRR / IRRMESH
- [LWO](https://en.wikipedia.org/wiki/LightWave_3D)
- LWS
- LXO
- [M3D](https://bztsrc.gitlab.io/model3d)
- MD2
- MD3
- MD5
- MDC
- MDL
- MESH / MESH.XML
- MOT
- MS3D
- NDO
- NFF
- [OBJ](https://en.wikipedia.org/wiki/Wavefront_.obj_file)
- [OFF](https://en.wikipedia.org/wiki/OFF_(file_format))
- [OGEX](https://en.wikipedia.org/wiki/Open_Game_Engine_Exchange)
- [PLY](https://en.wikipedia.org/wiki/PLY_(file_format))
- PMX
- PRJ
- Q3O
- Q3S
- RAW
- SCN
- SIB
- SMD
- [STP](https://en.wikipedia.org/wiki/ISO_10303-21)
- [STL](https://en.wikipedia.org/wiki/STL_(file_format))
- TER
- UC
- VTA
- X
- [X3D](https://en.wikipedia.org/wiki/X3D)
- XGL
- ZGL
Additionally, some formats are supported by dependency on non-free code or external SDKs (not built by default):
- [C4D](https://en.wikipedia.org/wiki/Cinema_4D) (https://github.com/assimp/assimp/wiki/Cinema4D-&-Melange) IMporting geometry + node hierarchy are currently supported
__Exporters__:
- DAE (Collada)
- STL
- OBJ
- PLY
- X
- 3DS
- JSON (for WebGl, via https://github.com/acgessler/assimp2json)
- ASSBIN
- STEP
- glTF 1.0 (partial)
- glTF 2.0 (partial)
- 3MF ( experimental )
- FBX ( experimental )
### Building ### ### Building ###
Take a look into the https://github.com/assimp/assimp/blob/master/Build.md file. We are available in vcpkg, and our build system is CMake; if you used CMake before there is a good chance you know what to do. Start by reading [our build instructions](https://github.com/assimp/assimp/blob/master/Build.md). We are available in vcpkg, and our build system is CMake; if you used CMake before there is a good chance you know what to do.
### Ports ### ### Ports ###
* [Android](port/AndroidJNI/README.md) * [Android](port/AndroidJNI/README.md)
* [Python](port/PyAssimp/README.md) * [Python](port/PyAssimp/README.md)
* [.NET](https://github.com/assimp/assimp-net) * [.NET](https://bitbucket.org/Starnick/assimpnet/src/master/)
* [Pascal](port/AssimpPascal/Readme.md) * [Pascal](port/AssimpPascal/Readme.md)
* [Javascript (Alpha)](https://github.com/makc/assimp2json) * [Javascript (Alpha)](https://github.com/makc/assimp2json)
* [Unity 3d Plugin](https://www.assetstore.unity3d.com/en/#!/content/91777) * [Javascript/Node.js Interface](https://github.com/kovacsv/assimpjs)
* [Unity 3d Plugin](https://ricardoreis.net/trilib-2/)
* [Unreal Engine Plugin](https://github.com/irajsb/UE4_Assimp/)
* [JVM](https://github.com/kotlin-graphics/assimp) Full jvm port (current [status](https://github.com/kotlin-graphics/assimp/wiki/Status)) * [JVM](https://github.com/kotlin-graphics/assimp) Full jvm port (current [status](https://github.com/kotlin-graphics/assimp/wiki/Status))
* [HAXE-Port](https://github.com/longde123/assimp-haxe) The Assimp-HAXE-port. * [HAXE-Port](https://github.com/longde123/assimp-haxe) The Assimp-HAXE-port.
* [Rust](https://github.com/jkvargas/russimp)
### Other tools ### ### Other tools ###
[open3mod](https://github.com/acgessler/open3mod) is a powerful 3D model viewer based on Assimp's import and export abilities. [open3mod](https://github.com/acgessler/open3mod) is a powerful 3D model viewer based on Assimp's import and export abilities.
[Assimp-Viewer](https://github.com/assimp/assimp_view) is an experimental implementation for an Asset-Viewer based on ImGUI and Assimp (experimental).
#### Repository structure #### #### Repository structure ####
Open Asset Import Library is implemented in C++. The directory structure looks like: Open Asset Import Library is implemented in C++. The directory structure looks like this:
/code Source code /code Source code
/contrib Third-party libraries /contrib Third-party libraries
/doc Documentation (doxysource and pre-compiled docs) /doc Documentation (doxysource and pre-compiled docs)
/fuzz Contains the test code for the Google Fuzzer project
/include Public header C and C++ header files /include Public header C and C++ header files
/scripts Scripts used to generate the loading code for some formats /scripts Scripts are used to generate the loading code for some formats
/port Ports to other languages and scripts to maintain those. /port Ports to other languages and scripts to maintain those.
/test Unit- and regression tests, test suite of models /test Unit- and regression tests, test suite of models
/tools Tools (old assimp viewer, command line `assimp`) /tools Tools (old assimp viewer, command line `assimp`)
/samples A small number of samples to illustrate possible /samples A small number of samples to illustrate possible use cases for Assimp
use cases for Assimp
The source code is organized in the following way: The source code is organized in the following way:
code/Common The base implementation for importers and the infrastructure code/Common The base implementation for importers and the infrastructure
code/PostProcessing The post-processing steps code/CApi Special implementations which are only used for the C-API
code/<FormatName> Implementation for import and export for the format code/Geometry A collection of geometry tools
code/Material The material system
### Where to get help ### code/PBR An exporter for physical-based models
For more information, visit [our website](http://assimp.org/). Or check out the `./doc`- folder, which contains the official documentation in HTML format. code/PostProcessing The post-processing steps
(CHMs for Windows are included in some release packages and should be located right here in the root folder). code/AssetLib/<FormatName> Implementation for import and export of the format
If the docs don't solve your problem, ask on [StackOverflow](http://stackoverflow.com/questions/tagged/assimp?sort=newest). If you think you found a bug, please open an issue on Github.
For development discussions, there is also a (very low-volume) mailing list, _assimp-discussions_
[(subscribe here)]( https://lists.sourceforge.net/lists/listinfo/assimp-discussions)
Open Asset Import Library is a library to load various 3d file formats into a shared, in-memory format. It supports more than __40 file formats__ for import and a growing selection of file formats for export.
And we also have a Gitter-channel:Gitter [![Join the chat at https://gitter.im/assimp/assimp](https://badges.gitter.im/assimp/assimp.svg)](https://gitter.im/assimp/assimp?utm_source=badge&utm_medium=badge&utm_campaign=pr-badge&utm_content=badge)<br>
### Contributing ### ### Contributing ###
Contributions to assimp are highly appreciated. The easiest way to get involved is to submit Contributions to assimp are highly appreciated. The easiest way to get involved is to submit
@ -196,6 +98,7 @@ Become a financial contributor and help us sustain our community. [[Contribute](
<a href="https://opencollective.com/assimp"><img src="https://opencollective.com/assimp/individuals.svg?width=890"></a> <a href="https://opencollective.com/assimp"><img src="https://opencollective.com/assimp/individuals.svg?width=890"></a>
#### Organizations #### Organizations
Support this project with your organization. Your logo will show up here with a link to your website. [[Contribute](https://opencollective.com/assimp/contribute)] Support this project with your organization. Your logo will show up here with a link to your website. [[Contribute](https://opencollective.com/assimp/contribute)]
@ -210,4 +113,4 @@ and don't sue us if our code doesn't work. Note that, unlike LGPLed code, you ma
For the legal details, see the `LICENSE` file. For the legal details, see the `LICENSE` file.
### Why this name ### ### Why this name ###
Sorry, we're germans :-), no english native speakers ... Sorry, we're germans :-), no English native speakers ...

16
SECURITY.md 100644
View File

@ -0,0 +1,16 @@
# Security Policy
## Supported Versions
Use this section to tell people about which versions of your project are
currently being supported with security updates.
| Version | Supported |
| ------- | ------------------ |
| 5.2.4 | :white_check_mark: |
## Reporting a Vulnerability
If you have found any security vulnerability you can contact us via
kim.kulling@googlemail.com

View File

@ -1,81 +0,0 @@
# AppVeyor file
# http://www.appveyor.com/docs/appveyor-yml
# clone directory
clone_folder: c:\projects\assimp
clone_depth: 1
# branches to build
branches:
# whitelist
only:
- master
matrix:
fast_finish: true
image:
- Visual Studio 2013
#- Visual Studio 2015
#- Visual Studio 2017
- Visual Studio 2019
#- MinGW
platform:
- Win32
- x64
configuration: Release
install:
- set PATH=C:\Ruby24-x64\bin;%PATH%
- set CMAKE_DEFINES -DASSIMP_WERROR=ON
- if [%COMPILER%]==[MinGW] set PATH=C:\MinGW\bin;%PATH%
- if "%APPVEYOR_BUILD_WORKER_IMAGE%"=="Visual Studio 2013" set CMAKE_GENERATOR_NAME=Visual Studio 12 2013
- if "%APPVEYOR_BUILD_WORKER_IMAGE%"=="Visual Studio 2015" set CMAKE_GENERATOR_NAME=Visual Studio 14 2015
- if "%APPVEYOR_BUILD_WORKER_IMAGE%"=="Visual Studio 2017" set CMAKE_GENERATOR_NAME=Visual Studio 15 2017
- if "%APPVEYOR_BUILD_WORKER_IMAGE%"=="Visual Studio 2019" set CMAKE_GENERATOR_NAME=Visual Studio 16 2019
- cmake %CMAKE_DEFINES% -G "%CMAKE_GENERATOR_NAME%" -A %platform% .
# Rename sh.exe as sh.exe in PATH interferes with MinGW - if "%APPVEYOR_BUILD_WORKER_IMAGE%"=="Visual Studio 2015" set CMAKE_GENERATOR_NAME=Visual Studio 14 2015
- rename "C:\Program Files\Git\usr\bin\sh.exe" "sh2.exe"
- set PATH=%PATH%;"C:\\Program Files (x86)\\Inno Setup 5"
- ps: Invoke-WebRequest -Uri https://download.microsoft.com/download/5/7/b/57b2947c-7221-4f33-b35e-2fc78cb10df4/vc_redist.x64.exe -OutFile .\packaging\windows-innosetup\vc_redist.x64.exe
- ps: Invoke-WebRequest -Uri https://download.microsoft.com/download/1/d/8/1d8137db-b5bb-4925-8c5d-927424a2e4de/vc_redist.x86.exe -OutFile .\packaging\windows-innosetup\vc_redist.x86.exe
cache:
- code\assimp.dir\%CONFIGURATION%
- contrib\zlib\zlibstatic.dir\%CONFIGURATION%
- contrib\zlib\zlib.dir\%CONFIGURATION%
- tools\assimp_cmd\assimp_cmd.dir\%CONFIGURATION%
- tools\assimp_view\assimp_viewer.dir\%CONFIGURATION%
- test\unit.dir\%CONFIGURATION%
- bin\.mtime_cache
before_build:
- echo NUMBER_OF_PROCESSORS=%NUMBER_OF_PROCESSORS%
- ruby scripts\AppVeyor\mtime_cache -g scripts\AppVeyor\cacheglobs.txt -c bin\.mtime_cache\cache.json
build_script:
cmake --build . --config Release -- /maxcpucount:2
after_build:
- if "%APPVEYOR_BUILD_WORKER_IMAGE%"=="Visual Studio 2017" (
if "%platform%"=="x64" (
iscc packaging\windows-innosetup\script_x64.iss
) else (
iscc packaging\windows-innosetup\script_x86.iss
)
)
- 7z a assimp.7z bin\%CONFIGURATION%\* lib\%CONFIGURATION%\*
test_script:
- cmd: bin\%CONFIGURATION%\unit.exe --gtest_output=xml:testout.xml
on_finish:
- ps: (new-object net.webclient).UploadFile("https://ci.appveyor.com/api/testresults/junit/$($env:APPVEYOR_JOB_ID)", (Resolve-Path .\testout.xml))
artifacts:
- path: assimp.7z
name: assimp_lib

View File

@ -1,48 +0,0 @@
# Open Asset Import Library (assimp)
# ----------------------------------------------------------------------
# Copyright (c) 2006-2020, 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.
#----------------------------------------------------------------------
set( PACKAGE_VERSION "@ASSIMP_VERSION@" )
if( "${PACKAGE_FIND_VERSION}" VERSION_EQUAL "@ASSIMP_VERSION@")
set(PACKAGE_VERSION_EXACT 1)
endif()
if( "${PACKAGE_FIND_VERSION_MAJOR}.${PACKAGE_FIND_VERSION_MINOR}" EQUAL "@ASSIMP_VERSION@" )
set(PACKAGE_VERSION_COMPATIBLE 1)
elseif( "${PACKAGE_FIND_VERSION_MAJOR}" EQUAL "@ASSIMP_VERSION_MAJOR@" )
# for now backward compatible if minor version is less
if( ${PACKAGE_FIND_VERSION_MINOR} LESS @ASSIMP_VERSION_MINOR@ )
set(PACKAGE_VERSION_COMPATIBLE 1)
endif()
endif()
set( ASSIMP_STATIC_LIB "@ASSIMP_BUILD_STATIC_LIB@")

View File

@ -1 +0,0 @@
include(${CMAKE_CURRENT_LIST_DIR}/assimpTargets.cmake)

View File

@ -1,126 +0,0 @@
#----------------------------------------------------------------
# Generated CMake target import file for configuration "Debug".
#----------------------------------------------------------------
# Commands may need to know the format version.
set(CMAKE_IMPORT_FILE_VERSION 1)
set(ASSIMP_BUILD_SHARED_LIBS @BUILD_SHARED_LIBS@)
get_property(LIB64 GLOBAL PROPERTY FIND_LIBRARY_USE_LIB64_PATHS)
if(MSVC)
if(MSVC_TOOLSET_VERSION)
set(MSVC_PREFIX "vc${MSVC_TOOLSET_VERSION}")
else()
if( MSVC70 OR MSVC71 )
set(MSVC_PREFIX "vc70")
elseif( MSVC80 )
set(MSVC_PREFIX "vc80")
elseif( MSVC90 )
set(MSVC_PREFIX "vc90")
elseif( MSVC10 )
set(MSVC_PREFIX "vc100")
elseif( MSVC11 )
set(MSVC_PREFIX "vc110")
elseif( MSVC12 )
set(MSVC_PREFIX "vc120")
elseif( MSVC_VERSION LESS 1910)
set(MSVC_PREFIX "vc140")
elseif( MSVC_VERSION LESS 1920)
set(MSVC_PREFIX "vc141")
elseif( MSVC_VERSION LESS 1930)
set(MSVC_PREFIX "vc142")
else()
set(MSVC_PREFIX "vc150")
endif()
endif()
set(ASSIMP_LIBRARY_SUFFIX "@ASSIMP_LIBRARY_SUFFIX@-${MSVC_PREFIX}-mt" CACHE STRING "the suffix for the assimp windows library" )
if(ASSIMP_BUILD_SHARED_LIBS)
set(sharedLibraryName "assimp${ASSIMP_LIBRARY_SUFFIX}@CMAKE_DEBUG_POSTFIX@@CMAKE_SHARED_LIBRARY_SUFFIX@")
set(importLibraryName "assimp${ASSIMP_LIBRARY_SUFFIX}@CMAKE_DEBUG_POSTFIX@@CMAKE_IMPORT_LIBRARY_SUFFIX@")
# Import target "assimp::assimp" for configuration "Debug"
set_property(TARGET assimp::assimp APPEND PROPERTY IMPORTED_CONFIGURATIONS DEBUG)
set_target_properties(assimp::assimp PROPERTIES
IMPORTED_IMPLIB_DEBUG "@CMAKE_INSTALL_FULL_LIBDIR@/${importLibraryName}"
IMPORTED_LOCATION_DEBUG "@CMAKE_INSTALL_FULL_BINDIR@/${sharedLibraryName}"
)
list(APPEND _IMPORT_CHECK_TARGETS assimp::assimp )
list(APPEND _IMPORT_CHECK_FILES_FOR_assimp::assimp "@CMAKE_INSTALL_FULL_LIBDIR@/${importLibraryName}")
list(APPEND _IMPORT_CHECK_FILES_FOR_assimp::assimp "@CMAKE_INSTALL_FULL_BINDIR@/${sharedLibraryName}" )
else()
set(staticLibraryName "assimp${ASSIMP_LIBRARY_SUFFIX}@CMAKE_DEBUG_POSTFIX@@CMAKE_STATIC_LIBRARY_SUFFIX@")
# Import target "assimp::assimp" for configuration "Debug"
set_property(TARGET assimp::assimp APPEND PROPERTY IMPORTED_CONFIGURATIONS DEBUG)
set_target_properties(assimp::assimp PROPERTIES
IMPORTED_LOCATION_DEBUG "@CMAKE_INSTALL_FULL_LIBDIR@/${staticLibraryName}"
)
list(APPEND _IMPORT_CHECK_TARGETS assimp::assimp )
list(APPEND _IMPORT_CHECK_FILES_FOR_assimp::assimp "@CMAKE_INSTALL_FULL_LIBDIR@/${staticLibraryName}")
endif()
else()
set(ASSIMP_LIBRARY_SUFFIX "@ASSIMP_LIBRARY_SUFFIX@" CACHE STRING "the suffix for the assimp libraries" )
if(ASSIMP_BUILD_SHARED_LIBS)
if(WIN32)
# Handle MinGW compiler.
set(sharedLibraryName "libassimp${ASSIMP_LIBRARY_SUFFIX}@CMAKE_DEBUG_POSTFIX@@CMAKE_SHARED_LIBRARY_SUFFIX@@CMAKE_STATIC_LIBRARY_SUFFIX@")
elseif(APPLE)
set(sharedLibraryName "libassimp${ASSIMP_LIBRARY_SUFFIX}@CMAKE_DEBUG_POSTFIX@.@ASSIMP_VERSION_MAJOR@@CMAKE_SHARED_LIBRARY_SUFFIX@")
else()
set(sharedLibraryName "libassimp${ASSIMP_LIBRARY_SUFFIX}@CMAKE_DEBUG_POSTFIX@@CMAKE_SHARED_LIBRARY_SUFFIX@.@ASSIMP_VERSION_MAJOR@")
endif()
# Import target "assimp::assimp" for configuration "Debug"
set_property(TARGET assimp::assimp APPEND PROPERTY IMPORTED_CONFIGURATIONS DEBUG)
set_target_properties(assimp::assimp PROPERTIES
IMPORTED_SONAME_DEBUG "${sharedLibraryName}"
IMPORTED_LOCATION_DEBUG "@CMAKE_INSTALL_FULL_LIBDIR@/${sharedLibraryName}"
)
list(APPEND _IMPORT_CHECK_TARGETS assimp::assimp )
list(APPEND _IMPORT_CHECK_FILES_FOR_assimp::assimp "@CMAKE_INSTALL_FULL_LIBDIR@/${sharedLibraryName}" )
else()
set(staticLibraryName "libassimp${ASSIMP_LIBRARY_SUFFIX}@CMAKE_DEBUG_POSTFIX@@CMAKE_STATIC_LIBRARY_SUFFIX@")
# Import target "assimp::assimp" for configuration "Debug"
set_property(TARGET assimp::assimp APPEND PROPERTY IMPORTED_CONFIGURATIONS DEBUG)
set_target_properties(assimp::assimp PROPERTIES
IMPORTED_LOCATION_DEBUG "@CMAKE_INSTALL_FULL_LIBDIR@/${staticLibraryName}"
)
list(APPEND _IMPORT_CHECK_TARGETS assimp::assimp )
list(APPEND _IMPORT_CHECK_FILES_FOR_assimp::assimp "@CMAKE_INSTALL_FULL_LIBDIR@/${staticLibraryName}" )
endif()
endif()
# Commands beyond this point should not need to know the version.
set(CMAKE_IMPORT_FILE_VERSION)
get_filename_component(ASSIMP_ROOT_DIR "@CMAKE_INSTALL_PREFIX@" REALPATH)
set( ASSIMP_CXX_FLAGS ) # dynamically linked library
set( ASSIMP_LINK_FLAGS "" )
set( ASSIMP_LIBRARY_DIRS "${ASSIMP_ROOT_DIR}/@ASSIMP_LIB_INSTALL_DIR@")
set( ASSIMP_INCLUDE_DIRS "${ASSIMP_ROOT_DIR}/@ASSIMP_INCLUDE_INSTALL_DIR@")
if(ASSIMP_BUILD_SHARED_LIBS)
set( ASSIMP_LIBRARIES ${sharedLibraryName})
else()
set( ASSIMP_LIBRARIES ${staticLibraryName})
endif()
# for compatibility with pkg-config
set(ASSIMP_CFLAGS_OTHER "${ASSIMP_CXX_FLAGS}")
set(ASSIMP_LDFLAGS_OTHER "${ASSIMP_LINK_FLAGS}")
MARK_AS_ADVANCED(
ASSIMP_ROOT_DIR
ASSIMP_CXX_FLAGS
ASSIMP_LINK_FLAGS
ASSIMP_INCLUDE_DIRS
ASSIMP_LIBRARIES
ASSIMP_CFLAGS_OTHER
ASSIMP_LDFLAGS_OTHER
ASSIMP_LIBRARY_SUFFIX
ASSIMP_BUILD_SHARED_LIBS
)

View File

@ -1,127 +0,0 @@
#----------------------------------------------------------------
# Generated CMake target import file for configuration "Release".
#----------------------------------------------------------------
# Commands may need to know the format version.
set(CMAKE_IMPORT_FILE_VERSION 1)
set(ASSIMP_BUILD_SHARED_LIBS @BUILD_SHARED_LIBS@)
get_property(LIB64 GLOBAL PROPERTY FIND_LIBRARY_USE_LIB64_PATHS)
if(MSVC)
if(MSVC_TOOLSET_VERSION)
set(MSVC_PREFIX "vc${MSVC_TOOLSET_VERSION}")
else()
if( MSVC70 OR MSVC71 )
set(MSVC_PREFIX "vc70")
elseif( MSVC80 )
set(MSVC_PREFIX "vc80")
elseif( MSVC90 )
set(MSVC_PREFIX "vc90")
elseif( MSVC10 )
set(MSVC_PREFIX "vc100")
elseif( MSVC11 )
set(MSVC_PREFIX "vc110")
elseif( MSVC12 )
set(MSVC_PREFIX "vc120")
elseif( MSVC_VERSION LESS 1910)
set(MSVC_PREFIX "vc140")
elseif( MSVC_VERSION LESS 1920)
set(MSVC_PREFIX "vc141")
elseif( MSVC_VERSION LESS 1930)
set(MSVC_PREFIX "vc142")
else()
set(MSVC_PREFIX "vc150")
endif()
endif()
set(ASSIMP_LIBRARY_SUFFIX "@ASSIMP_LIBRARY_SUFFIX@-${MSVC_PREFIX}-mt" CACHE STRING "the suffix for the assimp windows library" )
if(ASSIMP_BUILD_SHARED_LIBS)
set(sharedLibraryName "assimp${ASSIMP_LIBRARY_SUFFIX}@CMAKE_SHARED_LIBRARY_SUFFIX@")
set(importLibraryName "assimp${ASSIMP_LIBRARY_SUFFIX}@CMAKE_IMPORT_LIBRARY_SUFFIX@")
# Import target "assimp::assimp" for configuration "Release"
set_property(TARGET assimp::assimp APPEND PROPERTY IMPORTED_CONFIGURATIONS RELEASE)
set_target_properties(assimp::assimp PROPERTIES
IMPORTED_IMPLIB_RELEASE "@CMAKE_INSTALL_FULL_LIBDIR@/${importLibraryName}"
IMPORTED_LOCATION_RELEASE "@CMAKE_INSTALL_FULL_BINDIR@/${sharedLibraryName}"
)
list(APPEND _IMPORT_CHECK_TARGETS assimp::assimp )
list(APPEND _IMPORT_CHECK_FILES_FOR_assimp::assimp "@CMAKE_INSTALL_FULL_LIBDIR@/${importLibraryName}")
list(APPEND _IMPORT_CHECK_FILES_FOR_assimp::assimp "@CMAKE_INSTALL_FULL_BINDIR@/${sharedLibraryName}" )
else()
set(staticLibraryName "assimp${ASSIMP_LIBRARY_SUFFIX}@CMAKE_STATIC_LIBRARY_SUFFIX@")
# Import target "assimp::assimp" for configuration "Release"
set_property(TARGET assimp::assimp APPEND PROPERTY IMPORTED_CONFIGURATIONS RELEASE)
set_target_properties(assimp::assimp PROPERTIES
IMPORTED_LOCATION_RELEASE "@CMAKE_INSTALL_FULL_LIBDIR@/${staticLibraryName}"
)
list(APPEND _IMPORT_CHECK_TARGETS assimp::assimp )
list(APPEND _IMPORT_CHECK_FILES_FOR_assimp::assimp "@CMAKE_INSTALL_FULL_LIBDIR@/${staticLibraryName}")
endif()
else()
set(ASSIMP_LIBRARY_SUFFIX "@ASSIMP_LIBRARY_SUFFIX@" CACHE STRING "the suffix for the assimp libraries" )
if(ASSIMP_BUILD_SHARED_LIBS)
if(WIN32)
# Handle MinGW compiler.
set(sharedLibraryName "libassimp${ASSIMP_LIBRARY_SUFFIX}@CMAKE_DEBUG_POSTFIX@@CMAKE_SHARED_LIBRARY_SUFFIX@@CMAKE_STATIC_LIBRARY_SUFFIX@")
elseif(APPLE)
set(sharedLibraryName "libassimp${ASSIMP_LIBRARY_SUFFIX}.@ASSIMP_VERSION_MAJOR@@CMAKE_SHARED_LIBRARY_SUFFIX@")
else()
set(sharedLibraryName "libassimp${ASSIMP_LIBRARY_SUFFIX}@CMAKE_SHARED_LIBRARY_SUFFIX@.@ASSIMP_VERSION_MAJOR@")
endif()
# Import target "assimp::assimp" for configuration "Release"
set_property(TARGET assimp::assimp APPEND PROPERTY IMPORTED_CONFIGURATIONS RELEASE)
set_target_properties(assimp::assimp PROPERTIES
IMPORTED_SONAME_RELEASE "${sharedLibraryName}"
IMPORTED_LOCATION_RELEASE "@CMAKE_INSTALL_FULL_LIBDIR@/${sharedLibraryName}"
)
list(APPEND _IMPORT_CHECK_TARGETS assimp::assimp )
list(APPEND _IMPORT_CHECK_FILES_FOR_assimp::assimp "@CMAKE_INSTALL_FULL_LIBDIR@/${sharedLibraryName}" )
else()
set(staticLibraryName "libassimp${ASSIMP_LIBRARY_SUFFIX}@CMAKE_STATIC_LIBRARY_SUFFIX@")
# Import target "assimp::assimp" for configuration "Release"
set_property(TARGET assimp::assimp APPEND PROPERTY IMPORTED_CONFIGURATIONS RELEASE)
set_target_properties(assimp::assimp PROPERTIES
IMPORTED_LOCATION_RELEASE "@CMAKE_INSTALL_FULL_LIBDIR@/${staticLibraryName}"
)
list(APPEND _IMPORT_CHECK_TARGETS assimp::assimp )
list(APPEND _IMPORT_CHECK_FILES_FOR_assimp::assimp "@CMAKE_INSTALL_FULL_LIBDIR@/${staticLibraryName}" )
endif()
endif()
# Commands beyond this point should not need to know the version.
set(CMAKE_IMPORT_FILE_VERSION)
get_filename_component(ASSIMP_ROOT_DIR "@CMAKE_INSTALL_PREFIX@" REALPATH)
set( ASSIMP_CXX_FLAGS ) # dynamically linked library
set( ASSIMP_LINK_FLAGS "" )
set( ASSIMP_LIBRARY_DIRS "${ASSIMP_ROOT_DIR}/@ASSIMP_LIB_INSTALL_DIR@")
set( ASSIMP_INCLUDE_DIRS "${ASSIMP_ROOT_DIR}/@ASSIMP_INCLUDE_INSTALL_DIR@")
if(ASSIMP_BUILD_SHARED_LIBS)
set( ASSIMP_LIBRARIES ${sharedLibraryName})
else()
set( ASSIMP_LIBRARIES ${staticLibraryName})
endif()
# for compatibility with pkg-config
set(ASSIMP_CFLAGS_OTHER "${ASSIMP_CXX_FLAGS}")
set(ASSIMP_LDFLAGS_OTHER "${ASSIMP_LINK_FLAGS}")
MARK_AS_ADVANCED(
ASSIMP_ROOT_DIR
ASSIMP_CXX_FLAGS
ASSIMP_LINK_FLAGS
ASSIMP_INCLUDE_DIRS
ASSIMP_LIBRARIES
ASSIMP_CFLAGS_OTHER
ASSIMP_LDFLAGS_OTHER
ASSIMP_LIBRARY_SUFFIX
ASSIMP_BUILD_SHARED_LIBS
)

View File

@ -1,91 +0,0 @@
# Generated by CMake
if("${CMAKE_MAJOR_VERSION}.${CMAKE_MINOR_VERSION}" LESS 2.5)
message(FATAL_ERROR "CMake >= 2.6.0 required")
endif()
cmake_policy(PUSH)
cmake_policy(VERSION 2.6)
# Required for the evaluation of "if(@BUILD_SHARED_LIBS@)" below to function
cmake_policy(SET CMP0012 NEW)
#----------------------------------------------------------------
# Generated CMake target import file.
#----------------------------------------------------------------
# Commands may need to know the format version.
set(CMAKE_IMPORT_FILE_VERSION 1)
# Protect against multiple inclusion, which would fail when already imported targets are added once more.
set(_targetsDefined)
set(_targetsNotDefined)
set(_expectedTargets)
foreach(_expectedTarget assimp::assimp)
list(APPEND _expectedTargets ${_expectedTarget})
if(NOT TARGET ${_expectedTarget})
list(APPEND _targetsNotDefined ${_expectedTarget})
endif()
if(TARGET ${_expectedTarget})
list(APPEND _targetsDefined ${_expectedTarget})
endif()
endforeach()
if("${_targetsDefined}" STREQUAL "${_expectedTargets}")
unset(_targetsDefined)
unset(_targetsNotDefined)
unset(_expectedTargets)
set(CMAKE_IMPORT_FILE_VERSION)
cmake_policy(POP)
return()
endif()
if(NOT "${_targetsDefined}" STREQUAL "")
message(FATAL_ERROR "Some (but not all) targets in this export set were already defined.\nTargets Defined: ${_targetsDefined}\nTargets not yet defined: ${_targetsNotDefined}\n")
endif()
unset(_targetsDefined)
unset(_targetsNotDefined)
unset(_expectedTargets)
# Create imported target assimp::assimp
add_library(assimp::assimp @BUILD_LIB_TYPE@ IMPORTED)
set_target_properties(assimp::assimp PROPERTIES
COMPATIBLE_INTERFACE_STRING "assimp_MAJOR_VERSION"
INTERFACE_assimp_MAJOR_VERSION "1"
INTERFACE_INCLUDE_DIRECTORIES "@CMAKE_INSTALL_FULL_INCLUDEDIR@"
#INTERFACE_LINK_LIBRARIES "TxtUtils::TxtUtils;MealyMachine::MealyMachine"
)
if(CMAKE_VERSION VERSION_LESS 2.8.12)
message(FATAL_ERROR "This file relies on consumers using CMake 2.8.12 or greater.")
endif()
# Load information for each installed configuration.
get_filename_component(_DIR "${CMAKE_CURRENT_LIST_FILE}" PATH)
file(GLOB CONFIG_FILES "${_DIR}/assimpTargets-*.cmake")
foreach(f ${CONFIG_FILES})
include(${f})
endforeach()
# Loop over all imported files and verify that they actually exist
foreach(target ${_IMPORT_CHECK_TARGETS} )
foreach(file ${_IMPORT_CHECK_FILES_FOR_${target}} )
if(NOT EXISTS "${file}" )
message(FATAL_ERROR "The imported target \"${target}\" references the file
\"${file}\"
but this file does not exist. Possible reasons include:
* The file was deleted, renamed, or moved to another location.
* An install or uninstall procedure did not complete successfully.
* The installation package was faulty and contained
\"${CMAKE_CURRENT_LIST_FILE}\"
but not all the files it references.
")
endif()
endforeach()
unset(_IMPORT_CHECK_FILES_FOR_${target})
endforeach()
unset(_IMPORT_CHECK_TARGETS)
# This file does not depend on other imported targets which have
# been exported from the same project but in a separate export set.
# Commands beyond this point should not need to know the version.
set(CMAKE_IMPORT_FILE_VERSION)
cmake_policy(POP)

View File

@ -55,7 +55,7 @@ if(WIN32) # The only platform it makes sense to check for DirectX SDK
endif(CMAKE_CL_64) endif(CMAKE_CL_64)
find_library(DirectX_LIBRARY NAMES d3d9 HINTS ${DirectX_LIB_SEARCH_PATH} PATH_SUFFIXES ${DirectX_LIBPATH_SUFFIX}) find_library(DirectX_LIBRARY NAMES d3d9 HINTS ${DirectX_LIB_SEARCH_PATH} PATH_SUFFIXES ${DirectX_LIBPATH_SUFFIX})
find_library(DirectX_D3DX9_LIBRARY NAMES d3dx9 HINTS ${DirectX_LIB_SEARCH_PATH} PATH_SUFFIXES ${DirectX_LIBPATH_SUFFIX}) find_library(DirectX_D3DX9_LIBRARY NAMES d3dx9 HINTS ${DirectX_LIB_SEARCH_PATH} PATH_SUFFIXES ${DirectX_LIBPATH_SUFFIX})
find_library(DirectX_DXERR_LIBRARY NAMES DxErr HINTS ${DirectX_LIB_SEARCH_PATH} PATH_SUFFIXES ${DirectX_LIBPATH_SUFFIX}) find_library(DirectX_DXERR_LIBRARY NAMES DxErr DxErr9 HINTS ${DirectX_LIB_SEARCH_PATH} PATH_SUFFIXES ${DirectX_LIBPATH_SUFFIX})
find_library(DirectX_DXGUID_LIBRARY NAMES dxguid HINTS ${DirectX_LIB_SEARCH_PATH} PATH_SUFFIXES ${DirectX_LIBPATH_SUFFIX}) find_library(DirectX_DXGUID_LIBRARY NAMES dxguid HINTS ${DirectX_LIB_SEARCH_PATH} PATH_SUFFIXES ${DirectX_LIBPATH_SUFFIX})

View File

@ -1,17 +0,0 @@
# Find IrrXMl from irrlicht project
#
# Find LibIrrXML headers and library
#
# IRRXML_FOUND - IrrXML found
# IRRXML_INCLUDE_DIR - Headers location
# IRRXML_LIBRARY - IrrXML main library
find_path(IRRXML_INCLUDE_DIR irrXML.h
PATH_SUFFIXES include/irrlicht include/irrxml)
find_library(IRRXML_LIBRARY IrrXML)
include(FindPackageHandleStandardArgs)
find_package_handle_standard_args(IrrXML REQUIRED_VARS IRRXML_INCLUDE_DIR IRRXML_LIBRARY)
mark_as_advanced(IRRXML_INCLUDE_DIR IRRXML_LIBRARY)

View File

@ -54,7 +54,7 @@ macro(clear_if_changed TESTVAR)
set(${var} "NOTFOUND" CACHE STRING "x" FORCE) set(${var} "NOTFOUND" CACHE STRING "x" FORCE)
endforeach(var) endforeach(var)
endif () endif ()
set(${TESTVAR}_INT_CHECK ${${TESTVAR}} CACHE INTERNAL "x" FORCE) set(${TESTVAR}_INT_CHECK "${${TESTVAR}}" CACHE INTERNAL "x" FORCE)
endmacro(clear_if_changed) endmacro(clear_if_changed)
# Try to get some hints from pkg-config, if available # Try to get some hints from pkg-config, if available

View File

@ -16,5 +16,5 @@ set(RT_LIBRARIES ${RT_LIBRARY})
# handle the QUIETLY and REQUIRED arguments and set # handle the QUIETLY and REQUIRED arguments and set
# RT_FOUND to TRUE if all listed variables are TRUE # RT_FOUND to TRUE if all listed variables are TRUE
include(FindPackageHandleStandardArgs) include(FindPackageHandleStandardArgs)
find_package_handle_standard_args(rt DEFAULT_MSG RT_LIBRARY) find_package_handle_standard_args(RT DEFAULT_MSG RT_LIBRARY)
mark_as_advanced(RT_LIBRARY) mark_as_advanced(RT_LIBRARY)

View File

@ -1,4 +1,4 @@
# Copyright (c) 2013-2018, Ruslan Baratov # Copyright (c) 2013-2019, Ruslan Baratov
# All rights reserved. # All rights reserved.
# #
# Redistribution and use in source and binary forms, with or without # Redistribution and use in source and binary forms, with or without
@ -22,45 +22,16 @@
# OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE # 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. # OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
# This is a gate file to Hunter package manager.
# Include this file using `include` command and add package you need, example:
#
# cmake_minimum_required(VERSION 3.2)
#
# include("cmake/HunterGate.cmake")
# HunterGate(
# URL "https://github.com/path/to/hunter/archive.tar.gz"
# SHA1 "798501e983f14b28b10cda16afa4de69eee1da1d"
# )
#
# project(MyProject)
#
# hunter_add_package(Foo)
# hunter_add_package(Boo COMPONENTS Bar Baz)
#
# Projects:
# * https://github.com/hunter-packages/gate/
# * https://github.com/ruslo/hunter
option(HUNTER_ENABLED "Enable Hunter package manager support" ON) option(HUNTER_ENABLED "Enable Hunter package manager support" ON)
if(HUNTER_ENABLED)
if(CMAKE_VERSION VERSION_LESS "3.2")
message(
FATAL_ERROR
"At least CMake version 3.2 required for Hunter dependency management."
" Update CMake or set HUNTER_ENABLED to OFF."
)
endif()
endif()
include(CMakeParseArguments) # cmake_parse_arguments include(CMakeParseArguments) # cmake_parse_arguments
option(HUNTER_STATUS_PRINT "Print working status" ON) option(HUNTER_STATUS_PRINT "Print working status" ON)
option(HUNTER_STATUS_DEBUG "Print a lot info" OFF) option(HUNTER_STATUS_DEBUG "Print a lot info" OFF)
option(HUNTER_TLS_VERIFY "Enable/disable TLS certificate checking on downloads" ON) option(HUNTER_TLS_VERIFY "Enable/disable TLS certificate checking on downloads" ON)
set(HUNTER_WIKI "https://github.com/ruslo/hunter/wiki") set(HUNTER_ERROR_PAGE "https://docs.hunter.sh/en/latest/reference/errors")
function(hunter_gate_status_print) function(hunter_gate_status_print)
if(HUNTER_STATUS_PRINT OR HUNTER_STATUS_DEBUG) if(HUNTER_STATUS_PRINT OR HUNTER_STATUS_DEBUG)
@ -79,9 +50,9 @@ function(hunter_gate_status_debug)
endif() endif()
endfunction() endfunction()
function(hunter_gate_wiki wiki_page) function(hunter_gate_error_page error_page)
message("------------------------------ WIKI -------------------------------") message("------------------------------ ERROR ------------------------------")
message(" ${HUNTER_WIKI}/${wiki_page}") message(" ${HUNTER_ERROR_PAGE}/${error_page}.html")
message("-------------------------------------------------------------------") message("-------------------------------------------------------------------")
message("") message("")
message(FATAL_ERROR "") message(FATAL_ERROR "")
@ -94,14 +65,13 @@ function(hunter_gate_internal_error)
endforeach() endforeach()
message("[hunter ** INTERNAL **] [Directory:${CMAKE_CURRENT_LIST_DIR}]") message("[hunter ** INTERNAL **] [Directory:${CMAKE_CURRENT_LIST_DIR}]")
message("") message("")
hunter_gate_wiki("error.internal") hunter_gate_error_page("error.internal")
endfunction() endfunction()
function(hunter_gate_fatal_error) function(hunter_gate_fatal_error)
cmake_parse_arguments(hunter "" "WIKI" "" "${ARGV}") cmake_parse_arguments(hunter "" "ERROR_PAGE" "" "${ARGV}")
string(COMPARE EQUAL "${hunter_WIKI}" "" have_no_wiki) if("${hunter_ERROR_PAGE}" STREQUAL "")
if(have_no_wiki) hunter_gate_internal_error("Expected ERROR_PAGE")
hunter_gate_internal_error("Expected wiki")
endif() endif()
message("") message("")
foreach(x ${hunter_UNPARSED_ARGUMENTS}) foreach(x ${hunter_UNPARSED_ARGUMENTS})
@ -109,11 +79,11 @@ function(hunter_gate_fatal_error)
endforeach() endforeach()
message("[hunter ** FATAL ERROR **] [Directory:${CMAKE_CURRENT_LIST_DIR}]") message("[hunter ** FATAL ERROR **] [Directory:${CMAKE_CURRENT_LIST_DIR}]")
message("") message("")
hunter_gate_wiki("${hunter_WIKI}") hunter_gate_error_page("${hunter_ERROR_PAGE}")
endfunction() endfunction()
function(hunter_gate_user_error) function(hunter_gate_user_error)
hunter_gate_fatal_error(${ARGV} WIKI "error.incorrect.input.data") hunter_gate_fatal_error(${ARGV} ERROR_PAGE "error.incorrect.input.data")
endfunction() endfunction()
function(hunter_gate_self root version sha1 result) function(hunter_gate_self root version sha1 result)
@ -195,7 +165,7 @@ function(hunter_gate_detect_root)
hunter_gate_fatal_error( hunter_gate_fatal_error(
"Can't detect HUNTER_ROOT" "Can't detect HUNTER_ROOT"
WIKI "error.detect.hunter.root" ERROR_PAGE "error.detect.hunter.root"
) )
endfunction() endfunction()
@ -214,7 +184,7 @@ function(hunter_gate_download dir)
"Settings:" "Settings:"
" HUNTER_ROOT: ${HUNTER_GATE_ROOT}" " HUNTER_ROOT: ${HUNTER_GATE_ROOT}"
" HUNTER_SHA1: ${HUNTER_GATE_SHA1}" " HUNTER_SHA1: ${HUNTER_GATE_SHA1}"
WIKI "error.run.install" ERROR_PAGE "error.run.install"
) )
endif() endif()
string(COMPARE EQUAL "${dir}" "" is_bad) string(COMPARE EQUAL "${dir}" "" is_bad)
@ -400,7 +370,7 @@ macro(HunterGate)
hunter_gate_fatal_error( hunter_gate_fatal_error(
"Please set HunterGate *before* 'project' command. " "Please set HunterGate *before* 'project' command. "
"Detected project: ${PROJECT_NAME}" "Detected project: ${PROJECT_NAME}"
WIKI "error.huntergate.before.project" ERROR_PAGE "error.huntergate.before.project"
) )
endif() endif()
@ -470,7 +440,7 @@ macro(HunterGate)
"HUNTER_ROOT (${HUNTER_GATE_ROOT}) contains spaces." "HUNTER_ROOT (${HUNTER_GATE_ROOT}) contains spaces."
"Set HUNTER_ALLOW_SPACES_IN_PATH=ON to skip this error" "Set HUNTER_ALLOW_SPACES_IN_PATH=ON to skip this error"
"(Use at your own risk!)" "(Use at your own risk!)"
WIKI "error.spaces.in.hunter.root" ERROR_PAGE "error.spaces.in.hunter.root"
) )
endif() endif()
endif() endif()

View File

@ -0,0 +1,19 @@
@PACKAGE_INIT@
find_package(RapidJSON CONFIG REQUIRED)
find_package(ZLIB CONFIG REQUIRED)
find_package(utf8cpp CONFIG REQUIRED)
find_package(minizip CONFIG REQUIRED)
find_package(openddlparser CONFIG REQUIRED)
find_package(poly2tri CONFIG REQUIRED)
find_package(polyclipping CONFIG REQUIRED)
find_package(zip CONFIG REQUIRED)
find_package(pugixml CONFIG REQUIRED)
find_package(stb CONFIG REQUIRED)
if(@ASSIMP_BUILD_DRACO@)
find_package(draco CONFIG REQUIRED)
endif()
include("${CMAKE_CURRENT_LIST_DIR}/@TARGETS_EXPORT_NAME@.cmake")
check_required_components("@PROJECT_NAME@")

View File

@ -0,0 +1,9 @@
@PACKAGE_INIT@
include("${CMAKE_CURRENT_LIST_DIR}/@TARGETS_EXPORT_NAME@.cmake")
set(ASSIMP_ROOT_DIR ${PACKAGE_PREFIX_DIR})
set(ASSIMP_LIBRARIES assimp::assimp)
set(ASSIMP_BUILD_SHARED_LIBS @BUILD_SHARED_LIBS@)
get_property(ASSIMP_INCLUDE_DIRS TARGET assimp::assimp PROPERTY INTERFACE_INCLUDE_DIRECTORIES)
set(ASSIMP_LIBRARY_DIRS "")

View File

@ -1,14 +0,0 @@
@PACKAGE_INIT@
find_package(RapidJSON CONFIG REQUIRED)
find_package(ZLIB CONFIG REQUIRED)
find_package(utf8 CONFIG REQUIRED)
find_package(irrXML CONFIG REQUIRED)
find_package(minizip CONFIG REQUIRED)
find_package(openddlparser CONFIG REQUIRED)
find_package(poly2tri CONFIG REQUIRED)
find_package(polyclipping CONFIG REQUIRED)
find_package(zip CONFIG REQUIRED)
include("${CMAKE_CURRENT_LIST_DIR}/@TARGETS_EXPORT_NAME@.cmake")
check_required_components("@PROJECT_NAME@")

View File

@ -3,7 +3,7 @@
Open Asset Import Library (assimp) Open Asset Import Library (assimp)
--------------------------------------------------------------------------- ---------------------------------------------------------------------------
Copyright (c) 2006-2020, assimp team Copyright (c) 2006-2024, assimp team
All rights reserved. All rights reserved.
@ -52,9 +52,9 @@ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
#include <cctype> #include <cctype>
#include <memory> #include <memory>
using namespace Assimp; namespace Assimp {
static const unsigned int NotSet = 0xcdcdcdcd; static constexpr unsigned int NotSet = 0xcdcdcdcd;
// ------------------------------------------------------------------------------------------------ // ------------------------------------------------------------------------------------------------
// Setup final material indices, generae a default material if necessary // Setup final material indices, generae a default material if necessary
@ -68,8 +68,8 @@ void Discreet3DSImporter::ReplaceDefaultMaterial() {
unsigned int idx(NotSet); unsigned int idx(NotSet);
for (unsigned int i = 0; i < mScene->mMaterials.size(); ++i) { for (unsigned int i = 0; i < mScene->mMaterials.size(); ++i) {
std::string s = mScene->mMaterials[i].mName; std::string s = mScene->mMaterials[i].mName;
for (std::string::iterator it = s.begin(); it != s.end(); ++it) { for (char &it : s) {
*it = static_cast<char>(::tolower(*it)); it = static_cast<char>(::tolower(static_cast<unsigned char>(it)));
} }
if (std::string::npos == s.find("default")) continue; if (std::string::npos == s.find("default")) continue;
@ -79,12 +79,7 @@ void Discreet3DSImporter::ReplaceDefaultMaterial() {
mScene->mMaterials[i].mDiffuse.r != mScene->mMaterials[i].mDiffuse.r !=
mScene->mMaterials[i].mDiffuse.b) continue; mScene->mMaterials[i].mDiffuse.b) continue;
if (mScene->mMaterials[i].sTexDiffuse.mMapName.length() != 0 || if (ContainsTextures(i)) {
mScene->mMaterials[i].sTexBump.mMapName.length() != 0 ||
mScene->mMaterials[i].sTexOpacity.mMapName.length() != 0 ||
mScene->mMaterials[i].sTexEmissive.mMapName.length() != 0 ||
mScene->mMaterials[i].sTexSpecular.mMapName.length() != 0 ||
mScene->mMaterials[i].sTexShininess.mMapName.length() != 0) {
continue; continue;
} }
idx = i; idx = i;
@ -212,7 +207,7 @@ void Discreet3DSImporter::ConvertMaterial(D3DS::Material &oldMat,
mat.AddProperty(&tex, AI_MATKEY_GLOBAL_BACKGROUND_IMAGE); mat.AddProperty(&tex, AI_MATKEY_GLOBAL_BACKGROUND_IMAGE);
// Be sure this is only done for the first material // Be sure this is only done for the first material
mBackgroundImage = std::string(""); mBackgroundImage = std::string();
} }
// At first add the base ambient color of the scene to the material // At first add the base ambient color of the scene to the material
@ -267,6 +262,7 @@ void Discreet3DSImporter::ConvertMaterial(D3DS::Material &oldMat,
unsigned int iWire = 1; unsigned int iWire = 1;
mat.AddProperty<int>((int *)&iWire, 1, AI_MATKEY_ENABLE_WIREFRAME); mat.AddProperty<int>((int *)&iWire, 1, AI_MATKEY_ENABLE_WIREFRAME);
} }
[[fallthrough]];
case D3DS::Discreet3DS::Gouraud: case D3DS::Discreet3DS::Gouraud:
eShading = aiShadingMode_Gouraud; eShading = aiShadingMode_Gouraud;
@ -597,7 +593,7 @@ void Discreet3DSImporter::AddNodeToGraph(aiScene *pcSOut, aiNode *pcOut,
// Cameras or lights define their transformation in their parent node and in the // Cameras or lights define their transformation in their parent node and in the
// corresponding light or camera chunks. However, we read and process the latter // corresponding light or camera chunks. However, we read and process the latter
// to to be able to return valid cameras/lights even if no scenegraph is given. // to be able to return valid cameras/lights even if no scenegraph is given.
for (unsigned int n = 0; n < pcSOut->mNumCameras; ++n) { for (unsigned int n = 0; n < pcSOut->mNumCameras; ++n) {
if (pcSOut->mCameras[n]->mName == pcOut->mName) { if (pcSOut->mCameras[n]->mName == pcOut->mName) {
pcSOut->mCameras[n]->mLookAt = aiVector3D(0.f, 0.f, 1.f); pcSOut->mCameras[n]->mLookAt = aiVector3D(0.f, 0.f, 1.f);
@ -647,11 +643,17 @@ void Discreet3DSImporter::AddNodeToGraph(aiScene *pcSOut, aiNode *pcOut,
} }
// Allocate storage for children // Allocate storage for children
pcOut->mNumChildren = (unsigned int)pcIn->mChildren.size(); const unsigned int size = static_cast<unsigned int>(pcIn->mChildren.size());
pcOut->mNumChildren = size;
if (size == 0) {
return;
}
pcOut->mChildren = new aiNode *[pcIn->mChildren.size()]; pcOut->mChildren = new aiNode *[pcIn->mChildren.size()];
// Recursively process all children // Recursively process all children
const unsigned int size = static_cast<unsigned int>(pcIn->mChildren.size());
for (unsigned int i = 0; i < size; ++i) { for (unsigned int i = 0; i < size; ++i) {
pcOut->mChildren[i] = new aiNode(); pcOut->mChildren[i] = new aiNode();
pcOut->mChildren[i]->mParent = pcOut; pcOut->mChildren[i]->mParent = pcOut;
@ -713,7 +715,7 @@ void Discreet3DSImporter::GenerateNodeGraph(aiScene *pcOut) {
pcNode->mNumMeshes = 1; pcNode->mNumMeshes = 1;
// Build a name for the node // Build a name for the node
pcNode->mName.length = ai_snprintf(pcNode->mName.data, MAXLEN, "3DSMesh_%u", i); pcNode->mName.length = ai_snprintf(pcNode->mName.data, AI_MAXLEN, "3DSMesh_%u", i);
} }
// Build dummy nodes for all cameras // Build dummy nodes for all cameras
@ -809,4 +811,6 @@ void Discreet3DSImporter::ConvertScene(aiScene *pcOut) {
} }
} }
} // namespace Assimp
#endif // !! ASSIMP_BUILD_NO_3DS_IMPORTER #endif // !! ASSIMP_BUILD_NO_3DS_IMPORTER

View File

@ -2,7 +2,7 @@
Open Asset Import Library (assimp) Open Asset Import Library (assimp)
---------------------------------------------------------------------- ----------------------------------------------------------------------
Copyright (c) 2006-2020, assimp team Copyright (c) 2006-2024, assimp team
All rights reserved. All rights reserved.
@ -52,12 +52,13 @@ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
#include <assimp/StringComparison.h> #include <assimp/StringComparison.h>
#include <assimp/DefaultLogger.hpp> #include <assimp/DefaultLogger.hpp>
#include <assimp/Exporter.hpp> #include <assimp/Exporter.hpp>
#include <assimp/Exceptional.h>
#include <assimp/IOSystem.hpp> #include <assimp/IOSystem.hpp>
#include <memory> #include <memory>
using namespace Assimp;
namespace Assimp { namespace Assimp {
using namespace D3DS; using namespace D3DS;
namespace { namespace {
@ -102,13 +103,14 @@ private:
// preserves the mesh's given name if it has one. |index| is the index // preserves the mesh's given name if it has one. |index| is the index
// of the mesh in |aiScene::mMeshes|. // of the mesh in |aiScene::mMeshes|.
std::string GetMeshName(const aiMesh &mesh, unsigned int index, const aiNode &node) { std::string GetMeshName(const aiMesh &mesh, unsigned int index, const aiNode &node) {
static const std::string underscore = "_"; static const char underscore = '_';
char postfix[10] = { 0 }; char postfix[10] = { 0 };
ASSIMP_itoa10(postfix, index); ASSIMP_itoa10(postfix, index);
std::string result = node.mName.C_Str(); std::string result = node.mName.C_Str();
if (mesh.mName.length > 0) { if (mesh.mName.length > 0) {
result += underscore + mesh.mName.C_Str(); result += underscore;
result += mesh.mName.C_Str();
} }
return result + underscore + postfix; return result + underscore + postfix;
} }
@ -208,9 +210,7 @@ Discreet3DSExporter::Discreet3DSExporter(std::shared_ptr<IOStream> &outfile, con
} }
// ------------------------------------------------------------------------------------------------ // ------------------------------------------------------------------------------------------------
Discreet3DSExporter::~Discreet3DSExporter() { Discreet3DSExporter::~Discreet3DSExporter() = default;
// empty
}
// ------------------------------------------------------------------------------------------------ // ------------------------------------------------------------------------------------------------
int Discreet3DSExporter::WriteHierarchy(const aiNode &node, int seq, int sibling_level) { int Discreet3DSExporter::WriteHierarchy(const aiNode &node, int seq, int sibling_level) {
@ -296,6 +296,12 @@ void Discreet3DSExporter::WriteMaterials() {
WriteColor(color); WriteColor(color);
} }
float f;
if (mat.Get(AI_MATKEY_OPACITY, f) == AI_SUCCESS) {
ChunkWriter chunk(writer, Discreet3DS::CHUNK_MAT_TRANSPARENCY);
WritePercentChunk(1.0f - f);
}
if (mat.Get(AI_MATKEY_COLOR_EMISSIVE, color) == AI_SUCCESS) { if (mat.Get(AI_MATKEY_COLOR_EMISSIVE, color) == AI_SUCCESS) {
ChunkWriter curChunk(writer, Discreet3DS::CHUNK_MAT_SELF_ILLUM); ChunkWriter curChunk(writer, Discreet3DS::CHUNK_MAT_SELF_ILLUM);
WriteColor(color); WriteColor(color);
@ -323,6 +329,7 @@ void Discreet3DSExporter::WriteMaterials() {
case aiShadingMode_Blinn: case aiShadingMode_Blinn:
case aiShadingMode_CookTorrance: case aiShadingMode_CookTorrance:
case aiShadingMode_Fresnel: case aiShadingMode_Fresnel:
case aiShadingMode_PBR_BRDF: // Possibly should be Discreet3DS::Metal in some cases but this is undocumented
shading_mode_out = Discreet3DS::Phong; shading_mode_out = Discreet3DS::Phong;
break; break;
@ -333,7 +340,6 @@ void Discreet3DSExporter::WriteMaterials() {
writer.PutU2(static_cast<uint16_t>(shading_mode_out)); writer.PutU2(static_cast<uint16_t>(shading_mode_out));
} }
float f;
if (mat.Get(AI_MATKEY_SHININESS, f) == AI_SUCCESS) { if (mat.Get(AI_MATKEY_SHININESS, f) == AI_SUCCESS) {
ChunkWriter chunk(writer, Discreet3DS::CHUNK_MAT_SHININESS); ChunkWriter chunk(writer, Discreet3DS::CHUNK_MAT_SHININESS);
WritePercentChunk(f); WritePercentChunk(f);
@ -350,7 +356,10 @@ void Discreet3DSExporter::WriteMaterials() {
writer.PutI2(1); writer.PutI2(1);
} }
WriteTexture(mat, aiTextureType_DIFFUSE, Discreet3DS::CHUNK_MAT_TEXTURE); // Fallback to BASE_COLOR if no DIFFUSE
if (!WriteTexture(mat, aiTextureType_DIFFUSE, Discreet3DS::CHUNK_MAT_TEXTURE))
WriteTexture(mat, aiTextureType_BASE_COLOR, Discreet3DS::CHUNK_MAT_TEXTURE);
WriteTexture(mat, aiTextureType_HEIGHT, Discreet3DS::CHUNK_MAT_BUMPMAP); WriteTexture(mat, aiTextureType_HEIGHT, Discreet3DS::CHUNK_MAT_BUMPMAP);
WriteTexture(mat, aiTextureType_OPACITY, Discreet3DS::CHUNK_MAT_OPACMAP); WriteTexture(mat, aiTextureType_OPACITY, Discreet3DS::CHUNK_MAT_OPACMAP);
WriteTexture(mat, aiTextureType_SHININESS, Discreet3DS::CHUNK_MAT_MAT_SHINMAP); WriteTexture(mat, aiTextureType_SHININESS, Discreet3DS::CHUNK_MAT_MAT_SHINMAP);
@ -361,20 +370,21 @@ void Discreet3DSExporter::WriteMaterials() {
} }
// ------------------------------------------------------------------------------------------------ // ------------------------------------------------------------------------------------------------
void Discreet3DSExporter::WriteTexture(const aiMaterial &mat, aiTextureType type, uint16_t chunk_flags) { // returns true if the texture existed
bool Discreet3DSExporter::WriteTexture(const aiMaterial &mat, aiTextureType type, uint16_t chunk_flags) {
aiString path; aiString path;
aiTextureMapMode map_mode[2] = { aiTextureMapMode map_mode[2] = {
aiTextureMapMode_Wrap, aiTextureMapMode_Wrap aiTextureMapMode_Wrap, aiTextureMapMode_Wrap
}; };
ai_real blend = 1.0; ai_real blend = 1.0;
if (mat.GetTexture(type, 0, &path, NULL, NULL, &blend, NULL, map_mode) != AI_SUCCESS || !path.length) { if (mat.GetTexture(type, 0, &path, nullptr, nullptr, &blend, nullptr, map_mode) != AI_SUCCESS || !path.length) {
return; return false;
} }
// TODO: handle embedded textures properly // TODO: handle embedded textures properly
if (path.data[0] == '*') { if (path.data[0] == '*') {
ASSIMP_LOG_ERROR("Ignoring embedded texture for export: " + std::string(path.C_Str())); ASSIMP_LOG_ERROR("Ignoring embedded texture for export: ", path.C_Str());
return; return false;
} }
ChunkWriter chunk(writer, chunk_flags); ChunkWriter chunk(writer, chunk_flags);
@ -396,6 +406,7 @@ void Discreet3DSExporter::WriteTexture(const aiMaterial &mat, aiTextureType type
writer.PutU2(val); writer.PutU2(val);
} }
// TODO: export texture transformation (i.e. UV offset, scale, rotation) // TODO: export texture transformation (i.e. UV offset, scale, rotation)
return true;
} }
// ------------------------------------------------------------------------------------------------ // ------------------------------------------------------------------------------------------------
@ -439,7 +450,7 @@ void Discreet3DSExporter::WriteMeshes() {
const uint16_t count = static_cast<uint16_t>(mesh.mNumVertices); const uint16_t count = static_cast<uint16_t>(mesh.mNumVertices);
writer.PutU2(count); writer.PutU2(count);
for (unsigned int i = 0; i < mesh.mNumVertices; ++i) { for (unsigned int i = 0; i < mesh.mNumVertices; ++i) {
const aiVector3D &v = trafo * mesh.mVertices[i]; const aiVector3D &v = mesh.mVertices[i];
writer.PutF4(v.x); writer.PutF4(v.x);
writer.PutF4(v.y); writer.PutF4(v.y);
writer.PutF4(v.z); writer.PutF4(v.z);
@ -501,11 +512,16 @@ void Discreet3DSExporter::WriteMeshes() {
// Transformation matrix by which the mesh vertices have been pre-transformed with. // Transformation matrix by which the mesh vertices have been pre-transformed with.
{ {
ChunkWriter curChunk(writer, Discreet3DS::CHUNK_TRMATRIX); ChunkWriter curChunk(writer, Discreet3DS::CHUNK_TRMATRIX);
for (unsigned int r = 0; r < 4; ++r) { // Store rotation 3x3 matrix row wise
for (unsigned int r = 0; r < 3; ++r) {
for (unsigned int c = 0; c < 3; ++c) { for (unsigned int c = 0; c < 3; ++c) {
writer.PutF4(trafo[r][c]); writer.PutF4(trafo[r][c]);
} }
} }
// Store translation sub vector column wise
for (unsigned int r = 0; r < 3; ++r) {
writer.PutF4(trafo[r][3]);
}
} }
} }
} }

View File

@ -2,8 +2,7 @@
Open Asset Import Library (assimp) Open Asset Import Library (assimp)
---------------------------------------------------------------------- ----------------------------------------------------------------------
Copyright (c) 2006-2020, assimp team Copyright (c) 2006-2024, assimp team
All rights reserved. All rights reserved.
@ -57,8 +56,7 @@ struct aiNode;
struct aiMaterial; struct aiMaterial;
struct aiMesh; struct aiMesh;
namespace Assimp namespace Assimp {
{
// ------------------------------------------------------------------------------------------------ // ------------------------------------------------------------------------------------------------
/** /**
@ -73,7 +71,7 @@ public:
private: private:
void WriteMeshes(); void WriteMeshes();
void WriteMaterials(); void WriteMaterials();
void WriteTexture(const aiMaterial& mat, aiTextureType type, uint16_t chunk_flags); bool WriteTexture(const aiMaterial& mat, aiTextureType type, uint16_t chunk_flags);
void WriteFaceMaterialChunk(const aiMesh& mesh); void WriteFaceMaterialChunk(const aiMesh& mesh);
int WriteHierarchy(const aiNode& node, int level, int sibling_level); int WriteHierarchy(const aiNode& node, int level, int sibling_level);
void WriteString(const std::string& s); void WriteString(const std::string& s);
@ -88,7 +86,7 @@ private:
std::map<const aiNode*, aiMatrix4x4> trafos; std::map<const aiNode*, aiMatrix4x4> trafos;
typedef std::multimap<const aiNode*, unsigned int> MeshesByNodeMap; using MeshesByNodeMap = std::multimap<const aiNode*, unsigned int>;
MeshesByNodeMap meshes; MeshesByNodeMap meshes;
}; };

View File

@ -2,7 +2,7 @@
Open Asset Import Library (assimp) Open Asset Import Library (assimp)
---------------------------------------------------------------------- ----------------------------------------------------------------------
Copyright (c) 2006-2020, assimp team Copyright (c) 2006-2024, assimp team
All rights reserved. All rights reserved.
@ -53,7 +53,7 @@ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
#include <assimp/light.h> #include <assimp/light.h>
#include <assimp/material.h> #include <assimp/material.h>
#include <assimp/qnan.h> #include <assimp/qnan.h>
#include <stdio.h> //sprintf #include <cstdio> //sprintf
namespace Assimp { namespace Assimp {
namespace D3DS { namespace D3DS {
@ -61,20 +61,10 @@ namespace D3DS {
#include <assimp/Compiler/pushpack1.h> #include <assimp/Compiler/pushpack1.h>
// --------------------------------------------------------------------------- // ---------------------------------------------------------------------------
/** Discreet3DS class: Helper class for loading 3ds files. Defines chunks /** Defines chunks and data structures.
* and data structures.
*/ */
class Discreet3DS { namespace Discreet3DS {
private:
Discreet3DS() AI_NO_EXCEPT {
// empty
}
~Discreet3DS() {
// empty
}
public:
//! data structure for a single chunk in a .3ds file //! data structure for a single chunk in a .3ds file
struct Chunk { struct Chunk {
uint16_t Flag; uint16_t Flag;
@ -269,7 +259,7 @@ public:
// Specifies the file name of a texture // Specifies the file name of a texture
CHUNK_MAPFILE = 0xA300, CHUNK_MAPFILE = 0xA300,
// Specifies whether a materail requires two-sided rendering // Specifies whether a material requires two-sided rendering
CHUNK_MAT_TWO_SIDE = 0xA081, CHUNK_MAT_TWO_SIDE = 0xA081,
// ******************************************************************** // ********************************************************************
@ -314,16 +304,17 @@ public:
// camera sub-chunks // camera sub-chunks
CHUNK_CAM_RANGES = 0x4720 CHUNK_CAM_RANGES = 0x4720
}; };
}; }
// --------------------------------------------------------------------------- // ---------------------------------------------------------------------------
/** Helper structure representing a 3ds mesh face */ /** Helper structure representing a 3ds mesh face */
struct Face : public FaceWithSmoothingGroup { struct Face : public FaceWithSmoothingGroup {
}; };
#ifdef _WIN32 #ifdef _MSC_VER
#pragma warning(push)
#pragma warning(disable : 4315) #pragma warning(disable : 4315)
#endif #endif // _MSC_VER
// --------------------------------------------------------------------------- // ---------------------------------------------------------------------------
/** Helper structure representing a texture */ /** Helper structure representing a texture */
@ -331,7 +322,6 @@ struct Texture {
//! Default constructor //! Default constructor
Texture() AI_NO_EXCEPT Texture() AI_NO_EXCEPT
: mTextureBlend(0.0f), : mTextureBlend(0.0f),
mMapName(),
mOffsetU(0.0), mOffsetU(0.0),
mOffsetV(0.0), mOffsetV(0.0),
mScaleU(1.0), mScaleU(1.0),
@ -343,51 +333,11 @@ struct Texture {
mTextureBlend = get_qnan(); mTextureBlend = get_qnan();
} }
Texture(const Texture &other) : Texture(const Texture &other) = default;
mTextureBlend(other.mTextureBlend),
mMapName(other.mMapName),
mOffsetU(other.mOffsetU),
mOffsetV(other.mOffsetV),
mScaleU(other.mScaleU),
mScaleV(other.mScaleV),
mRotation(other.mRotation),
mMapMode(other.mMapMode),
bPrivate(other.bPrivate),
iUVSrc(other.iUVSrc) {
// empty
}
Texture(Texture &&other) AI_NO_EXCEPT : mTextureBlend(std::move(other.mTextureBlend)), Texture(Texture &&other) AI_NO_EXCEPT = default;
mMapName(std::move(other.mMapName)),
mOffsetU(std::move(other.mOffsetU)),
mOffsetV(std::move(other.mOffsetV)),
mScaleU(std::move(other.mScaleU)),
mScaleV(std::move(other.mScaleV)),
mRotation(std::move(other.mRotation)),
mMapMode(std::move(other.mMapMode)),
bPrivate(std::move(other.bPrivate)),
iUVSrc(std::move(other.iUVSrc)) {
// empty
}
Texture &operator=(Texture &&other) AI_NO_EXCEPT { Texture &operator=(Texture &&other) AI_NO_EXCEPT = default;
if (this == &other) {
return *this;
}
mTextureBlend = std::move(other.mTextureBlend);
mMapName = std::move(other.mMapName);
mOffsetU = std::move(other.mOffsetU);
mOffsetV = std::move(other.mOffsetV);
mScaleU = std::move(other.mScaleU);
mScaleV = std::move(other.mScaleV);
mRotation = std::move(other.mRotation);
mMapMode = std::move(other.mMapMode);
bPrivate = std::move(other.bPrivate);
iUVSrc = std::move(other.iUVSrc);
return *this;
}
//! Specifies the blend factor for the texture //! Specifies the blend factor for the texture
ai_real mTextureBlend; ai_real mTextureBlend;
@ -412,13 +362,16 @@ struct Texture {
#include <assimp/Compiler/poppack1.h> #include <assimp/Compiler/poppack1.h>
#ifdef _MSC_VER
#pragma warning(pop)
#endif // _MSC_VER
// --------------------------------------------------------------------------- // ---------------------------------------------------------------------------
/** Helper structure representing a 3ds material */ /** Helper structure representing a 3ds material */
struct Material { struct Material {
//! Default constructor has been deleted //! Default constructor has been deleted
Material() : Material() :
mName(), mName(),
mDiffuse(ai_real(0.6), ai_real(0.6), ai_real(0.6)), mDiffuse(0.6f, 0.6f, 0.6f),
mSpecularExponent(ai_real(0.0)), mSpecularExponent(ai_real(0.0)),
mShininessStrength(ai_real(1.0)), mShininessStrength(ai_real(1.0)),
mShading(Discreet3DS::Gouraud), mShading(Discreet3DS::Gouraud),
@ -431,7 +384,7 @@ struct Material {
//! Constructor with explicit name //! Constructor with explicit name
explicit Material(const std::string &name) : explicit Material(const std::string &name) :
mName(name), mName(name),
mDiffuse(ai_real(0.6), ai_real(0.6), ai_real(0.6)), mDiffuse(0.6f, 0.6f, 0.6f),
mSpecularExponent(ai_real(0.0)), mSpecularExponent(ai_real(0.0)),
mShininessStrength(ai_real(1.0)), mShininessStrength(ai_real(1.0)),
mShading(Discreet3DS::Gouraud), mShading(Discreet3DS::Gouraud),
@ -441,85 +394,9 @@ struct Material {
// empty // empty
} }
Material(const Material &other) : Material(const Material &other) = default;
mName(other.mName),
mDiffuse(other.mDiffuse),
mSpecularExponent(other.mSpecularExponent),
mShininessStrength(other.mShininessStrength),
mSpecular(other.mSpecular),
mAmbient(other.mAmbient),
mShading(other.mShading),
mTransparency(other.mTransparency),
sTexDiffuse(other.sTexDiffuse),
sTexOpacity(other.sTexOpacity),
sTexSpecular(other.sTexSpecular),
sTexReflective(other.sTexReflective),
sTexBump(other.sTexBump),
sTexEmissive(other.sTexEmissive),
sTexShininess(other.sTexShininess),
mBumpHeight(other.mBumpHeight),
mEmissive(other.mEmissive),
sTexAmbient(other.sTexAmbient),
mTwoSided(other.mTwoSided) {
// empty
} virtual ~Material() = default;
//! Move constructor. This is explicitly written because MSVC doesn't support defaulting it
Material(Material &&other) AI_NO_EXCEPT :
mName(std::move(other.mName)),
mDiffuse(std::move(other.mDiffuse)),
mSpecularExponent(std::move(other.mSpecularExponent)),
mShininessStrength(std::move(other.mShininessStrength)),
mSpecular(std::move(other.mSpecular)),
mAmbient(std::move(other.mAmbient)),
mShading(std::move(other.mShading)),
mTransparency(std::move(other.mTransparency)),
sTexDiffuse(std::move(other.sTexDiffuse)),
sTexOpacity(std::move(other.sTexOpacity)),
sTexSpecular(std::move(other.sTexSpecular)),
sTexReflective(std::move(other.sTexReflective)),
sTexBump(std::move(other.sTexBump)),
sTexEmissive(std::move(other.sTexEmissive)),
sTexShininess(std::move(other.sTexShininess)),
mBumpHeight(std::move(other.mBumpHeight)),
mEmissive(std::move(other.mEmissive)),
sTexAmbient(std::move(other.sTexAmbient)),
mTwoSided(std::move(other.mTwoSided)) {
// empty
}
Material &operator=(Material &&other) AI_NO_EXCEPT {
if (this == &other) {
return *this;
}
mName = std::move(other.mName);
mDiffuse = std::move(other.mDiffuse);
mSpecularExponent = std::move(other.mSpecularExponent);
mShininessStrength = std::move(other.mShininessStrength),
mSpecular = std::move(other.mSpecular);
mAmbient = std::move(other.mAmbient);
mShading = std::move(other.mShading);
mTransparency = std::move(other.mTransparency);
sTexDiffuse = std::move(other.sTexDiffuse);
sTexOpacity = std::move(other.sTexOpacity);
sTexSpecular = std::move(other.sTexSpecular);
sTexReflective = std::move(other.sTexReflective);
sTexBump = std::move(other.sTexBump);
sTexEmissive = std::move(other.sTexEmissive);
sTexShininess = std::move(other.sTexShininess);
mBumpHeight = std::move(other.mBumpHeight);
mEmissive = std::move(other.mEmissive);
sTexAmbient = std::move(other.sTexAmbient);
mTwoSided = std::move(other.mTwoSided);
return *this;
}
virtual ~Material() {
// empty
}
//! Name of the material //! Name of the material
std::string mName; std::string mName;
@ -615,7 +492,12 @@ struct Node {
Node() = delete; Node() = delete;
explicit Node(const std::string &name) : explicit Node(const std::string &name) :
mParent(NULL), mName(name), mInstanceNumber(0), mHierarchyPos(0), mHierarchyIndex(0), mInstanceCount(1) { mParent(nullptr),
mName(name),
mInstanceNumber(0),
mHierarchyPos(0),
mHierarchyIndex(0),
mInstanceCount(1) {
aRotationKeys.reserve(20); aRotationKeys.reserve(20);
aPositionKeys.reserve(20); aPositionKeys.reserve(20);
aScalingKeys.reserve(20); aScalingKeys.reserve(20);

View File

@ -3,7 +3,7 @@
Open Asset Import Library (assimp) Open Asset Import Library (assimp)
--------------------------------------------------------------------------- ---------------------------------------------------------------------------
Copyright (c) 2006-2020, assimp team Copyright (c) 2006-2024, assimp team
All rights reserved. All rights reserved.
@ -54,9 +54,9 @@ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
#include <assimp/DefaultLogger.hpp> #include <assimp/DefaultLogger.hpp>
#include <assimp/IOSystem.hpp> #include <assimp/IOSystem.hpp>
using namespace Assimp; namespace Assimp {
static const aiImporterDesc desc = { static constexpr aiImporterDesc desc = {
"Discreet 3DS Importer", "Discreet 3DS Importer",
"", "",
"", "",
@ -103,28 +103,11 @@ Discreet3DSImporter::Discreet3DSImporter() :
// empty // empty
} }
// ------------------------------------------------------------------------------------------------
// Destructor, private as well
Discreet3DSImporter::~Discreet3DSImporter() {
// empty
}
// ------------------------------------------------------------------------------------------------ // ------------------------------------------------------------------------------------------------
// Returns whether the class can handle the format of the given file. // Returns whether the class can handle the format of the given file.
bool Discreet3DSImporter::CanRead(const std::string &pFile, IOSystem *pIOHandler, bool checkSig) const { bool Discreet3DSImporter::CanRead(const std::string &pFile, IOSystem *pIOHandler, bool /*checkSig*/) const {
std::string extension = GetExtension(pFile); static const uint16_t token[] = { 0x4d4d, 0x3dc2 /*, 0x3daa */ };
if (extension == "3ds" || extension == "prj") { return CheckMagicToken(pIOHandler, pFile, token, AI_COUNT_OF(token), 0, sizeof token[0]);
return true;
}
if (!extension.length() || checkSig) {
uint16_t token[3];
token[0] = 0x4d4d;
token[1] = 0x3dc2;
//token[2] = 0x3daa;
return CheckMagicToken(pIOHandler, pFile, token, 2, 0, 2);
}
return false;
} }
// ------------------------------------------------------------------------------------------------ // ------------------------------------------------------------------------------------------------
@ -143,11 +126,17 @@ void Discreet3DSImporter::SetupProperties(const Importer * /*pImp*/) {
// Imports the given file into the given scene structure. // Imports the given file into the given scene structure.
void Discreet3DSImporter::InternReadFile(const std::string &pFile, void Discreet3DSImporter::InternReadFile(const std::string &pFile,
aiScene *pScene, IOSystem *pIOHandler) { aiScene *pScene, IOSystem *pIOHandler) {
StreamReaderLE theStream(pIOHandler->Open(pFile, "rb"));
auto theFile = pIOHandler->Open(pFile, "rb");
if (!theFile) {
throw DeadlyImportError("3DS: Could not open ", pFile);
}
StreamReaderLE theStream(theFile);
// We should have at least one chunk // We should have at least one chunk
if (theStream.GetRemainingSize() < 16) { if (theStream.GetRemainingSize() < 16) {
throw DeadlyImportError("3DS file is either empty or corrupt: " + pFile); throw DeadlyImportError("3DS file is either empty or corrupt: ", pFile);
} }
this->stream = &theStream; this->stream = &theStream;
@ -164,7 +153,7 @@ void Discreet3DSImporter::InternReadFile(const std::string &pFile,
mRootNode->mHierarchyIndex = -1; mRootNode->mHierarchyIndex = -1;
mRootNode->mParent = nullptr; mRootNode->mParent = nullptr;
mMasterScale = 1.0f; mMasterScale = 1.0f;
mBackgroundImage = ""; mBackgroundImage = std::string();
bHasBG = false; bHasBG = false;
bIsPrj = false; bIsPrj = false;
@ -178,7 +167,7 @@ void Discreet3DSImporter::InternReadFile(const std::string &pFile,
// file. // file.
for (auto &mesh : mScene->mMeshes) { for (auto &mesh : mScene->mMeshes) {
if (mesh.mFaces.size() > 0 && mesh.mPositions.size() == 0) { if (mesh.mFaces.size() > 0 && mesh.mPositions.size() == 0) {
throw DeadlyImportError("3DS file contains faces but no vertices: " + pFile); throw DeadlyImportError("3DS file contains faces but no vertices: ", pFile);
} }
CheckIndices(mesh); CheckIndices(mesh);
MakeUnique(mesh); MakeUnique(mesh);
@ -266,14 +255,22 @@ void Discreet3DSImporter::ParseMainChunk() {
case Discreet3DS::CHUNK_PRJ: case Discreet3DS::CHUNK_PRJ:
bIsPrj = true; bIsPrj = true;
break;
case Discreet3DS::CHUNK_MAIN: case Discreet3DS::CHUNK_MAIN:
ParseEditorChunk(); ParseEditorChunk();
break; break;
}; };
ASSIMP_3DS_END_CHUNK(); ASSIMP_3DS_END_CHUNK();
#if defined(__clang__)
#pragma clang diagnostic push
#pragma clang diagnostic ignored "-Wunreachable-code-return"
#endif
// recursively continue processing this hierarchy level // recursively continue processing this hierarchy level
return ParseMainChunk(); return ParseMainChunk();
#if defined(__clang__)
#pragma clang diagnostic pop
#endif
} }
// ------------------------------------------------------------------------------------------------ // ------------------------------------------------------------------------------------------------
@ -298,7 +295,7 @@ void Discreet3DSImporter::ParseEditorChunk() {
// print the version number // print the version number
char buff[10]; char buff[10];
ASSIMP_itoa10(buff, stream->GetI2()); ASSIMP_itoa10(buff, stream->GetI2());
ASSIMP_LOG_INFO_F(std::string("3DS file format version: "), buff); ASSIMP_LOG_INFO("3DS file format version: ", buff);
} break; } break;
}; };
ASSIMP_3DS_END_CHUNK(); ASSIMP_3DS_END_CHUNK();
@ -323,7 +320,7 @@ void Discreet3DSImporter::ParseObjectChunk() {
case Discreet3DS::CHUNK_MAT_MATERIAL: case Discreet3DS::CHUNK_MAT_MATERIAL:
// Add a new material to the list // Add a new material to the list
mScene->mMaterials.push_back(D3DS::Material(std::string("UNNAMED_" + to_string(mScene->mMaterials.size())))); mScene->mMaterials.emplace_back(std::string("UNNAMED_" + ai_to_string(mScene->mMaterials.size())));
ParseMaterialChunk(); ParseMaterialChunk();
break; break;
@ -368,13 +365,13 @@ void Discreet3DSImporter::ParseChunk(const char *name, unsigned int num) {
// IMPLEMENTATION NOTE; // IMPLEMENTATION NOTE;
// Cameras or lights define their transformation in their parent node and in the // Cameras or lights define their transformation in their parent node and in the
// corresponding light or camera chunks. However, we read and process the latter // corresponding light or camera chunks. However, we read and process the latter
// to to be able to return valid cameras/lights even if no scenegraph is given. // to be able to return valid cameras/lights even if no scenegraph is given.
// get chunk type // get chunk type
switch (chunk.Flag) { switch (chunk.Flag) {
case Discreet3DS::CHUNK_TRIMESH: { case Discreet3DS::CHUNK_TRIMESH: {
// this starts a new triangle mesh // this starts a new triangle mesh
mScene->mMeshes.push_back(D3DS::Mesh(std::string(name, num))); mScene->mMeshes.emplace_back(std::string(name, num));
// Read mesh chunks // Read mesh chunks
ParseMeshChunk(); ParseMeshChunk();
@ -442,7 +439,7 @@ void Discreet3DSImporter::ParseChunk(const char *name, unsigned int num) {
// Read the lense angle // Read the lense angle
camera->mHorizontalFOV = AI_DEG_TO_RAD(stream->GetF4()); camera->mHorizontalFOV = AI_DEG_TO_RAD(stream->GetF4());
if (camera->mHorizontalFOV < 0.001f) { if (camera->mHorizontalFOV < 0.001f) {
camera->mHorizontalFOV = AI_DEG_TO_RAD(45.f); camera->mHorizontalFOV = float(AI_DEG_TO_RAD(45.f));
} }
// Now check for further subchunks // Now check for further subchunks
@ -927,7 +924,7 @@ void Discreet3DSImporter::ParseFaceChunk() {
} }
} }
if (0xcdcdcdcd == idx) { if (0xcdcdcdcd == idx) {
ASSIMP_LOG_ERROR_F("3DS: Unknown material: ", sz); ASSIMP_LOG_ERROR("3DS: Unknown material: ", sz);
} }
// Now continue and read all material indices // Now continue and read all material indices
@ -1003,7 +1000,7 @@ void Discreet3DSImporter::ParseMeshChunk() {
mMesh.mFaces.reserve(num); mMesh.mFaces.reserve(num);
while (num-- > 0) { while (num-- > 0) {
// 3DS faces are ALWAYS triangles // 3DS faces are ALWAYS triangles
mMesh.mFaces.push_back(D3DS::Face()); mMesh.mFaces.emplace_back();
D3DS::Face &sFace = mMesh.mFaces.back(); D3DS::Face &sFace = mMesh.mFaces.back();
sFace.mIndices[0] = (uint16_t)stream->GetI2(); sFace.mIndices[0] = (uint16_t)stream->GetI2();
@ -1288,7 +1285,7 @@ void Discreet3DSImporter::ParseColorChunk(aiColor3D *out, bool acceptPercent) {
switch (chunk.Flag) { switch (chunk.Flag) {
case Discreet3DS::CHUNK_LINRGBF: case Discreet3DS::CHUNK_LINRGBF:
bGamma = true; bGamma = true;
// fallthrough
case Discreet3DS::CHUNK_RGBF: case Discreet3DS::CHUNK_RGBF:
if (sizeof(float) * 3 > diff) { if (sizeof(float) * 3 > diff) {
*out = clrError; *out = clrError;
@ -1301,6 +1298,7 @@ void Discreet3DSImporter::ParseColorChunk(aiColor3D *out, bool acceptPercent) {
case Discreet3DS::CHUNK_LINRGBB: case Discreet3DS::CHUNK_LINRGBB:
bGamma = true; bGamma = true;
// fallthrough
case Discreet3DS::CHUNK_RGBB: { case Discreet3DS::CHUNK_RGBB: {
if (sizeof(char) * 3 > diff) { if (sizeof(char) * 3 > diff) {
*out = clrError; *out = clrError;
@ -1337,4 +1335,6 @@ void Discreet3DSImporter::ParseColorChunk(aiColor3D *out, bool acceptPercent) {
(void)bGamma; (void)bGamma;
} }
} // namespace Assimp
#endif // !! ASSIMP_BUILD_NO_3DS_IMPORTER #endif // !! ASSIMP_BUILD_NO_3DS_IMPORTER

View File

@ -3,7 +3,7 @@
Open Asset Import Library (assimp) Open Asset Import Library (assimp)
---------------------------------------------------------------------- ----------------------------------------------------------------------
Copyright (c) 2006-2020, assimp team Copyright (c) 2006-2024, assimp team
All rights reserved. All rights reserved.
@ -46,11 +46,11 @@ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/ */
#ifndef AI_3DSIMPORTER_H_INC #ifndef AI_3DSIMPORTER_H_INC
#define AI_3DSIMPORTER_H_INC #define AI_3DSIMPORTER_H_INC
#ifndef ASSIMP_BUILD_NO_3DS_IMPORTER
#include <assimp/BaseImporter.h> #include <assimp/BaseImporter.h>
#include <assimp/types.h> #include <assimp/types.h>
#ifndef ASSIMP_BUILD_NO_3DS_IMPORTER
#include "3DSHelper.h" #include "3DSHelper.h"
#include <assimp/StreamReader.h> #include <assimp/StreamReader.h>
@ -59,7 +59,6 @@ struct aiNode;
namespace Assimp { namespace Assimp {
using namespace D3DS; using namespace D3DS;
// --------------------------------------------------------------------------------- // ---------------------------------------------------------------------------------
@ -68,21 +67,21 @@ using namespace D3DS;
class Discreet3DSImporter : public BaseImporter { class Discreet3DSImporter : public BaseImporter {
public: public:
Discreet3DSImporter(); Discreet3DSImporter();
~Discreet3DSImporter(); ~Discreet3DSImporter() override = default;
// ------------------------------------------------------------------- // -------------------------------------------------------------------
/** Returns whether the class can handle the format of the given file. /** Returns whether the class can handle the format of the given file.
* See BaseImporter::CanRead() for details. * See BaseImporter::CanRead() for details.
*/ */
bool CanRead( const std::string& pFile, IOSystem* pIOHandler, bool CanRead( const std::string& pFile, IOSystem* pIOHandler,
bool checkSig) const; bool checkSig) const override;
// ------------------------------------------------------------------- // -------------------------------------------------------------------
/** Called prior to ReadFile(). /** Called prior to ReadFile().
* The function is a request to the importer to update its configuration * The function is a request to the importer to update its configuration
* basing on the Importer's configuration property list. * basing on the Importer's configuration property list.
*/ */
void SetupProperties(const Importer* pImp); void SetupProperties(const Importer* pImp) override;
protected: protected:
@ -90,14 +89,14 @@ protected:
/** Return importer meta information. /** Return importer meta information.
* See #BaseImporter::GetInfo for the details * See #BaseImporter::GetInfo for the details
*/ */
const aiImporterDesc* GetInfo () const; const aiImporterDesc* GetInfo () const override;
// ------------------------------------------------------------------- // -------------------------------------------------------------------
/** Imports the given file into the given scene structure. /** Imports the given file into the given scene structure.
* See BaseImporter::InternReadFile() for details * See BaseImporter::InternReadFile() for details
*/ */
void InternReadFile( const std::string& pFile, aiScene* pScene, void InternReadFile( const std::string& pFile, aiScene* pScene,
IOSystem* pIOHandler); IOSystem* pIOHandler) override;
// ------------------------------------------------------------------- // -------------------------------------------------------------------
/** Converts a temporary material to the outer representation /** Converts a temporary material to the outer representation
@ -208,6 +207,15 @@ protected:
*/ */
void ReplaceDefaultMaterial(); void ReplaceDefaultMaterial();
bool ContainsTextures(unsigned int i) const {
return !mScene->mMaterials[i].sTexDiffuse.mMapName.empty() ||
!mScene->mMaterials[i].sTexBump.mMapName.empty() ||
!mScene->mMaterials[i].sTexOpacity.mMapName.empty() ||
!mScene->mMaterials[i].sTexEmissive.mMapName.empty() ||
!mScene->mMaterials[i].sTexSpecular.mMapName.empty() ||
!mScene->mMaterials[i].sTexShininess.mMapName.empty() ;
}
// ------------------------------------------------------------------- // -------------------------------------------------------------------
/** Convert the whole scene /** Convert the whole scene
*/ */

View File

@ -0,0 +1,179 @@
/*
Open Asset Import Library (assimp)
----------------------------------------------------------------------
Copyright (c) 2006-2024, 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.
----------------------------------------------------------------------
*/
#pragma once
#include <assimp/vector3.h>
#include <assimp/matrix4x4.h>
#include <assimp/ParsingUtils.h>
#include <vector>
#include <string>
struct aiMaterial;
struct aiMesh;
namespace Assimp {
namespace D3MF {
enum class ResourceType {
RT_Object,
RT_BaseMaterials,
RT_EmbeddedTexture2D,
RT_Texture2DGroup,
RT_ColorGroup,
RT_Unknown
}; // To be extended with other resource types (eg. material extension resources like Texture2d, Texture2dGroup...)
class Resource {
public:
int mId;
Resource(int id) :
mId(id) {
// empty
}
virtual ~Resource() = default;
virtual ResourceType getType() const {
return ResourceType::RT_Unknown;
}
};
class EmbeddedTexture : public Resource {
public:
std::string mPath;
std::string mContentType;
std::string mTilestyleU;
std::string mTilestyleV;
std::vector<char> mBuffer;
EmbeddedTexture(int id) :
Resource(id),
mPath(),
mContentType(),
mTilestyleU(),
mTilestyleV() {
// empty
}
~EmbeddedTexture() override = default;
ResourceType getType() const override {
return ResourceType::RT_EmbeddedTexture2D;
}
};
class Texture2DGroup : public Resource {
public:
std::vector<aiVector2D> mTex2dCoords;
int mTexId;
Texture2DGroup(int id) :
Resource(id),
mTexId(-1) {
// empty
}
~Texture2DGroup() override = default;
ResourceType getType() const override {
return ResourceType::RT_Texture2DGroup;
}
};
class ColorGroup : public Resource {
public:
std::vector<aiColor4D> mColors;
ColorGroup(int id) :
Resource(id){
// empty
}
~ColorGroup() override = default;
ResourceType getType() const override {
return ResourceType::RT_ColorGroup;
}
};
class BaseMaterials : public Resource {
public:
std::vector<unsigned int> mMaterialIndex;
BaseMaterials(int id) :
Resource(id),
mMaterialIndex() {
// empty
}
~BaseMaterials() override = default;
ResourceType getType() const override {
return ResourceType::RT_BaseMaterials;
}
};
struct Component {
int mObjectId;
aiMatrix4x4 mTransformation;
};
class Object : public Resource {
public:
std::vector<aiMesh *> mMeshes;
std::vector<unsigned int> mMeshIndex;
std::vector<Component> mComponents;
std::string mName;
Object(int id) :
Resource(id),
mName(std::string("Object_") + ai_to_string(id)) {
// empty
}
~Object() override = default;
ResourceType getType() const override {
return ResourceType::RT_Object;
}
};
} // namespace D3MF
} // namespace Assimp

View File

@ -2,8 +2,7 @@
Open Asset Import Library (assimp) Open Asset Import Library (assimp)
---------------------------------------------------------------------- ----------------------------------------------------------------------
Copyright (c) 2006-2020, assimp team Copyright (c) 2006-2024, assimp team
All rights reserved. All rights reserved.
@ -45,59 +44,80 @@ namespace Assimp {
namespace D3MF { namespace D3MF {
namespace XmlTag { namespace XmlTag {
// Root tag
const char* const RootTag = "3MF";
// Meta-data // Meta-data
static const std::string meta = "metadata"; const char* const meta = "metadata";
static const std::string meta_name = "name"; const char* const meta_name = "name";
// Model-data specific tags // Model-data specific tags
static const std::string model = "model"; const char* const model = "model";
static const std::string model_unit = "unit"; const char* const model_unit = "unit";
static const std::string metadata = "metadata"; const char* const metadata = "metadata";
static const std::string resources = "resources"; const char* const resources = "resources";
static const std::string object = "object"; const char* const object = "object";
static const std::string mesh = "mesh"; const char* const mesh = "mesh";
static const std::string vertices = "vertices"; const char* const components = "components";
static const std::string vertex = "vertex"; const char* const component = "component";
static const std::string triangles = "triangles"; const char* const vertices = "vertices";
static const std::string triangle = "triangle"; const char* const vertex = "vertex";
static const std::string x = "x"; const char* const triangles = "triangles";
static const std::string y = "y"; const char* const triangle = "triangle";
static const std::string z = "z"; const char* const x = "x";
static const std::string v1 = "v1"; const char* const y = "y";
static const std::string v2 = "v2"; const char* const z = "z";
static const std::string v3 = "v3"; const char* const v1 = "v1";
static const std::string id = "id"; const char* const v2 = "v2";
static const std::string pid = "pid"; const char* const v3 = "v3";
static const std::string p1 = "p1"; const char* const id = "id";
static const std::string name = "name"; const char* const pid = "pid";
static const std::string type = "type"; const char* const pindex = "pindex";
static const std::string build = "build"; const char* const p1 = "p1";
static const std::string item = "item"; const char *const p2 = "p2";
static const std::string objectid = "objectid"; const char *const p3 = "p3";
static const std::string transform = "transform"; const char* const name = "name";
const char* const type = "type";
const char* const build = "build";
const char* const item = "item";
const char* const objectid = "objectid";
const char* const transform = "transform";
const char *const path = "path";
// Material definitions // Material definitions
static const std::string basematerials = "basematerials"; const char* const basematerials = "basematerials";
static const std::string basematerials_id = "id"; const char* const basematerials_base = "base";
static const std::string basematerials_base = "base"; const char* const basematerials_name = "name";
static const std::string basematerials_name = "name"; const char* const basematerials_displaycolor = "displaycolor";
static const std::string basematerials_displaycolor = "displaycolor"; const char* const texture_2d = "m:texture2d";
const char *const texture_group = "m:texture2dgroup";
const char *const texture_content_type = "contenttype";
const char *const texture_tilestyleu = "tilestyleu";
const char *const texture_tilestylev = "tilestylev";
const char *const texture_2d_coord = "m:tex2coord";
const char *const texture_cuurd_u = "u";
const char *const texture_cuurd_v = "v";
// vertex color definitions
const char *const colorgroup = "m:colorgroup";
const char *const color_item = "m:color";
const char *const color_vaule = "color";
// Meta info tags // Meta info tags
static const std::string CONTENT_TYPES_ARCHIVE = "[Content_Types].xml"; const char* const CONTENT_TYPES_ARCHIVE = "[Content_Types].xml";
static const std::string ROOT_RELATIONSHIPS_ARCHIVE = "_rels/.rels"; const char* const ROOT_RELATIONSHIPS_ARCHIVE = "_rels/.rels";
static const std::string SCHEMA_CONTENTTYPES = "http://schemas.openxmlformats.org/package/2006/content-types"; const char* const SCHEMA_CONTENTTYPES = "http://schemas.openxmlformats.org/package/2006/content-types";
static const std::string SCHEMA_RELATIONSHIPS = "http://schemas.openxmlformats.org/package/2006/relationships"; const char* const SCHEMA_RELATIONSHIPS = "http://schemas.openxmlformats.org/package/2006/relationships";
static const std::string RELS_RELATIONSHIP_CONTAINER = "Relationships"; const char* const RELS_RELATIONSHIP_CONTAINER = "Relationships";
static const std::string RELS_RELATIONSHIP_NODE = "Relationship"; const char* const RELS_RELATIONSHIP_NODE = "Relationship";
static const std::string RELS_ATTRIB_TARGET = "Target"; const char* const RELS_ATTRIB_TARGET = "Target";
static const std::string RELS_ATTRIB_TYPE = "Type"; const char* const RELS_ATTRIB_TYPE = "Type";
static const std::string RELS_ATTRIB_ID = "Id"; const char* const RELS_ATTRIB_ID = "Id";
static const std::string PACKAGE_START_PART_RELATIONSHIP_TYPE = "http://schemas.microsoft.com/3dmanufacturing/2013/01/3dmodel"; const char* const PACKAGE_START_PART_RELATIONSHIP_TYPE = "http://schemas.microsoft.com/3dmanufacturing/2013/01/3dmodel";
static const std::string PACKAGE_PRINT_TICKET_RELATIONSHIP_TYPE = "http://schemas.microsoft.com/3dmanufacturing/2013/01/printticket"; const char* const PACKAGE_PRINT_TICKET_RELATIONSHIP_TYPE = "http://schemas.microsoft.com/3dmanufacturing/2013/01/printticket";
static const std::string PACKAGE_TEXTURE_RELATIONSHIP_TYPE = "http://schemas.microsoft.com/3dmanufacturing/2013/01/3dtexture"; const char* const PACKAGE_TEXTURE_RELATIONSHIP_TYPE = "http://schemas.microsoft.com/3dmanufacturing/2013/01/3dtexture";
static const std::string PACKAGE_CORE_PROPERTIES_RELATIONSHIP_TYPE = "http://schemas.openxmlformats.org/package/2006/relationships/metadata/core-properties"; const char* const PACKAGE_CORE_PROPERTIES_RELATIONSHIP_TYPE = "http://schemas.openxmlformats.org/package/2006/relationships/metadata/core-properties";
static const std::string PACKAGE_THUMBNAIL_RELATIONSHIP_TYPE = "http://schemas.openxmlformats.org/package/2006/relationships/metadata/thumbnail"; const char* const PACKAGE_THUMBNAIL_RELATIONSHIP_TYPE = "http://schemas.openxmlformats.org/package/2006/relationships/metadata/thumbnail";
} }
} // Namespace D3MF } // Namespace D3MF

View File

@ -2,8 +2,7 @@
Open Asset Import Library (assimp) Open Asset Import Library (assimp)
---------------------------------------------------------------------- ----------------------------------------------------------------------
Copyright (c) 2006-2020, assimp team Copyright (c) 2006-2024, assimp team
All rights reserved. All rights reserved.
@ -84,7 +83,7 @@ void ExportScene3MF(const char *pFile, IOSystem *pIOSystem, const aiScene *pScen
namespace D3MF { namespace D3MF {
D3MFExporter::D3MFExporter(const char *pFile, const aiScene *pScene) : D3MFExporter::D3MFExporter(const char *pFile, const aiScene *pScene) :
mArchiveName(pFile), m_zipArchive(nullptr), mScene(pScene), mModelOutput(), mRelOutput(), mContentOutput(), mBuildItems(), mRelations() { mArchiveName(pFile), m_zipArchive(nullptr), mScene(pScene) {
// empty // empty
} }
@ -138,7 +137,7 @@ bool D3MFExporter::exportContentTypes() {
mContentOutput << std::endl; mContentOutput << std::endl;
mContentOutput << "</Types>"; mContentOutput << "</Types>";
mContentOutput << std::endl; mContentOutput << std::endl;
exportContentTyp(XmlTag::CONTENT_TYPES_ARCHIVE); zipContentType(XmlTag::CONTENT_TYPES_ARCHIVE);
return true; return true;
} }
@ -163,7 +162,7 @@ bool D3MFExporter::exportRelations() {
mRelOutput << "</Relationships>"; mRelOutput << "</Relationships>";
mRelOutput << std::endl; mRelOutput << std::endl;
writeRelInfoToFile("_rels", ".rels"); zipRelInfo("_rels", ".rels");
mRelOutput.flush(); mRelOutput.flush();
return true; return true;
@ -197,7 +196,7 @@ bool D3MFExporter::export3DModel() {
info->type = XmlTag::PACKAGE_START_PART_RELATIONSHIP_TYPE; info->type = XmlTag::PACKAGE_START_PART_RELATIONSHIP_TYPE;
mRelations.push_back(info); mRelations.push_back(info);
writeModelToArchive("3D", "3DModel.model"); zipModel("3D", "3DModel.model");
mModelOutput.flush(); mModelOutput.flush();
return true; return true;
@ -238,7 +237,7 @@ void D3MFExporter::writeBaseMaterials() {
aiMaterial *mat = mScene->mMaterials[i]; aiMaterial *mat = mScene->mMaterials[i];
aiString name; aiString name;
if (mat->Get(AI_MATKEY_NAME, name) != aiReturn_SUCCESS) { if (mat->Get(AI_MATKEY_NAME, name) != aiReturn_SUCCESS) {
strName = "basemat_" + to_string(i); strName = "basemat_" + ai_to_string(i);
} else { } else {
strName = name.C_Str(); strName = name.C_Str();
} }
@ -249,22 +248,22 @@ void D3MFExporter::writeBaseMaterials() {
// rgbs % // rgbs %
if (color.r <= 1 && color.g <= 1 && color.b <= 1 && color.a <= 1) { if (color.r <= 1 && color.g <= 1 && color.b <= 1 && color.a <= 1) {
hexDiffuseColor = Rgba2Hex( hexDiffuseColor = ai_rgba2hex(
(int)((ai_real)color.r) * 255, (int)(((ai_real)color.r) * 255),
(int)((ai_real)color.g) * 255, (int)(((ai_real)color.g) * 255),
(int)((ai_real)color.b) * 255, (int)(((ai_real)color.b) * 255),
(int)((ai_real)color.a) * 255, (int)(((ai_real)color.a) * 255),
true); true);
} else { } else {
hexDiffuseColor = "#"; hexDiffuseColor = "#";
tmp = DecimalToHexa((ai_real)color.r); tmp = ai_decimal_to_hexa((ai_real)color.r);
hexDiffuseColor += tmp; hexDiffuseColor += tmp;
tmp = DecimalToHexa((ai_real)color.g); tmp = ai_decimal_to_hexa((ai_real)color.g);
hexDiffuseColor += tmp; hexDiffuseColor += tmp;
tmp = DecimalToHexa((ai_real)color.b); tmp = ai_decimal_to_hexa((ai_real)color.b);
hexDiffuseColor += tmp; hexDiffuseColor += tmp;
tmp = DecimalToHexa((ai_real)color.a); tmp = ai_decimal_to_hexa((ai_real)color.a);
hexDiffuseColor += tmp; hexDiffuseColor += tmp;
} }
} else { } else {
@ -308,18 +307,26 @@ void D3MFExporter::writeMesh(aiMesh *mesh) {
return; return;
} }
mModelOutput << "<" << XmlTag::mesh << ">" << std::endl; mModelOutput << "<"
mModelOutput << "<" << XmlTag::vertices << ">" << std::endl; << XmlTag::mesh
<< ">" << "\n";
mModelOutput << "<"
<< XmlTag::vertices
<< ">" << "\n";
for (unsigned int i = 0; i < mesh->mNumVertices; ++i) { for (unsigned int i = 0; i < mesh->mNumVertices; ++i) {
writeVertex(mesh->mVertices[i]); writeVertex(mesh->mVertices[i]);
} }
mModelOutput << "</" << XmlTag::vertices << ">" << std::endl; mModelOutput << "</"
<< XmlTag::vertices << ">"
<< "\n";
const unsigned int matIdx(mesh->mMaterialIndex); const unsigned int matIdx(mesh->mMaterialIndex);
writeFaces(mesh, matIdx); writeFaces(mesh, matIdx);
mModelOutput << "</" << XmlTag::mesh << ">" << std::endl; mModelOutput << "</"
<< XmlTag::mesh << ">"
<< "\n";
} }
void D3MFExporter::writeVertex(const aiVector3D &pos) { void D3MFExporter::writeVertex(const aiVector3D &pos) {
@ -335,65 +342,57 @@ void D3MFExporter::writeFaces(aiMesh *mesh, unsigned int matIdx) {
if (!mesh->HasFaces()) { if (!mesh->HasFaces()) {
return; return;
} }
mModelOutput << "<" << XmlTag::triangles << ">" << std::endl; mModelOutput << "<"
<< XmlTag::triangles << ">"
<< "\n";
for (unsigned int i = 0; i < mesh->mNumFaces; ++i) { for (unsigned int i = 0; i < mesh->mNumFaces; ++i) {
aiFace &currentFace = mesh->mFaces[i]; aiFace &currentFace = mesh->mFaces[i];
mModelOutput << "<" << XmlTag::triangle << " v1=\"" << currentFace.mIndices[0] << "\" v2=\"" mModelOutput << "<" << XmlTag::triangle << " v1=\"" << currentFace.mIndices[0] << "\" v2=\""
<< currentFace.mIndices[1] << "\" v3=\"" << currentFace.mIndices[2] << currentFace.mIndices[1] << "\" v3=\"" << currentFace.mIndices[2]
<< "\" pid=\"1\" p1=\"" + to_string(matIdx) + "\" />"; << "\" pid=\"1\" p1=\"" + ai_to_string(matIdx) + "\" />";
mModelOutput << std::endl; mModelOutput << "\n";
} }
mModelOutput << "</" << XmlTag::triangles << ">"; mModelOutput << "</"
mModelOutput << std::endl; << XmlTag::triangles
<< ">";
mModelOutput << "\n";
} }
void D3MFExporter::writeBuild() { void D3MFExporter::writeBuild() {
mModelOutput << "<" << XmlTag::build << ">" << std::endl; mModelOutput << "<"
<< XmlTag::build
<< ">"
<< "\n";
for (size_t i = 0; i < mBuildItems.size(); ++i) { for (size_t i = 0; i < mBuildItems.size(); ++i) {
mModelOutput << "<" << XmlTag::item << " objectid=\"" << i + 2 << "\"/>"; mModelOutput << "<" << XmlTag::item << " objectid=\"" << i + 2 << "\"/>";
mModelOutput << std::endl; mModelOutput << "\n";
} }
mModelOutput << "</" << XmlTag::build << ">"; mModelOutput << "</" << XmlTag::build << ">";
mModelOutput << std::endl; mModelOutput << "\n";
} }
void D3MFExporter::exportContentTyp(const std::string &filename) { void D3MFExporter::zipContentType(const std::string &filename) {
if (nullptr == m_zipArchive) { addFileInZip(filename, mContentOutput.str());
throw DeadlyExportError("3MF-Export: Zip archive not valid, nullptr.");
}
const std::string entry = filename;
zip_entry_open(m_zipArchive, entry.c_str());
const std::string &exportTxt(mContentOutput.str());
zip_entry_write(m_zipArchive, exportTxt.c_str(), exportTxt.size());
zip_entry_close(m_zipArchive);
} }
void D3MFExporter::writeModelToArchive(const std::string &folder, const std::string &modelName) { void D3MFExporter::zipModel(const std::string &folder, const std::string &modelName) {
if (nullptr == m_zipArchive) {
throw DeadlyExportError("3MF-Export: Zip archive not valid, nullptr.");
}
const std::string entry = folder + "/" + modelName; const std::string entry = folder + "/" + modelName;
zip_entry_open(m_zipArchive, entry.c_str()); addFileInZip(entry, mModelOutput.str());
const std::string &exportTxt(mModelOutput.str());
zip_entry_write(m_zipArchive, exportTxt.c_str(), exportTxt.size());
zip_entry_close(m_zipArchive);
} }
void D3MFExporter::writeRelInfoToFile(const std::string &folder, const std::string &relName) { void D3MFExporter::zipRelInfo(const std::string &folder, const std::string &relName) {
const std::string entry = folder + "/" + relName;
addFileInZip(entry, mRelOutput.str());
}
void D3MFExporter::addFileInZip(const std::string& entry, const std::string& content) {
if (nullptr == m_zipArchive) { if (nullptr == m_zipArchive) {
throw DeadlyExportError("3MF-Export: Zip archive not valid, nullptr."); throw DeadlyExportError("3MF-Export: Zip archive not valid, nullptr.");
} }
const std::string entry = folder + "/" + relName;
zip_entry_open(m_zipArchive, entry.c_str()); zip_entry_open(m_zipArchive, entry.c_str());
zip_entry_write(m_zipArchive, content.c_str(), content.size());
const std::string &exportTxt(mRelOutput.str());
zip_entry_write(m_zipArchive, exportTxt.c_str(), exportTxt.size());
zip_entry_close(m_zipArchive); zip_entry_close(m_zipArchive);
} }

View File

@ -2,8 +2,7 @@
Open Asset Import Library (assimp) Open Asset Import Library (assimp)
---------------------------------------------------------------------- ----------------------------------------------------------------------
Copyright (c) 2006-2020, assimp team Copyright (c) 2006-2024, assimp team
All rights reserved. All rights reserved.
@ -41,6 +40,9 @@ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/ */
#pragma once #pragma once
#ifndef ASSIMP_BUILD_NO_EXPORT
#ifndef ASSIMP_BUILD_NO_3MF_EXPORTER
#include <memory> #include <memory>
#include <sstream> #include <sstream>
#include <vector> #include <vector>
@ -59,8 +61,6 @@ class IOStream;
namespace D3MF { namespace D3MF {
#ifndef ASSIMP_BUILD_NO_EXPORT
#ifndef ASSIMP_BUILD_NO_3MF_EXPORTER
struct OpcPackageRelationship; struct OpcPackageRelationship;
@ -83,9 +83,12 @@ protected:
void writeVertex( const aiVector3D &pos ); void writeVertex( const aiVector3D &pos );
void writeFaces( aiMesh *mesh, unsigned int matIdx ); void writeFaces( aiMesh *mesh, unsigned int matIdx );
void writeBuild(); void writeBuild();
void exportContentTyp( const std::string &filename );
void writeModelToArchive( const std::string &folder, const std::string &modelName ); // Zip the data
void writeRelInfoToFile( const std::string &folder, const std::string &relName ); void zipContentType( const std::string &filename );
void zipModel( const std::string &folder, const std::string &modelName );
void zipRelInfo( const std::string &folder, const std::string &relName );
void addFileInZip( const std::string &entry, const std::string &content );
private: private:
std::string mArchiveName; std::string mArchiveName;
@ -98,9 +101,11 @@ private:
std::vector<OpcPackageRelationship*> mRelations; std::vector<OpcPackageRelationship*> mRelations;
}; };
#endif // ASSIMP_BUILD_NO_3MF_EXPORTER
#endif // ASSIMP_BUILD_NO_EXPORT
} // Namespace D3MF } // Namespace D3MF
} // Namespace Assimp } // Namespace Assimp
#endif // ASSIMP_BUILD_NO_3MF_EXPORTER
#endif // ASSIMP_BUILD_NO_EXPORT

View File

@ -2,8 +2,7 @@
Open Asset Import Library (assimp) Open Asset Import Library (assimp)
---------------------------------------------------------------------- ----------------------------------------------------------------------
Copyright (c) 2006-2020, assimp team Copyright (c) 2006-2024, assimp team
All rights reserved. All rights reserved.
@ -43,381 +42,33 @@ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
#ifndef ASSIMP_BUILD_NO_3MF_IMPORTER #ifndef ASSIMP_BUILD_NO_3MF_IMPORTER
#include "D3MFImporter.h" #include "D3MFImporter.h"
#include "3MFXmlTags.h"
#include "D3MFOpcPackage.h"
#include "XmlSerializer.h"
#include <assimp/StringComparison.h> #include <assimp/StringComparison.h>
#include <assimp/StringUtils.h> #include <assimp/StringUtils.h>
#include <assimp/XmlParser.h>
#include <assimp/ZipArchiveIOSystem.h> #include <assimp/ZipArchiveIOSystem.h>
#include <assimp/importerdesc.h> #include <assimp/importerdesc.h>
#include <assimp/scene.h> #include <assimp/scene.h>
#include <assimp/DefaultLogger.hpp> #include <assimp/DefaultLogger.hpp>
#include <assimp/IOSystem.hpp> #include <assimp/IOSystem.hpp>
#include <assimp/fast_atof.h>
#include <cassert> #include <cassert>
#include <map> #include <map>
#include <memory> #include <memory>
#include <string> #include <string>
#include <vector> #include <vector>
#include "3MFXmlTags.h"
#include "D3MFOpcPackage.h"
#include <assimp/fast_atof.h>
#include <assimp/irrXMLWrapper.h>
#include <iomanip> #include <iomanip>
#include <cstring>
namespace Assimp { namespace Assimp {
namespace D3MF {
class XmlSerializer { using namespace D3MF;
public:
using MatArray = std::vector<aiMaterial *>;
using MatId2MatArray = std::map<unsigned int, std::vector<unsigned int>>;
XmlSerializer(XmlReader *xmlReader) : static constexpr aiImporterDesc desc = {
mMeshes(),
mMatArray(),
mActiveMatGroup(99999999),
mMatId2MatArray(),
xmlReader(xmlReader) {
// empty
}
~XmlSerializer() {
// empty
}
void ImportXml(aiScene *scene) {
if (nullptr == scene) {
return;
}
scene->mRootNode = new aiNode();
std::vector<aiNode *> children;
std::string nodeName;
while (ReadToEndElement(D3MF::XmlTag::model)) {
nodeName = xmlReader->getNodeName();
if (nodeName == D3MF::XmlTag::object) {
children.push_back(ReadObject(scene));
} else if (nodeName == D3MF::XmlTag::build) {
//
} else if (nodeName == D3MF::XmlTag::basematerials) {
ReadBaseMaterials();
} else if (nodeName == D3MF::XmlTag::meta) {
ReadMetadata();
}
}
if (scene->mRootNode->mName.length == 0) {
scene->mRootNode->mName.Set("3MF");
}
// import the metadata
if (!mMetaData.empty()) {
const size_t numMeta(mMetaData.size());
scene->mMetaData = aiMetadata::Alloc(static_cast<unsigned int>(numMeta));
for (size_t i = 0; i < numMeta; ++i) {
aiString val(mMetaData[i].value);
scene->mMetaData->Set(static_cast<unsigned int>(i), mMetaData[i].name, val);
}
}
// import the meshes
scene->mNumMeshes = static_cast<unsigned int>(mMeshes.size());
scene->mMeshes = new aiMesh *[scene->mNumMeshes]();
std::copy(mMeshes.begin(), mMeshes.end(), scene->mMeshes);
// import the materials
scene->mNumMaterials = static_cast<unsigned int>(mMatArray.size());
if (0 != scene->mNumMaterials) {
scene->mMaterials = new aiMaterial *[scene->mNumMaterials];
std::copy(mMatArray.begin(), mMatArray.end(), scene->mMaterials);
}
// create the scenegraph
scene->mRootNode->mNumChildren = static_cast<unsigned int>(children.size());
scene->mRootNode->mChildren = new aiNode *[scene->mRootNode->mNumChildren]();
std::copy(children.begin(), children.end(), scene->mRootNode->mChildren);
}
private:
aiNode *ReadObject(aiScene *scene) {
std::unique_ptr<aiNode> node(new aiNode());
std::vector<unsigned long> meshIds;
const char *attrib(nullptr);
std::string name, type;
attrib = xmlReader->getAttributeValue(D3MF::XmlTag::id.c_str());
if (nullptr != attrib) {
name = attrib;
}
attrib = xmlReader->getAttributeValue(D3MF::XmlTag::type.c_str());
if (nullptr != attrib) {
type = attrib;
}
node->mParent = scene->mRootNode;
node->mName.Set(name);
size_t meshIdx = mMeshes.size();
while (ReadToEndElement(D3MF::XmlTag::object)) {
if (xmlReader->getNodeName() == D3MF::XmlTag::mesh) {
auto mesh = ReadMesh();
mesh->mName.Set(name);
mMeshes.push_back(mesh);
meshIds.push_back(static_cast<unsigned long>(meshIdx));
++meshIdx;
}
}
node->mNumMeshes = static_cast<unsigned int>(meshIds.size());
node->mMeshes = new unsigned int[node->mNumMeshes];
std::copy(meshIds.begin(), meshIds.end(), node->mMeshes);
return node.release();
}
aiMesh *ReadMesh() {
aiMesh *mesh = new aiMesh();
while (ReadToEndElement(D3MF::XmlTag::mesh)) {
if (xmlReader->getNodeName() == D3MF::XmlTag::vertices) {
ImportVertices(mesh);
} else if (xmlReader->getNodeName() == D3MF::XmlTag::triangles) {
ImportTriangles(mesh);
}
}
return mesh;
}
void ReadMetadata() {
const std::string name = xmlReader->getAttributeValue(D3MF::XmlTag::meta_name.c_str());
xmlReader->read();
const std::string value = xmlReader->getNodeData();
if (name.empty()) {
return;
}
MetaEntry entry;
entry.name = name;
entry.value = value;
mMetaData.push_back(entry);
}
void ImportVertices(aiMesh *mesh) {
std::vector<aiVector3D> vertices;
while (ReadToEndElement(D3MF::XmlTag::vertices)) {
if (xmlReader->getNodeName() == D3MF::XmlTag::vertex) {
vertices.push_back(ReadVertex());
}
}
mesh->mNumVertices = static_cast<unsigned int>(vertices.size());
mesh->mVertices = new aiVector3D[mesh->mNumVertices];
std::copy(vertices.begin(), vertices.end(), mesh->mVertices);
}
aiVector3D ReadVertex() {
aiVector3D vertex;
vertex.x = ai_strtof(xmlReader->getAttributeValue(D3MF::XmlTag::x.c_str()), nullptr);
vertex.y = ai_strtof(xmlReader->getAttributeValue(D3MF::XmlTag::y.c_str()), nullptr);
vertex.z = ai_strtof(xmlReader->getAttributeValue(D3MF::XmlTag::z.c_str()), nullptr);
return vertex;
}
void ImportTriangles(aiMesh *mesh) {
std::vector<aiFace> faces;
while (ReadToEndElement(D3MF::XmlTag::triangles)) {
const std::string nodeName(xmlReader->getNodeName());
if (xmlReader->getNodeName() == D3MF::XmlTag::triangle) {
faces.push_back(ReadTriangle());
const char *pidToken(xmlReader->getAttributeValue(D3MF::XmlTag::p1.c_str()));
if (nullptr != pidToken) {
int matIdx(std::atoi(pidToken));
mesh->mMaterialIndex = matIdx;
}
}
}
mesh->mNumFaces = static_cast<unsigned int>(faces.size());
mesh->mFaces = new aiFace[mesh->mNumFaces];
mesh->mPrimitiveTypes = aiPrimitiveType_TRIANGLE;
std::copy(faces.begin(), faces.end(), mesh->mFaces);
}
aiFace ReadTriangle() {
aiFace face;
face.mNumIndices = 3;
face.mIndices = new unsigned int[face.mNumIndices];
face.mIndices[0] = static_cast<unsigned int>(std::atoi(xmlReader->getAttributeValue(D3MF::XmlTag::v1.c_str())));
face.mIndices[1] = static_cast<unsigned int>(std::atoi(xmlReader->getAttributeValue(D3MF::XmlTag::v2.c_str())));
face.mIndices[2] = static_cast<unsigned int>(std::atoi(xmlReader->getAttributeValue(D3MF::XmlTag::v3.c_str())));
return face;
}
void ReadBaseMaterials() {
std::vector<unsigned int> MatIdArray;
const char *baseMaterialId(xmlReader->getAttributeValue(D3MF::XmlTag::basematerials_id.c_str()));
if (nullptr != baseMaterialId) {
unsigned int id = std::atoi(baseMaterialId);
const size_t newMatIdx(mMatArray.size());
if (id != mActiveMatGroup) {
mActiveMatGroup = id;
MatId2MatArray::const_iterator it(mMatId2MatArray.find(id));
if (mMatId2MatArray.end() == it) {
MatIdArray.clear();
mMatId2MatArray[id] = MatIdArray;
} else {
MatIdArray = it->second;
}
}
MatIdArray.push_back(static_cast<unsigned int>(newMatIdx));
mMatId2MatArray[mActiveMatGroup] = MatIdArray;
}
while (ReadToEndElement(D3MF::XmlTag::basematerials)) {
mMatArray.push_back(readMaterialDef());
}
}
bool parseColor(const char *color, aiColor4D &diffuse) {
if (nullptr == color) {
return false;
}
//format of the color string: #RRGGBBAA or #RRGGBB (3MF Core chapter 5.1.1)
const size_t len(strlen(color));
if (9 != len && 7 != len) {
return false;
}
const char *buf(color);
if ('#' != *buf) {
return false;
}
++buf;
char comp[3] = { 0, 0, '\0' };
comp[0] = *buf;
++buf;
comp[1] = *buf;
++buf;
diffuse.r = static_cast<ai_real>(strtol(comp, NULL, 16)) / ai_real(255.0);
comp[0] = *buf;
++buf;
comp[1] = *buf;
++buf;
diffuse.g = static_cast<ai_real>(strtol(comp, NULL, 16)) / ai_real(255.0);
comp[0] = *buf;
++buf;
comp[1] = *buf;
++buf;
diffuse.b = static_cast<ai_real>(strtol(comp, NULL, 16)) / ai_real(255.0);
if (7 == len)
return true;
comp[0] = *buf;
++buf;
comp[1] = *buf;
++buf;
diffuse.a = static_cast<ai_real>(strtol(comp, NULL, 16)) / ai_real(255.0);
return true;
}
void assignDiffuseColor(aiMaterial *mat) {
const char *color = xmlReader->getAttributeValue(D3MF::XmlTag::basematerials_displaycolor.c_str());
aiColor4D diffuse;
if (parseColor(color, diffuse)) {
mat->AddProperty<aiColor4D>(&diffuse, 1, AI_MATKEY_COLOR_DIFFUSE);
}
}
aiMaterial *readMaterialDef() {
aiMaterial *mat(nullptr);
const char *name(nullptr);
const std::string nodeName(xmlReader->getNodeName());
if (nodeName == D3MF::XmlTag::basematerials_base) {
name = xmlReader->getAttributeValue(D3MF::XmlTag::basematerials_name.c_str());
std::string stdMatName;
aiString matName;
std::string strId(to_string(mActiveMatGroup));
stdMatName += "id";
stdMatName += strId;
stdMatName += "_";
if (nullptr != name) {
stdMatName += std::string(name);
} else {
stdMatName += "basemat";
}
matName.Set(stdMatName);
mat = new aiMaterial;
mat->AddProperty(&matName, AI_MATKEY_NAME);
assignDiffuseColor(mat);
}
return mat;
}
private:
bool ReadToStartElement(const std::string &startTag) {
while (xmlReader->read()) {
const std::string &nodeName(xmlReader->getNodeName());
if (xmlReader->getNodeType() == irr::io::EXN_ELEMENT && nodeName == startTag) {
return true;
} else if (xmlReader->getNodeType() == irr::io::EXN_ELEMENT_END && nodeName == startTag) {
return false;
}
}
return false;
}
bool ReadToEndElement(const std::string &closeTag) {
while (xmlReader->read()) {
const std::string &nodeName(xmlReader->getNodeName());
if (xmlReader->getNodeType() == irr::io::EXN_ELEMENT) {
return true;
} else if (xmlReader->getNodeType() == irr::io::EXN_ELEMENT_END && nodeName == closeTag) {
return false;
}
}
ASSIMP_LOG_ERROR("unexpected EOF, expected closing <" + closeTag + "> tag");
return false;
}
private:
struct MetaEntry {
std::string name;
std::string value;
};
std::vector<MetaEntry> mMetaData;
std::vector<aiMesh *> mMeshes;
MatArray mMatArray;
unsigned int mActiveMatGroup;
MatId2MatArray mMatId2MatArray;
XmlReader *xmlReader;
};
} //namespace D3MF
static const aiImporterDesc desc = {
"3mf Importer", "3mf Importer",
"", "",
"", "",
@ -430,34 +81,20 @@ static const aiImporterDesc desc = {
"3mf" "3mf"
}; };
D3MFImporter::D3MFImporter() : bool D3MFImporter::CanRead(const std::string &filename, IOSystem *pIOHandler, bool ) const {
BaseImporter() { if (!ZipArchiveIOSystem::isZipArchive(pIOHandler, filename)) {
// empty return false;
} }
static const char *const ModelRef = "3D/3dmodel.model";
D3MFImporter::~D3MFImporter() { ZipArchiveIOSystem archive(pIOHandler, filename);
// empty if (!archive.Exists(ModelRef)) {
} return false;
bool D3MFImporter::CanRead(const std::string &filename, IOSystem *pIOHandler, bool checkSig) const {
const std::string extension(GetExtension(filename));
if (extension == desc.mFileExtensions) {
return true;
} else if (!extension.length() || checkSig) {
if (nullptr == pIOHandler) {
return false;
}
if (!ZipArchiveIOSystem::isZipArchive(pIOHandler, filename)) {
return false;
}
D3MF::D3MFOpcPackage opcPackage(pIOHandler, filename);
return opcPackage.validate();
} }
return false; return true;
} }
void D3MFImporter::SetupProperties(const Importer * /*pImp*/) { void D3MFImporter::SetupProperties(const Importer*) {
// empty // empty
} }
@ -466,14 +103,22 @@ const aiImporterDesc *D3MFImporter::GetInfo() const {
} }
void D3MFImporter::InternReadFile(const std::string &filename, aiScene *pScene, IOSystem *pIOHandler) { void D3MFImporter::InternReadFile(const std::string &filename, aiScene *pScene, IOSystem *pIOHandler) {
D3MF::D3MFOpcPackage opcPackage(pIOHandler, filename); D3MFOpcPackage opcPackage(pIOHandler, filename);
std::unique_ptr<CIrrXML_IOStreamReader> xmlStream(new CIrrXML_IOStreamReader(opcPackage.RootStream())); XmlParser xmlParser;
std::unique_ptr<D3MF::XmlReader> xmlReader(irr::io::createIrrXMLReader(xmlStream.get())); if (xmlParser.parse(opcPackage.RootStream())) {
XmlSerializer xmlSerializer(&xmlParser);
xmlSerializer.ImportXml(pScene);
D3MF::XmlSerializer xmlSerializer(xmlReader.get()); const std::vector<aiTexture*> &tex = opcPackage.GetEmbeddedTextures();
if (!tex.empty()) {
xmlSerializer.ImportXml(pScene); pScene->mNumTextures = static_cast<unsigned int>(tex.size());
pScene->mTextures = new aiTexture *[pScene->mNumTextures];
for (unsigned int i = 0; i < pScene->mNumTextures; ++i) {
pScene->mTextures[i] = tex[i];
}
}
}
} }
} // Namespace Assimp } // Namespace Assimp

View File

@ -2,8 +2,7 @@
Open Asset Import Library (assimp) Open Asset Import Library (assimp)
---------------------------------------------------------------------- ----------------------------------------------------------------------
Copyright (c) 2006-2020, assimp team Copyright (c) 2006-2024, assimp team
All rights reserved. All rights reserved.
@ -43,23 +42,50 @@ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
#ifndef AI_D3MFLOADER_H_INCLUDED #ifndef AI_D3MFLOADER_H_INCLUDED
#define AI_D3MFLOADER_H_INCLUDED #define AI_D3MFLOADER_H_INCLUDED
#ifndef ASSIMP_BUILD_NO_3MF_IMPORTER
#include <assimp/BaseImporter.h> #include <assimp/BaseImporter.h>
namespace Assimp { namespace Assimp {
// ---------------------------------------------------------------------------
/// @brief The 3MF-importer class.
///
/// Implements the basic topology import and embedded textures.
// ---------------------------------------------------------------------------
class D3MFImporter : public BaseImporter { class D3MFImporter : public BaseImporter {
public: public:
// BaseImporter interface /// @brief The default class constructor.
D3MFImporter(); D3MFImporter() = default;
~D3MFImporter();
bool CanRead(const std::string &pFile, IOSystem *pIOHandler, bool checkSig) const; /// @brief The class destructor.
void SetupProperties(const Importer *pImp); ~D3MFImporter() override = default;
const aiImporterDesc *GetInfo() const;
/// @brief Performs the data format detection.
/// @param pFile The filename to check.
/// @param pIOHandler The used IO-System.
/// @param checkSig true for signature checking.
/// @return true for can be loaded, false for not.
bool CanRead(const std::string &pFile, IOSystem *pIOHandler, bool checkSig) const override;
/// @brief Not used
/// @param pImp Not used
void SetupProperties(const Importer *pImp) override;
/// @brief The importer description getter.
/// @return The info
const aiImporterDesc *GetInfo() const override;
protected: protected:
void InternReadFile(const std::string &pFile, aiScene *pScene, IOSystem *pIOHandler); /// @brief Internal read function, performs the file parsing.
/// @param pFile The filename
/// @param pScene The scene to load in.
/// @param pIOHandler The io-system
void InternReadFile(const std::string &pFile, aiScene *pScene, IOSystem *pIOHandler) override;
}; };
} // Namespace Assimp } // Namespace Assimp
#endif // #ifndef ASSIMP_BUILD_NO_3MF_IMPORTER
#endif // AI_D3MFLOADER_H_INCLUDED #endif // AI_D3MFLOADER_H_INCLUDED

View File

@ -2,8 +2,7 @@
Open Asset Import Library (assimp) Open Asset Import Library (assimp)
---------------------------------------------------------------------- ----------------------------------------------------------------------
Copyright (c) 2006-2020, assimp team Copyright (c) 2006-2024, assimp team
All rights reserved. All rights reserved.
@ -44,106 +43,122 @@ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
#include "D3MFOpcPackage.h" #include "D3MFOpcPackage.h"
#include <assimp/Exceptional.h> #include <assimp/Exceptional.h>
#include <assimp/XmlParser.h>
#include <assimp/ZipArchiveIOSystem.h>
#include <assimp/ai_assert.h>
#include <assimp/DefaultLogger.hpp>
#include <assimp/IOStream.hpp> #include <assimp/IOStream.hpp>
#include <assimp/IOSystem.hpp> #include <assimp/IOSystem.hpp>
#include <assimp/DefaultLogger.hpp> #include <assimp/texture.h>
#include <assimp/ai_assert.h> #include "3MFXmlTags.h"
#include <assimp/ZipArchiveIOSystem.h>
#include <cstdlib>
#include <memory>
#include <vector>
#include <map>
#include <algorithm> #include <algorithm>
#include <cassert> #include <cassert>
#include "3MFXmlTags.h" #include <cstdlib>
#include <map>
#include <vector>
namespace Assimp { namespace Assimp {
namespace D3MF { namespace D3MF {
// ------------------------------------------------------------------------------------------------ // ------------------------------------------------------------------------------------------------
typedef std::shared_ptr<OpcPackageRelationship> OpcPackageRelationshipPtr; using OpcPackageRelationshipPtr = std::shared_ptr<OpcPackageRelationship>;
class OpcPackageRelationshipReader { class OpcPackageRelationshipReader {
public: public:
OpcPackageRelationshipReader(XmlReader* xmlReader) { OpcPackageRelationshipReader(XmlParser &parser) :
while(xmlReader->read()) { mRelations() {
if(xmlReader->getNodeType() == irr::io::EXN_ELEMENT && XmlNode root = parser.getRootNode();
xmlReader->getNodeName() == XmlTag::RELS_RELATIONSHIP_CONTAINER) ParseRootNode(root);
{ }
ParseRootNode(xmlReader);
void ParseRootNode(XmlNode &node) {
ParseAttributes(node);
for (XmlNode currentNode = node.first_child(); currentNode; currentNode = currentNode.next_sibling()) {
std::string name = currentNode.name();
if (name == "Relationships") {
ParseRelationsNode(currentNode);
} }
} }
} }
void ParseRootNode(XmlReader* xmlReader) void ParseAttributes(XmlNode & /*node*/) {
{
ParseAttributes(xmlReader);
while(xmlReader->read())
{
if(xmlReader->getNodeType() == irr::io::EXN_ELEMENT &&
xmlReader->getNodeName() == XmlTag::RELS_RELATIONSHIP_NODE)
{
ParseChildNode(xmlReader);
}
}
}
void ParseAttributes(XmlReader*) {
// empty // empty
} }
bool validateRels( OpcPackageRelationshipPtr &relPtr ) { bool validateRels(OpcPackageRelationshipPtr &relPtr) {
if ( relPtr->id.empty() || relPtr->type.empty() || relPtr->target.empty() ) { if (relPtr->id.empty() || relPtr->type.empty() || relPtr->target.empty()) {
return false;
}
return true;
}
void ParseRelationsNode(XmlNode &node) {
if (node.empty()) {
return;
}
for (XmlNode currentNode = node.first_child(); currentNode; currentNode = currentNode.next_sibling()) {
const std::string name = currentNode.name();
if (name == "Relationship") {
OpcPackageRelationshipPtr relPtr(new OpcPackageRelationship());
relPtr->id = currentNode.attribute(XmlTag::RELS_ATTRIB_ID).as_string();
relPtr->type = currentNode.attribute(XmlTag::RELS_ATTRIB_TYPE).as_string();
relPtr->target = currentNode.attribute(XmlTag::RELS_ATTRIB_TARGET).as_string();
if (validateRels(relPtr)) {
mRelations.push_back(relPtr);
}
}
}
}
std::vector<OpcPackageRelationshipPtr> mRelations;
};
static bool IsEmbeddedTexture( const std::string &filename ) {
const std::string extension = BaseImporter::GetExtension(filename);
if (extension == "jpg" || extension == "png" || extension == "jpeg") {
std::string::size_type pos = filename.find("thumbnail");
if (pos != std::string::npos) {
return false; return false;
} }
return true; return true;
} }
void ParseChildNode(XmlReader* xmlReader) { return false;
OpcPackageRelationshipPtr relPtr(new OpcPackageRelationship()); }
relPtr->id = xmlReader->getAttributeValueSafe(XmlTag::RELS_ATTRIB_ID.c_str());
relPtr->type = xmlReader->getAttributeValueSafe(XmlTag::RELS_ATTRIB_TYPE.c_str());
relPtr->target = xmlReader->getAttributeValueSafe(XmlTag::RELS_ATTRIB_TARGET.c_str());
if ( validateRels( relPtr ) ) {
m_relationShips.push_back( relPtr );
}
}
std::vector<OpcPackageRelationshipPtr> m_relationShips;
};
// ------------------------------------------------------------------------------------------------ // ------------------------------------------------------------------------------------------------
D3MFOpcPackage::D3MFOpcPackage(IOSystem* pIOHandler, const std::string& rFile) D3MFOpcPackage::D3MFOpcPackage(IOSystem *pIOHandler, const std::string &rFile) :
: mRootStream(nullptr) mRootStream(nullptr),
, mZipArchive() { mZipArchive() {
mZipArchive.reset( new ZipArchiveIOSystem( pIOHandler, rFile ) ); mZipArchive = new ZipArchiveIOSystem(pIOHandler, rFile);
if(!mZipArchive->isOpen()) { if (!mZipArchive->isOpen()) {
throw DeadlyImportError("Failed to open file " + rFile+ "."); throw DeadlyImportError("Failed to open file ", rFile, ".");
} }
std::vector<std::string> fileList; std::vector<std::string> fileList;
mZipArchive->getFileList(fileList); mZipArchive->getFileList(fileList);
for (auto& file: fileList) { for (auto &file : fileList) {
if(file == D3MF::XmlTag::ROOT_RELATIONSHIPS_ARCHIVE) { if (file == D3MF::XmlTag::ROOT_RELATIONSHIPS_ARCHIVE) {
//PkgRelationshipReader pkgRelReader(file, archive); if (!mZipArchive->Exists(file.c_str())) {
ai_assert(mZipArchive->Exists(file.c_str())); continue;
}
IOStream *fileStream = mZipArchive->Open(file.c_str()); IOStream *fileStream = mZipArchive->Open(file.c_str());
if (nullptr == fileStream) {
ai_assert(fileStream != nullptr); ASSIMP_LOG_ERROR("Filestream is nullptr.");
continue;
}
std::string rootFile = ReadPackageRootRelationship(fileStream); std::string rootFile = ReadPackageRootRelationship(fileStream);
if ( rootFile.size() > 0 && rootFile[ 0 ] == '/' ) { if (!rootFile.empty() && rootFile[0] == '/') {
rootFile = rootFile.substr( 1 ); rootFile = rootFile.substr(1);
if ( rootFile[ 0 ] == '/' ) { if (rootFile[0] == '/') {
// deal with zip-bug // deal with zip-bug
rootFile = rootFile.substr( 1 ); rootFile = rootFile.substr(1);
} }
} }
@ -152,55 +167,89 @@ D3MFOpcPackage::D3MFOpcPackage(IOSystem* pIOHandler, const std::string& rFile)
mZipArchive->Close(fileStream); mZipArchive->Close(fileStream);
mRootStream = mZipArchive->Open(rootFile.c_str()); mRootStream = mZipArchive->Open(rootFile.c_str());
ai_assert( mRootStream != nullptr ); ai_assert(mRootStream != nullptr);
if ( nullptr == mRootStream ) { if (nullptr == mRootStream) {
throw DeadlyExportError( "Cannot open root-file in archive : " + rootFile ); throw DeadlyImportError("Cannot open root-file in archive : " + rootFile);
} }
} else if (file == D3MF::XmlTag::CONTENT_TYPES_ARCHIVE) {
} else if( file == D3MF::XmlTag::CONTENT_TYPES_ARCHIVE) { ASSIMP_LOG_WARN("Ignored file of unsupported type CONTENT_TYPES_ARCHIVES", file);
ASSIMP_LOG_WARN_F("Ignored file of unsupported type CONTENT_TYPES_ARCHIVES",file); } else if (IsEmbeddedTexture(file)) {
IOStream *fileStream = mZipArchive->Open(file.c_str());
LoadEmbeddedTextures(fileStream, file);
mZipArchive->Close(fileStream);
} else { } else {
ASSIMP_LOG_WARN_F("Ignored file of unknown type: ",file); ASSIMP_LOG_WARN("Ignored file of unknown type: ", file);
} }
} }
} }
D3MFOpcPackage::~D3MFOpcPackage() { D3MFOpcPackage::~D3MFOpcPackage() {
mZipArchive->Close(mRootStream); mZipArchive->Close(mRootStream);
delete mZipArchive;
} }
IOStream* D3MFOpcPackage::RootStream() const { IOStream *D3MFOpcPackage::RootStream() const {
return mRootStream; return mRootStream;
} }
static const std::string ModelRef = "3D/3dmodel.model"; const std::vector<aiTexture *> &D3MFOpcPackage::GetEmbeddedTextures() const {
return mEmbeddedTextures;
}
static const char *const ModelRef = "3D/3dmodel.model";
bool D3MFOpcPackage::validate() { bool D3MFOpcPackage::validate() {
if ( nullptr == mRootStream || nullptr == mZipArchive ) { if (nullptr == mRootStream || nullptr == mZipArchive) {
return false; return false;
} }
return mZipArchive->Exists( ModelRef.c_str() ); return mZipArchive->Exists(ModelRef);
} }
std::string D3MFOpcPackage::ReadPackageRootRelationship(IOStream* stream) { std::string D3MFOpcPackage::ReadPackageRootRelationship(IOStream *stream) {
std::unique_ptr<CIrrXML_IOStreamReader> xmlStream(new CIrrXML_IOStreamReader(stream)); XmlParser xmlParser;
std::unique_ptr<XmlReader> xml(irr::io::createIrrXMLReader(xmlStream.get())); if (!xmlParser.parse(stream)) {
return std::string();
}
OpcPackageRelationshipReader reader(xml.get()); OpcPackageRelationshipReader reader(xmlParser);
auto itr = std::find_if(reader.m_relationShips.begin(), reader.m_relationShips.end(), [](const OpcPackageRelationshipPtr& rel){ auto itr = std::find_if(reader.mRelations.begin(), reader.mRelations.end(), [](const OpcPackageRelationshipPtr &rel) {
return rel->type == XmlTag::PACKAGE_START_PART_RELATIONSHIP_TYPE; return rel->type == XmlTag::PACKAGE_START_PART_RELATIONSHIP_TYPE;
}); });
if ( itr == reader.m_relationShips.end() ) { if (itr == reader.mRelations.end()) {
throw DeadlyImportError( "Cannot find " + XmlTag::PACKAGE_START_PART_RELATIONSHIP_TYPE ); throw DeadlyImportError("Cannot find ", XmlTag::PACKAGE_START_PART_RELATIONSHIP_TYPE);
} }
return (*itr)->target; return (*itr)->target;
} }
void D3MFOpcPackage::LoadEmbeddedTextures(IOStream *fileStream, const std::string &filename) {
if (nullptr == fileStream) {
return;
}
const size_t size = fileStream->FileSize();
if (0 == size) {
return;
}
unsigned char *data = new unsigned char[size];
fileStream->Read(data, 1, size);
aiTexture *texture = new aiTexture;
std::string embName = "*" + filename;
texture->mFilename.Set(embName.c_str());
texture->mWidth = static_cast<unsigned int>(size);
texture->mHeight = 0;
texture->achFormatHint[0] = 'p';
texture->achFormatHint[1] = 'n';
texture->achFormatHint[2] = 'g';
texture->achFormatHint[3] = '\0';
texture->pcData = (aiTexel*) data;
mEmbeddedTextures.emplace_back(texture);
}
} // Namespace D3MF } // Namespace D3MF
} // Namespace Assimp } // Namespace Assimp

View File

@ -2,8 +2,7 @@
Open Asset Import Library (assimp) Open Asset Import Library (assimp)
---------------------------------------------------------------------- ----------------------------------------------------------------------
Copyright (c) 2006-2020, assimp team Copyright (c) 2006-2024, assimp team
All rights reserved. All rights reserved.
@ -43,19 +42,18 @@ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
#ifndef D3MFOPCPACKAGE_H #ifndef D3MFOPCPACKAGE_H
#define D3MFOPCPACKAGE_H #define D3MFOPCPACKAGE_H
#include <memory>
#include <assimp/IOSystem.hpp> #include <assimp/IOSystem.hpp>
#include <assimp/irrXMLWrapper.h> #include <memory>
#include <string>
struct aiTexture;
namespace Assimp { namespace Assimp {
class ZipArchiveIOSystem;
class ZipArchiveIOSystem;
namespace D3MF { namespace D3MF {
using XmlReader = irr::io::IrrXMLReader ;
using XmlReaderPtr = std::shared_ptr<XmlReader> ;
struct OpcPackageRelationship { struct OpcPackageRelationship {
std::string id; std::string id;
std::string type; std::string type;
@ -64,20 +62,23 @@ struct OpcPackageRelationship {
class D3MFOpcPackage { class D3MFOpcPackage {
public: public:
D3MFOpcPackage( IOSystem* pIOHandler, const std::string& rFile ); D3MFOpcPackage( IOSystem* pIOHandler, const std::string& file );
~D3MFOpcPackage(); ~D3MFOpcPackage();
IOStream* RootStream() const; IOStream* RootStream() const;
bool validate(); bool validate();
const std::vector<aiTexture*> &GetEmbeddedTextures() const;
protected: protected:
std::string ReadPackageRootRelationship(IOStream* stream); std::string ReadPackageRootRelationship(IOStream* stream);
void LoadEmbeddedTextures(IOStream *fileStream, const std::string &filename);
private: private:
IOStream* mRootStream; IOStream* mRootStream;
std::unique_ptr<ZipArchiveIOSystem> mZipArchive; ZipArchiveIOSystem *mZipArchive;
std::vector<aiTexture *> mEmbeddedTextures;
}; };
} // Namespace D3MF } // namespace D3MF
} // Namespace Assimp } // namespace Assimp
#endif // D3MFOPCPACKAGE_H #endif // D3MFOPCPACKAGE_H

View File

@ -0,0 +1,724 @@
/*
Open Asset Import Library (assimp)
----------------------------------------------------------------------
Copyright (c) 2006-2024, 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.
----------------------------------------------------------------------
*/
#include "XmlSerializer.h"
#include "D3MFOpcPackage.h"
#include "3MFXmlTags.h"
#include "3MFTypes.h"
#include <assimp/scene.h>
#include <utility>
namespace Assimp {
namespace D3MF {
static constexpr int IdNotSet = -1;
namespace {
static constexpr size_t ColRGBA_Len = 9;
static constexpr size_t ColRGB_Len = 7;
// format of the color string: #RRGGBBAA or #RRGGBB (3MF Core chapter 5.1.1)
bool validateColorString(const std::string color) {
const size_t len = color.size();
if (ColRGBA_Len != len && ColRGB_Len != len) {
return false;
}
return true;
}
aiFace ReadTriangle(XmlNode &node, int &texId0, int &texId1, int &texId2) {
aiFace face;
face.mNumIndices = 3;
face.mIndices = new unsigned int[face.mNumIndices];
face.mIndices[0] = static_cast<unsigned int>(std::atoi(node.attribute(XmlTag::v1).as_string()));
face.mIndices[1] = static_cast<unsigned int>(std::atoi(node.attribute(XmlTag::v2).as_string()));
face.mIndices[2] = static_cast<unsigned int>(std::atoi(node.attribute(XmlTag::v3).as_string()));
texId0 = texId1 = texId2 = IdNotSet;
XmlParser::getIntAttribute(node, XmlTag::p1, texId0);
XmlParser::getIntAttribute(node, XmlTag::p2, texId1);
XmlParser::getIntAttribute(node, XmlTag::p3, texId2);
return face;
}
aiVector3D ReadVertex(XmlNode &node) {
aiVector3D vertex;
vertex.x = ai_strtof(node.attribute(XmlTag::x).as_string(), nullptr);
vertex.y = ai_strtof(node.attribute(XmlTag::y).as_string(), nullptr);
vertex.z = ai_strtof(node.attribute(XmlTag::z).as_string(), nullptr);
return vertex;
}
bool getNodeAttribute(const XmlNode &node, const std::string &attribute, std::string &value) {
pugi::xml_attribute objectAttribute = node.attribute(attribute.c_str());
if (!objectAttribute.empty()) {
value = objectAttribute.as_string();
return true;
}
return false;
}
bool getNodeAttribute(const XmlNode &node, const std::string &attribute, int &value) {
std::string strValue;
const bool ret = getNodeAttribute(node, attribute, strValue);
if (ret) {
value = std::atoi(strValue.c_str());
return true;
}
return false;
}
aiMatrix4x4 parseTransformMatrix(const std::string& matrixStr) {
// split the string
std::vector<float> numbers;
std::string currentNumber;
for (char c : matrixStr) {
if (c == ' ') {
if (!currentNumber.empty()) {
float f = std::stof(currentNumber);
numbers.push_back(f);
currentNumber.clear();
}
} else {
currentNumber.push_back(c);
}
}
if (!currentNumber.empty()) {
const float f = std::stof(currentNumber);
numbers.push_back(f);
}
aiMatrix4x4 transformMatrix;
transformMatrix.a1 = numbers[0];
transformMatrix.b1 = numbers[1];
transformMatrix.c1 = numbers[2];
transformMatrix.d1 = 0;
transformMatrix.a2 = numbers[3];
transformMatrix.b2 = numbers[4];
transformMatrix.c2 = numbers[5];
transformMatrix.d2 = 0;
transformMatrix.a3 = numbers[6];
transformMatrix.b3 = numbers[7];
transformMatrix.c3 = numbers[8];
transformMatrix.d3 = 0;
transformMatrix.a4 = numbers[9];
transformMatrix.b4 = numbers[10];
transformMatrix.c4 = numbers[11];
transformMatrix.d4 = 1;
return transformMatrix;
}
bool parseColor(const std::string &color, aiColor4D &diffuse) {
if (color.empty()) {
return false;
}
if (!validateColorString(color)) {
return false;
}
if ('#' != color[0]) {
return false;
}
char r[3] = { color[1], color[2], '\0' };
diffuse.r = static_cast<ai_real>(strtol(r, nullptr, 16)) / ai_real(255.0);
char g[3] = { color[3], color[4], '\0' };
diffuse.g = static_cast<ai_real>(strtol(g, nullptr, 16)) / ai_real(255.0);
char b[3] = { color[5], color[6], '\0' };
diffuse.b = static_cast<ai_real>(strtol(b, nullptr, 16)) / ai_real(255.0);
const size_t len = color.size();
if (ColRGB_Len == len) {
return true;
}
char a[3] = { color[7], color[8], '\0' };
diffuse.a = static_cast<ai_real>(strtol(a, nullptr, 16)) / ai_real(255.0);
return true;
}
void assignDiffuseColor(XmlNode &node, aiMaterial *mat) {
const char *color = node.attribute(XmlTag::basematerials_displaycolor).as_string();
aiColor4D diffuse;
if (parseColor(color, diffuse)) {
mat->AddProperty<aiColor4D>(&diffuse, 1, AI_MATKEY_COLOR_DIFFUSE);
}
}
} // namespace
XmlSerializer::XmlSerializer(XmlParser *xmlParser) :
mResourcesDictionnary(),
mMeshCount(0),
mXmlParser(xmlParser) {
ai_assert(nullptr != xmlParser);
}
XmlSerializer::~XmlSerializer() {
for (auto &it : mResourcesDictionnary) {
delete it.second;
}
}
void XmlSerializer::ImportXml(aiScene *scene) {
if (nullptr == scene) {
return;
}
scene->mRootNode = new aiNode(XmlTag::RootTag);
XmlNode node = mXmlParser->getRootNode().child(XmlTag::model);
if (node.empty()) {
return;
}
XmlNode resNode = node.child(XmlTag::resources);
for (auto &currentNode : resNode.children()) {
const std::string currentNodeName = currentNode.name();
if (currentNodeName == XmlTag::texture_2d) {
ReadEmbeddecTexture(currentNode);
} else if (currentNodeName == XmlTag::texture_group) {
ReadTextureGroup(currentNode);
} else if (currentNodeName == XmlTag::object) {
ReadObject(currentNode);
} else if (currentNodeName == XmlTag::basematerials) {
ReadBaseMaterials(currentNode);
} else if (currentNodeName == XmlTag::meta) {
ReadMetadata(currentNode);
} else if (currentNodeName == XmlTag::colorgroup) {
ReadColorGroup(currentNode);
}
}
StoreMaterialsInScene(scene);
XmlNode buildNode = node.child(XmlTag::build);
if (buildNode.empty()) {
return;
}
for (auto &currentNode : buildNode.children()) {
const std::string currentNodeName = currentNode.name();
if (currentNodeName == XmlTag::item) {
int objectId = IdNotSet;
std::string transformationMatrixStr;
aiMatrix4x4 transformationMatrix;
getNodeAttribute(currentNode, D3MF::XmlTag::objectid, objectId);
bool hasTransform = getNodeAttribute(currentNode, D3MF::XmlTag::transform, transformationMatrixStr);
auto it = mResourcesDictionnary.find(objectId);
if (it != mResourcesDictionnary.end() && it->second->getType() == ResourceType::RT_Object) {
Object *obj = static_cast<Object *>(it->second);
if (hasTransform) {
transformationMatrix = parseTransformMatrix(transformationMatrixStr);
}
addObjectToNode(scene->mRootNode, obj, transformationMatrix);
}
}
}
// import the metadata
if (!mMetaData.empty()) {
const size_t numMeta = mMetaData.size();
scene->mMetaData = aiMetadata::Alloc(static_cast<unsigned int>(numMeta));
for (size_t i = 0; i < numMeta; ++i) {
aiString val(mMetaData[i].value);
scene->mMetaData->Set(static_cast<unsigned int>(i), mMetaData[i].name, val);
}
}
// import the meshes, materials are already stored
scene->mNumMeshes = static_cast<unsigned int>(mMeshCount);
if (scene->mNumMeshes != 0) {
scene->mMeshes = new aiMesh *[scene->mNumMeshes]();
for (auto &it : mResourcesDictionnary) {
if (it.second->getType() == ResourceType::RT_Object) {
Object *obj = static_cast<Object *>(it.second);
ai_assert(nullptr != obj);
for (unsigned int i = 0; i < obj->mMeshes.size(); ++i) {
scene->mMeshes[obj->mMeshIndex[i]] = obj->mMeshes[i];
}
}
}
}
}
void XmlSerializer::addObjectToNode(aiNode *parent, Object *obj, aiMatrix4x4 nodeTransform) {
ai_assert(nullptr != obj);
aiNode *sceneNode = new aiNode(obj->mName);
sceneNode->mNumMeshes = static_cast<unsigned int>(obj->mMeshes.size());
sceneNode->mMeshes = new unsigned int[sceneNode->mNumMeshes];
std::copy(obj->mMeshIndex.begin(), obj->mMeshIndex.end(), sceneNode->mMeshes);
sceneNode->mTransformation = nodeTransform;
if (nullptr != parent) {
parent->addChildren(1, &sceneNode);
}
for (Assimp::D3MF::Component c : obj->mComponents) {
auto it = mResourcesDictionnary.find(c.mObjectId);
if (it != mResourcesDictionnary.end() && it->second->getType() == ResourceType::RT_Object) {
addObjectToNode(sceneNode, static_cast<Object *>(it->second), c.mTransformation);
}
}
}
void XmlSerializer::ReadObject(XmlNode &node) {
int id = IdNotSet, pid = IdNotSet, pindex = IdNotSet;
bool hasId = getNodeAttribute(node, XmlTag::id, id);
if (!hasId) {
return;
}
bool hasPid = getNodeAttribute(node, XmlTag::pid, pid);
bool hasPindex = getNodeAttribute(node, XmlTag::pindex, pindex);
Object *obj = new Object(id);
for (XmlNode &currentNode : node.children()) {
const std::string currentName = currentNode.name();
if (currentName == D3MF::XmlTag::mesh) {
auto mesh = ReadMesh(currentNode);
mesh->mName.Set(ai_to_string(id));
if (hasPid) {
auto it = mResourcesDictionnary.find(pid);
if (hasPindex && it != mResourcesDictionnary.end()) {
if (it->second->getType() == ResourceType::RT_BaseMaterials) {
BaseMaterials *materials = static_cast<BaseMaterials *>(it->second);
mesh->mMaterialIndex = materials->mMaterialIndex[pindex];
} else if (it->second->getType() == ResourceType::RT_Texture2DGroup) {
Texture2DGroup *group = static_cast<Texture2DGroup *>(it->second);
if (mesh->mTextureCoords[0] == nullptr) {
mesh->mNumUVComponents[0] = 2;
for (unsigned int i = 1; i < AI_MAX_NUMBER_OF_TEXTURECOORDS; ++i) {
mesh->mNumUVComponents[i] = 0;
}
const std::string name = ai_to_string(group->mTexId);
for (size_t i = 0; i < mMaterials.size(); ++i) {
if (name == mMaterials[i]->GetName().C_Str()) {
mesh->mMaterialIndex = static_cast<unsigned int>(i);
}
}
mesh->mTextureCoords[0] = new aiVector3D[mesh->mNumVertices];
for (unsigned int vertex_idx = 0; vertex_idx < mesh->mNumVertices; vertex_idx++) {
mesh->mTextureCoords[0][vertex_idx] =
aiVector3D(group->mTex2dCoords[pindex].x, group->mTex2dCoords[pindex].y, 0.0f);
}
} else {
for (unsigned int vertex_idx = 0; vertex_idx < mesh->mNumVertices; vertex_idx++) {
if (mesh->mTextureCoords[0][vertex_idx].z < 0) {
// use default
mesh->mTextureCoords[0][vertex_idx] =
aiVector3D(group->mTex2dCoords[pindex].x, group->mTex2dCoords[pindex].y, 0.0f);
}
}
}
}else if (it->second->getType() == ResourceType::RT_ColorGroup) {
if (mesh->mColors[0] == nullptr) {
mesh->mColors[0] = new aiColor4D[mesh->mNumVertices];
ColorGroup *group = static_cast<ColorGroup *>(it->second);
for (unsigned int vertex_idx = 0; vertex_idx < mesh->mNumVertices; vertex_idx++) {
mesh->mColors[0][vertex_idx] = group->mColors[pindex];
}
}
}
}
}
obj->mMeshes.push_back(mesh);
obj->mMeshIndex.push_back(mMeshCount);
mMeshCount++;
} else if (currentName == D3MF::XmlTag::components) {
for (XmlNode &currentSubNode : currentNode.children()) {
const std::string subNodeName = currentSubNode.name();
if (subNodeName == D3MF::XmlTag::component) {
int objectId = IdNotSet;
std::string componentTransformStr;
aiMatrix4x4 componentTransform;
if (getNodeAttribute(currentSubNode, D3MF::XmlTag::transform, componentTransformStr)) {
componentTransform = parseTransformMatrix(componentTransformStr);
}
if (getNodeAttribute(currentSubNode, D3MF::XmlTag::objectid, objectId)) {
obj->mComponents.push_back({ objectId, componentTransform });
}
}
}
}
}
mResourcesDictionnary.insert(std::make_pair(id, obj));
}
aiMesh *XmlSerializer::ReadMesh(XmlNode &node) {
if (node.empty()) {
return nullptr;
}
aiMesh *mesh = new aiMesh();
for (XmlNode &currentNode : node.children()) {
const std::string currentName = currentNode.name();
if (currentName == XmlTag::vertices) {
ImportVertices(currentNode, mesh);
} else if (currentName == XmlTag::triangles) {
ImportTriangles(currentNode, mesh);
}
}
return mesh;
}
void XmlSerializer::ReadMetadata(XmlNode &node) {
pugi::xml_attribute attribute = node.attribute(D3MF::XmlTag::meta_name);
const std::string name = attribute.as_string();
const std::string value = node.value();
if (name.empty()) {
return;
}
MetaEntry entry;
entry.name = name;
entry.value = value;
mMetaData.push_back(entry);
}
void XmlSerializer::ImportVertices(XmlNode &node, aiMesh *mesh) {
ai_assert(nullptr != mesh);
std::vector<aiVector3D> vertices;
for (XmlNode &currentNode : node.children()) {
const std::string currentName = currentNode.name();
if (currentName == XmlTag::vertex) {
vertices.push_back(ReadVertex(currentNode));
}
}
mesh->mNumVertices = static_cast<unsigned int>(vertices.size());
mesh->mVertices = new aiVector3D[mesh->mNumVertices];
std::copy(vertices.begin(), vertices.end(), mesh->mVertices);
}
void XmlSerializer::ImportTriangles(XmlNode &node, aiMesh *mesh) {
std::vector<aiFace> faces;
for (XmlNode &currentNode : node.children()) {
const std::string currentName = currentNode.name();
if (currentName == XmlTag::triangle) {
int pid = IdNotSet;
bool hasPid = getNodeAttribute(currentNode, D3MF::XmlTag::pid, pid);
int pindex[3];
aiFace face = ReadTriangle(currentNode, pindex[0], pindex[1], pindex[2]);
if (hasPid && (pindex[0] != IdNotSet || pindex[1] != IdNotSet || pindex[2] != IdNotSet)) {
auto it = mResourcesDictionnary.find(pid);
if (it != mResourcesDictionnary.end()) {
if (it->second->getType() == ResourceType::RT_BaseMaterials) {
BaseMaterials *baseMaterials = static_cast<BaseMaterials *>(it->second);
auto update_material = [&](int idx) {
if (pindex[idx] != IdNotSet) {
mesh->mMaterialIndex = baseMaterials->mMaterialIndex[pindex[idx]];
}
};
update_material(0);
update_material(1);
update_material(2);
} else if (it->second->getType() == ResourceType::RT_Texture2DGroup) {
// Load texture coordinates into mesh, when any
Texture2DGroup *group = static_cast<Texture2DGroup *>(it->second); // fix bug
if (mesh->mTextureCoords[0] == nullptr) {
mesh->mNumUVComponents[0] = 2;
for (unsigned int i = 1; i < AI_MAX_NUMBER_OF_TEXTURECOORDS; ++i) {
mesh->mNumUVComponents[i] = 0;
}
const std::string name = ai_to_string(group->mTexId);
for (size_t i = 0; i < mMaterials.size(); ++i) {
if (name == mMaterials[i]->GetName().C_Str()) {
mesh->mMaterialIndex = static_cast<unsigned int>(i);
}
}
mesh->mTextureCoords[0] = new aiVector3D[mesh->mNumVertices];
for (unsigned int vertex_index = 0; vertex_index < mesh->mNumVertices; vertex_index++) {
mesh->mTextureCoords[0][vertex_index].z = IdNotSet;//mark not set
}
}
auto update_texture = [&](int idx) {
if (pindex[idx] != IdNotSet) {
size_t vertex_index = face.mIndices[idx];
mesh->mTextureCoords[0][vertex_index] =
aiVector3D(group->mTex2dCoords[pindex[idx]].x, group->mTex2dCoords[pindex[idx]].y, 0.0f);
}
};
update_texture(0);
update_texture(1);
update_texture(2);
} else if (it->second->getType() == ResourceType::RT_ColorGroup) {
// Load vertex color into mesh, when any
ColorGroup *group = static_cast<ColorGroup *>(it->second);
if (mesh->mColors[0] == nullptr) {
mesh->mColors[0] = new aiColor4D[mesh->mNumVertices];
}
auto update_color = [&](int idx) {
if (pindex[idx] != IdNotSet) {
size_t vertex_index = face.mIndices[idx];
mesh->mColors[0][vertex_index] = group->mColors[pindex[idx]];
}
};
update_color(0);
update_color(1);
update_color(2);
}
}
}
faces.push_back(face);
}
}
mesh->mNumFaces = static_cast<unsigned int>(faces.size());
mesh->mFaces = new aiFace[mesh->mNumFaces];
mesh->mPrimitiveTypes = aiPrimitiveType_TRIANGLE;
std::copy(faces.begin(), faces.end(), mesh->mFaces);
}
void XmlSerializer::ReadBaseMaterials(XmlNode &node) {
int id = IdNotSet;
if (getNodeAttribute(node, D3MF::XmlTag::id, id)) {
BaseMaterials *baseMaterials = new BaseMaterials(id);
for (XmlNode &currentNode : node.children()) {
const std::string currentName = currentNode.name();
if (currentName == XmlTag::basematerials_base) {
baseMaterials->mMaterialIndex.push_back(static_cast<unsigned int>(mMaterials.size()));
mMaterials.push_back(readMaterialDef(currentNode, id));
}
}
mResourcesDictionnary.insert(std::make_pair(id, baseMaterials));
}
}
void XmlSerializer::ReadEmbeddecTexture(XmlNode &node) {
if (node.empty()) {
return;
}
std::string value;
EmbeddedTexture *tex2D = nullptr;
if (XmlParser::getStdStrAttribute(node, XmlTag::id, value)) {
tex2D = new EmbeddedTexture(atoi(value.c_str()));
}
if (nullptr == tex2D) {
return;
}
if (XmlParser::getStdStrAttribute(node, XmlTag::path, value)) {
tex2D->mPath = value;
}
if (XmlParser::getStdStrAttribute(node, XmlTag::texture_content_type, value)) {
tex2D->mContentType = value;
}
if (XmlParser::getStdStrAttribute(node, XmlTag::texture_tilestyleu, value)) {
tex2D->mTilestyleU = value;
}
if (XmlParser::getStdStrAttribute(node, XmlTag::texture_tilestylev, value)) {
tex2D->mTilestyleV = value;
}
mEmbeddedTextures.emplace_back(tex2D);
StoreEmbeddedTexture(tex2D);
}
void XmlSerializer::StoreEmbeddedTexture(EmbeddedTexture *tex) {
aiMaterial *mat = new aiMaterial;
aiString s;
s.Set(ai_to_string(tex->mId).c_str());
mat->AddProperty(&s, AI_MATKEY_NAME);
const std::string name = "*" + tex->mPath;
s.Set(name);
mat->AddProperty(&s, AI_MATKEY_TEXTURE_DIFFUSE(0));
aiColor3D col;
mat->AddProperty<aiColor3D>(&col, 1, AI_MATKEY_COLOR_DIFFUSE);
mat->AddProperty<aiColor3D>(&col, 1, AI_MATKEY_COLOR_AMBIENT);
mat->AddProperty<aiColor3D>(&col, 1, AI_MATKEY_COLOR_EMISSIVE);
mat->AddProperty<aiColor3D>(&col, 1, AI_MATKEY_COLOR_SPECULAR);
mMaterials.emplace_back(mat);
}
void XmlSerializer::ReadTextureCoords2D(XmlNode &node, Texture2DGroup *tex2DGroup) {
if (node.empty() || nullptr == tex2DGroup) {
return;
}
int id = IdNotSet;
if (XmlParser::getIntAttribute(node, "texid", id)) {
tex2DGroup->mTexId = id;
}
double value = 0.0;
for (XmlNode currentNode : node.children()) {
const std::string currentName = currentNode.name();
aiVector2D texCoord;
if (currentName == XmlTag::texture_2d_coord) {
XmlParser::getDoubleAttribute(currentNode, XmlTag::texture_cuurd_u, value);
texCoord.x = (ai_real)value;
XmlParser::getDoubleAttribute(currentNode, XmlTag::texture_cuurd_v, value);
texCoord.y = (ai_real)value;
tex2DGroup->mTex2dCoords.push_back(texCoord);
}
}
}
void XmlSerializer::ReadTextureGroup(XmlNode &node) {
if (node.empty()) {
return;
}
int id = IdNotSet;
if (!XmlParser::getIntAttribute(node, XmlTag::id, id)) {
return;
}
Texture2DGroup *group = new Texture2DGroup(id);
ReadTextureCoords2D(node, group);
mResourcesDictionnary.insert(std::make_pair(id, group));
}
aiMaterial *XmlSerializer::readMaterialDef(XmlNode &node, unsigned int basematerialsId) {
aiMaterial *material = new aiMaterial();
material->mNumProperties = 0;
std::string name;
bool hasName = getNodeAttribute(node, D3MF::XmlTag::basematerials_name, name);
std::string stdMaterialName;
const std::string strId(ai_to_string(basematerialsId));
stdMaterialName += "id";
stdMaterialName += strId;
stdMaterialName += "_";
if (hasName) {
stdMaterialName += name;
} else {
stdMaterialName += "basemat_";
stdMaterialName += ai_to_string(mMaterials.size());
}
aiString assimpMaterialName(stdMaterialName);
material->AddProperty(&assimpMaterialName, AI_MATKEY_NAME);
assignDiffuseColor(node, material);
return material;
}
void XmlSerializer::ReadColor(XmlNode &node, ColorGroup *colorGroup) {
if (node.empty() || nullptr == colorGroup) {
return;
}
for (XmlNode currentNode : node.children()) {
const std::string currentName = currentNode.name();
if (currentName == XmlTag::color_item) {
const char *color = currentNode.attribute(XmlTag::color_vaule).as_string();
aiColor4D color_value;
if (parseColor(color, color_value)) {
colorGroup->mColors.push_back(color_value);
}
}
}
}
void XmlSerializer::ReadColorGroup(XmlNode &node) {
if (node.empty()) {
return;
}
int id = IdNotSet;
if (!XmlParser::getIntAttribute(node, XmlTag::id, id)) {
return;
}
ColorGroup *group = new ColorGroup(id);
ReadColor(node, group);
mResourcesDictionnary.insert(std::make_pair(id, group));
}
void XmlSerializer::StoreMaterialsInScene(aiScene *scene) {
if (nullptr == scene) {
return;
}
scene->mNumMaterials = static_cast<unsigned int>(mMaterials.size());
if (scene->mNumMaterials == 0) {
return;
}
scene->mMaterials = new aiMaterial *[scene->mNumMaterials];
for (size_t i = 0; i < mMaterials.size(); ++i) {
scene->mMaterials[i] = mMaterials[i];
}
}
} // namespace D3MF
} // namespace Assimp

View File

@ -0,0 +1,99 @@
/*
Open Asset Import Library (assimp)
----------------------------------------------------------------------
Copyright (c) 2006-2024, 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.
----------------------------------------------------------------------
*/
#pragma once
#include <assimp/XmlParser.h>
#include <assimp/mesh.h>
#include <vector>
#include <map>
struct aiNode;
struct aiMesh;
struct aiMaterial;
namespace Assimp {
namespace D3MF {
class Resource;
class D3MFOpcPackage;
class Object;
class Texture2DGroup;
class EmbeddedTexture;
class ColorGroup;
class XmlSerializer {
public:
XmlSerializer(XmlParser *xmlParser);
~XmlSerializer();
void ImportXml(aiScene *scene);
private:
void addObjectToNode(aiNode *parent, Object *obj, aiMatrix4x4 nodeTransform);
void ReadObject(XmlNode &node);
aiMesh *ReadMesh(XmlNode &node);
void ReadMetadata(XmlNode &node);
void ImportVertices(XmlNode &node, aiMesh *mesh);
void ImportTriangles(XmlNode &node, aiMesh *mesh);
void ReadBaseMaterials(XmlNode &node);
void ReadEmbeddecTexture(XmlNode &node);
void StoreEmbeddedTexture(EmbeddedTexture *tex);
void ReadTextureCoords2D(XmlNode &node, Texture2DGroup *tex2DGroup);
void ReadTextureGroup(XmlNode &node);
aiMaterial *readMaterialDef(XmlNode &node, unsigned int basematerialsId);
void StoreMaterialsInScene(aiScene *scene);
void ReadColorGroup(XmlNode &node);
void ReadColor(XmlNode &node, ColorGroup *colorGroup);
private:
struct MetaEntry {
std::string name;
std::string value;
};
std::vector<MetaEntry> mMetaData;
std::vector<EmbeddedTexture *> mEmbeddedTextures;
std::vector<aiMaterial *> mMaterials;
std::map<unsigned int, Resource *> mResourcesDictionnary;
unsigned int mMeshCount;
XmlParser *mXmlParser;
};
} // namespace D3MF
} // namespace Assimp

View File

@ -3,7 +3,7 @@
Open Asset Import Library (assimp) Open Asset Import Library (assimp)
--------------------------------------------------------------------------- ---------------------------------------------------------------------------
Copyright (c) 2006-2020, assimp team Copyright (c) 2006-2024, assimp team
All rights reserved. All rights reserved.
@ -60,9 +60,9 @@ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
#include <assimp/Importer.hpp> #include <assimp/Importer.hpp>
#include <memory> #include <memory>
using namespace Assimp; namespace Assimp {
static const aiImporterDesc desc = { static constexpr aiImporterDesc desc = {
"AC3D Importer", "AC3D Importer",
"", "",
"", "",
@ -77,8 +77,8 @@ static const aiImporterDesc desc = {
// ------------------------------------------------------------------------------------------------ // ------------------------------------------------------------------------------------------------
// skip to the next token // skip to the next token
inline const char *AcSkipToNextToken(const char *buffer) { inline const char *AcSkipToNextToken(const char *buffer, const char *end) {
if (!SkipSpaces(&buffer)) { if (!SkipSpaces(&buffer, end)) {
ASSIMP_LOG_ERROR("AC3D: Unexpected EOF/EOL"); ASSIMP_LOG_ERROR("AC3D: Unexpected EOF/EOL");
} }
return buffer; return buffer;
@ -86,13 +86,13 @@ inline const char *AcSkipToNextToken(const char *buffer) {
// ------------------------------------------------------------------------------------------------ // ------------------------------------------------------------------------------------------------
// read a string (may be enclosed in double quotation marks). buffer must point to " // read a string (may be enclosed in double quotation marks). buffer must point to "
inline const char *AcGetString(const char *buffer, std::string &out) { inline const char *AcGetString(const char *buffer, const char *end, std::string &out) {
if (*buffer == '\0') { if (*buffer == '\0') {
throw DeadlyImportError("AC3D: Unexpected EOF in string"); throw DeadlyImportError("AC3D: Unexpected EOF in string");
} }
++buffer; ++buffer;
const char *sz = buffer; const char *sz = buffer;
while ('\"' != *buffer) { while ('\"' != *buffer && buffer != end) {
if (IsLineEnd(*buffer)) { if (IsLineEnd(*buffer)) {
ASSIMP_LOG_ERROR("AC3D: Unexpected EOF/EOL in string"); ASSIMP_LOG_ERROR("AC3D: Unexpected EOF/EOL in string");
out = "ERROR"; out = "ERROR";
@ -112,17 +112,17 @@ inline const char *AcGetString(const char *buffer, std::string &out) {
// ------------------------------------------------------------------------------------------------ // ------------------------------------------------------------------------------------------------
// read 1 to n floats prefixed with an optional predefined identifier // read 1 to n floats prefixed with an optional predefined identifier
template <class T> template <class T>
inline const char *TAcCheckedLoadFloatArray(const char *buffer, const char *name, size_t name_length, size_t num, T *out) { inline const char *TAcCheckedLoadFloatArray(const char *buffer, const char *end, const char *name, size_t name_length, size_t num, T *out) {
buffer = AcSkipToNextToken(buffer); buffer = AcSkipToNextToken(buffer, end);
if (0 != name_length) { if (0 != name_length) {
if (0 != strncmp(buffer, name, name_length) || !IsSpace(buffer[name_length])) { if (0 != strncmp(buffer, name, name_length) || !IsSpace(buffer[name_length])) {
ASSIMP_LOG_ERROR("AC3D: Unexpexted token. " + std::string(name) + " was expected."); ASSIMP_LOG_ERROR("AC3D: Unexpected token. ", name, " was expected.");
return buffer; return buffer;
} }
buffer += name_length + 1; buffer += name_length + 1;
} }
for (unsigned int _i = 0; _i < num; ++_i) { for (unsigned int _i = 0; _i < num; ++_i) {
buffer = AcSkipToNextToken(buffer); buffer = AcSkipToNextToken(buffer, end);
buffer = fast_atoreal_move<float>(buffer, ((float *)out)[_i]); buffer = fast_atoreal_move<float>(buffer, ((float *)out)[_i]);
} }
@ -132,7 +132,7 @@ inline const char *TAcCheckedLoadFloatArray(const char *buffer, const char *name
// ------------------------------------------------------------------------------------------------ // ------------------------------------------------------------------------------------------------
// Constructor to be privately used by Importer // Constructor to be privately used by Importer
AC3DImporter::AC3DImporter() : AC3DImporter::AC3DImporter() :
buffer(), mBuffer(),
configSplitBFCull(), configSplitBFCull(),
configEvalSubdivision(), configEvalSubdivision(),
mNumMeshes(), mNumMeshes(),
@ -146,24 +146,13 @@ AC3DImporter::AC3DImporter() :
// ------------------------------------------------------------------------------------------------ // ------------------------------------------------------------------------------------------------
// Destructor, private as well // Destructor, private as well
AC3DImporter::~AC3DImporter() { AC3DImporter::~AC3DImporter() = default;
// nothing to be done here
}
// ------------------------------------------------------------------------------------------------ // ------------------------------------------------------------------------------------------------
// Returns whether the class can handle the format of the given file. // Returns whether the class can handle the format of the given file.
bool AC3DImporter::CanRead(const std::string &pFile, IOSystem *pIOHandler, bool checkSig) const { bool AC3DImporter::CanRead(const std::string &pFile, IOSystem *pIOHandler, bool /*checkSig*/) const {
std::string extension = GetExtension(pFile); static const uint32_t tokens[] = { AI_MAKE_MAGIC("AC3D") };
return CheckMagicToken(pIOHandler, pFile, tokens, AI_COUNT_OF(tokens));
// fixme: are acc and ac3d *really* used? Some sources say they are
if (extension == "ac" || extension == "ac3d" || extension == "acc") {
return true;
}
if (!extension.length() || checkSig) {
uint32_t token = AI_MAKE_MAGIC("AC3D");
return CheckMagicToken(pIOHandler, pFile, &token, 1, 0);
}
return false;
} }
// ------------------------------------------------------------------------------------------------ // ------------------------------------------------------------------------------------------------
@ -175,25 +164,25 @@ const aiImporterDesc *AC3DImporter::GetInfo() const {
// ------------------------------------------------------------------------------------------------ // ------------------------------------------------------------------------------------------------
// Get a pointer to the next line from the file // Get a pointer to the next line from the file
bool AC3DImporter::GetNextLine() { bool AC3DImporter::GetNextLine() {
SkipLine(&buffer); SkipLine(&mBuffer.data, mBuffer.end);
return SkipSpaces(&buffer); return SkipSpaces(&mBuffer.data, mBuffer.end);
} }
// ------------------------------------------------------------------------------------------------ // ------------------------------------------------------------------------------------------------
// Parse an object section in an AC file // Parse an object section in an AC file
void AC3DImporter::LoadObjectSection(std::vector<Object> &objects) { bool AC3DImporter::LoadObjectSection(std::vector<Object> &objects) {
if (!TokenMatch(buffer, "OBJECT", 6)) if (!TokenMatch(mBuffer.data, "OBJECT", 6))
return; return false;
SkipSpaces(&buffer); SkipSpaces(&mBuffer.data, mBuffer.end);
++mNumMeshes; ++mNumMeshes;
objects.push_back(Object()); objects.emplace_back();
Object &obj = objects.back(); Object &obj = objects.back();
aiLight *light = nullptr; aiLight *light = nullptr;
if (!ASSIMP_strincmp(buffer, "light", 5)) { if (!ASSIMP_strincmp(mBuffer.data, "light", 5)) {
// This is a light source. Add it to the list // This is a light source. Add it to the list
mLights->push_back(light = new aiLight()); mLights->push_back(light = new aiLight());
@ -204,65 +193,71 @@ void AC3DImporter::LoadObjectSection(std::vector<Object> &objects) {
// Generate a default name for both the light source and the node // Generate a default name for both the light source and the node
// FIXME - what's the right way to print a size_t? Is 'zu' universally available? stick with the safe version. // FIXME - what's the right way to print a size_t? Is 'zu' universally available? stick with the safe version.
light->mName.length = ::ai_snprintf(light->mName.data, MAXLEN, "ACLight_%i", static_cast<unsigned int>(mLights->size()) - 1); light->mName.length = ::ai_snprintf(light->mName.data, AI_MAXLEN, "ACLight_%i", static_cast<unsigned int>(mLights->size()) - 1);
obj.name = std::string(light->mName.data); obj.name = std::string(light->mName.data);
ASSIMP_LOG_VERBOSE_DEBUG("AC3D: Light source encountered"); ASSIMP_LOG_VERBOSE_DEBUG("AC3D: Light source encountered");
obj.type = Object::Light; obj.type = Object::Light;
} else if (!ASSIMP_strincmp(buffer, "group", 5)) { } else if (!ASSIMP_strincmp(mBuffer.data, "group", 5)) {
obj.type = Object::Group; obj.type = Object::Group;
} else if (!ASSIMP_strincmp(buffer, "world", 5)) { } else if (!ASSIMP_strincmp(mBuffer.data, "world", 5)) {
obj.type = Object::World; obj.type = Object::World;
} else } else
obj.type = Object::Poly; obj.type = Object::Poly;
while (GetNextLine()) { while (GetNextLine()) {
if (TokenMatch(buffer, "kids", 4)) { if (TokenMatch(mBuffer.data, "kids", 4)) {
SkipSpaces(&buffer); SkipSpaces(&mBuffer.data, mBuffer.end);
unsigned int num = strtoul10(buffer, &buffer); unsigned int num = strtoul10(mBuffer.data, &mBuffer.data);
GetNextLine(); GetNextLine();
if (num) { if (num) {
// load the children of this object recursively // load the children of this object recursively
obj.children.reserve(num); obj.children.reserve(num);
for (unsigned int i = 0; i < num; ++i) for (unsigned int i = 0; i < num; ++i) {
LoadObjectSection(obj.children); if (!LoadObjectSection(obj.children)) {
ASSIMP_LOG_WARN("AC3D: wrong number of kids");
break;
}
}
} }
return; return true;
} else if (TokenMatch(buffer, "name", 4)) { } else if (TokenMatch(mBuffer.data, "name", 4)) {
SkipSpaces(&buffer); SkipSpaces(&mBuffer.data, mBuffer.data);
buffer = AcGetString(buffer, obj.name); mBuffer.data = AcGetString(mBuffer.data, mBuffer.end, obj.name);
// If this is a light source, we'll also need to store // If this is a light source, we'll also need to store
// the name of the node in it. // the name of the node in it.
if (light) { if (light) {
light->mName.Set(obj.name); light->mName.Set(obj.name);
} }
} else if (TokenMatch(buffer, "texture", 7)) { } else if (TokenMatch(mBuffer.data, "texture", 7)) {
SkipSpaces(&buffer); SkipSpaces(&mBuffer.data, mBuffer.end);
buffer = AcGetString(buffer, obj.texture); std::string texture;
} else if (TokenMatch(buffer, "texrep", 6)) { mBuffer.data = AcGetString(mBuffer.data, mBuffer.end, texture);
SkipSpaces(&buffer); obj.textures.push_back(texture);
buffer = TAcCheckedLoadFloatArray(buffer, "", 0, 2, &obj.texRepeat); } else if (TokenMatch(mBuffer.data, "texrep", 6)) {
SkipSpaces(&mBuffer.data, mBuffer.end);
mBuffer.data = TAcCheckedLoadFloatArray(mBuffer.data, mBuffer.end, "", 0, 2, &obj.texRepeat);
if (!obj.texRepeat.x || !obj.texRepeat.y) if (!obj.texRepeat.x || !obj.texRepeat.y)
obj.texRepeat = aiVector2D(1.f, 1.f); obj.texRepeat = aiVector2D(1.f, 1.f);
} else if (TokenMatch(buffer, "texoff", 6)) { } else if (TokenMatch(mBuffer.data, "texoff", 6)) {
SkipSpaces(&buffer); SkipSpaces(&mBuffer.data, mBuffer.end);
buffer = TAcCheckedLoadFloatArray(buffer, "", 0, 2, &obj.texOffset); mBuffer.data = TAcCheckedLoadFloatArray(mBuffer.data, mBuffer.end, "", 0, 2, &obj.texOffset);
} else if (TokenMatch(buffer, "rot", 3)) { } else if (TokenMatch(mBuffer.data, "rot", 3)) {
SkipSpaces(&buffer); SkipSpaces(&mBuffer.data, mBuffer.end);
buffer = TAcCheckedLoadFloatArray(buffer, "", 0, 9, &obj.rotation); mBuffer.data = TAcCheckedLoadFloatArray(mBuffer.data, mBuffer.end, "", 0, 9, &obj.rotation);
} else if (TokenMatch(buffer, "loc", 3)) { } else if (TokenMatch(mBuffer.data, "loc", 3)) {
SkipSpaces(&buffer); SkipSpaces(&mBuffer.data, mBuffer.end);
buffer = TAcCheckedLoadFloatArray(buffer, "", 0, 3, &obj.translation); mBuffer.data = TAcCheckedLoadFloatArray(mBuffer.data, mBuffer.end, "", 0, 3, &obj.translation);
} else if (TokenMatch(buffer, "subdiv", 6)) { } else if (TokenMatch(mBuffer.data, "subdiv", 6)) {
SkipSpaces(&buffer); SkipSpaces(&mBuffer.data, mBuffer.end);
obj.subDiv = strtoul10(buffer, &buffer); obj.subDiv = strtoul10(mBuffer.data, &mBuffer.data);
} else if (TokenMatch(buffer, "crease", 6)) { } else if (TokenMatch(mBuffer.data, "crease", 6)) {
SkipSpaces(&buffer); SkipSpaces(&mBuffer.data, mBuffer.end);
obj.crease = fast_atof(buffer); obj.crease = fast_atof(mBuffer.data);
} else if (TokenMatch(buffer, "numvert", 7)) { } else if (TokenMatch(mBuffer.data, "numvert", 7)) {
SkipSpaces(&buffer); SkipSpaces(&mBuffer.data, mBuffer.end);
unsigned int t = strtoul10(buffer, &buffer); unsigned int t = strtoul10(mBuffer.data, &mBuffer.data);
if (t >= AI_MAX_ALLOC(aiVector3D)) { if (t >= AI_MAX_ALLOC(aiVector3D)) {
throw DeadlyImportError("AC3D: Too many vertices, would run out of memory"); throw DeadlyImportError("AC3D: Too many vertices, would run out of memory");
} }
@ -271,59 +266,59 @@ void AC3DImporter::LoadObjectSection(std::vector<Object> &objects) {
if (!GetNextLine()) { if (!GetNextLine()) {
ASSIMP_LOG_ERROR("AC3D: Unexpected EOF: not all vertices have been parsed yet"); ASSIMP_LOG_ERROR("AC3D: Unexpected EOF: not all vertices have been parsed yet");
break; break;
} else if (!IsNumeric(*buffer)) { } else if (!IsNumeric(*mBuffer.data)) {
ASSIMP_LOG_ERROR("AC3D: Unexpected token: not all vertices have been parsed yet"); ASSIMP_LOG_ERROR("AC3D: Unexpected token: not all vertices have been parsed yet");
--buffer; // make sure the line is processed a second time --mBuffer.data; // make sure the line is processed a second time
break; break;
} }
obj.vertices.push_back(aiVector3D()); obj.vertices.emplace_back();
aiVector3D &v = obj.vertices.back(); aiVector3D &v = obj.vertices.back();
buffer = TAcCheckedLoadFloatArray(buffer, "", 0, 3, &v.x); mBuffer.data = TAcCheckedLoadFloatArray(mBuffer.data, mBuffer.end, "", 0, 3, &v.x);
} }
} else if (TokenMatch(buffer, "numsurf", 7)) { } else if (TokenMatch(mBuffer.data, "numsurf", 7)) {
SkipSpaces(&buffer); SkipSpaces(&mBuffer.data, mBuffer.end);
bool Q3DWorkAround = false; bool Q3DWorkAround = false;
const unsigned int t = strtoul10(buffer, &buffer); const unsigned int t = strtoul10(mBuffer.data, &mBuffer.data);
obj.surfaces.reserve(t); obj.surfaces.reserve(t);
for (unsigned int i = 0; i < t; ++i) { for (unsigned int i = 0; i < t; ++i) {
GetNextLine(); GetNextLine();
if (!TokenMatch(buffer, "SURF", 4)) { if (!TokenMatch(mBuffer.data, "SURF", 4)) {
// FIX: this can occur for some files - Quick 3D for // FIX: this can occur for some files - Quick 3D for
// example writes no surf chunks // example writes no surf chunks
if (!Q3DWorkAround) { if (!Q3DWorkAround) {
ASSIMP_LOG_WARN("AC3D: SURF token was expected"); ASSIMP_LOG_WARN("AC3D: SURF token was expected");
ASSIMP_LOG_VERBOSE_DEBUG("Continuing with Quick3D Workaround enabled"); ASSIMP_LOG_VERBOSE_DEBUG("Continuing with Quick3D Workaround enabled");
} }
--buffer; // make sure the line is processed a second time --mBuffer.data; // make sure the line is processed a second time
// break; --- see fix notes above // break; --- see fix notes above
Q3DWorkAround = true; Q3DWorkAround = true;
} }
SkipSpaces(&buffer); SkipSpaces(&mBuffer.data, mBuffer.end);
obj.surfaces.push_back(Surface()); obj.surfaces.emplace_back();
Surface &surf = obj.surfaces.back(); Surface &surf = obj.surfaces.back();
surf.flags = strtoul_cppstyle(buffer); surf.flags = strtoul_cppstyle(mBuffer.data);
while (1) { while (true) {
if (!GetNextLine()) { if (!GetNextLine()) {
throw DeadlyImportError("AC3D: Unexpected EOF: surface is incomplete"); throw DeadlyImportError("AC3D: Unexpected EOF: surface is incomplete");
} }
if (TokenMatch(buffer, "mat", 3)) { if (TokenMatch(mBuffer.data, "mat", 3)) {
SkipSpaces(&buffer); SkipSpaces(&mBuffer.data, mBuffer.end);
surf.mat = strtoul10(buffer); surf.mat = strtoul10(mBuffer.data);
} else if (TokenMatch(buffer, "refs", 4)) { } else if (TokenMatch(mBuffer.data, "refs", 4)) {
// --- see fix notes above // --- see fix notes above
if (Q3DWorkAround) { if (Q3DWorkAround) {
if (!surf.entries.empty()) { if (!surf.entries.empty()) {
buffer -= 6; mBuffer.data -= 6;
break; break;
} }
} }
SkipSpaces(&buffer); SkipSpaces(&mBuffer.data, mBuffer.end);
const unsigned int m = strtoul10(buffer); const unsigned int m = strtoul10(mBuffer.data);
surf.entries.reserve(m); surf.entries.reserve(m);
obj.numRefs += m; obj.numRefs += m;
@ -333,15 +328,15 @@ void AC3DImporter::LoadObjectSection(std::vector<Object> &objects) {
ASSIMP_LOG_ERROR("AC3D: Unexpected EOF: surface references are incomplete"); ASSIMP_LOG_ERROR("AC3D: Unexpected EOF: surface references are incomplete");
break; break;
} }
surf.entries.push_back(Surface::SurfaceEntry()); surf.entries.emplace_back();
Surface::SurfaceEntry &entry = surf.entries.back(); Surface::SurfaceEntry &entry = surf.entries.back();
entry.first = strtoul10(buffer, &buffer); entry.first = strtoul10(mBuffer.data, &mBuffer.data);
SkipSpaces(&buffer); SkipSpaces(&mBuffer.data, mBuffer.end);
buffer = TAcCheckedLoadFloatArray(buffer, "", 0, 2, &entry.second); mBuffer.data = TAcCheckedLoadFloatArray(mBuffer.data, mBuffer.end, "", 0, 2, &entry.second);
} }
} else { } else {
--buffer; // make sure the line is processed a second time --mBuffer.data; // make sure the line is processed a second time
break; break;
} }
} }
@ -349,6 +344,7 @@ void AC3DImporter::LoadObjectSection(std::vector<Object> &objects) {
} }
} }
ASSIMP_LOG_ERROR("AC3D: Unexpected EOF: \'kids\' line was expected"); ASSIMP_LOG_ERROR("AC3D: Unexpected EOF: \'kids\' line was expected");
return false;
} }
// ------------------------------------------------------------------------------------------------ // ------------------------------------------------------------------------------------------------
@ -362,8 +358,8 @@ void AC3DImporter::ConvertMaterial(const Object &object,
s.Set(matSrc.name); s.Set(matSrc.name);
matDest.AddProperty(&s, AI_MATKEY_NAME); matDest.AddProperty(&s, AI_MATKEY_NAME);
} }
if (object.texture.length()) { if (!object.textures.empty()) {
s.Set(object.texture); s.Set(object.textures[0]);
matDest.AddProperty(&s, AI_MATKEY_TEXTURE_DIFFUSE(0)); matDest.AddProperty(&s, AI_MATKEY_TEXTURE_DIFFUSE(0));
// UV transformation // UV transformation
@ -454,7 +450,7 @@ aiNode *AC3DImporter::ConvertObjectSection(Object &object,
idx = 0; idx = 0;
} }
if ((*it).entries.empty()) { if ((*it).entries.empty()) {
ASSIMP_LOG_WARN("AC3D: surface her zero vertex references"); ASSIMP_LOG_WARN("AC3D: surface has zero vertex references");
} }
// validate all vertex indices to make sure we won't crash here // validate all vertex indices to make sure we won't crash here
@ -471,26 +467,32 @@ aiNode *AC3DImporter::ConvertObjectSection(Object &object,
++node->mNumMeshes; ++node->mNumMeshes;
} }
switch ((*it).flags & 0xf) { switch ((*it).GetType()) {
// closed line case Surface::ClosedLine: // closed line
case 0x1: needMat[idx].first += static_cast<unsigned int>((*it).entries.size());
needMat[idx].first += (unsigned int)(*it).entries.size(); needMat[idx].second += static_cast<unsigned int>((*it).entries.size() << 1u);
needMat[idx].second += (unsigned int)(*it).entries.size() << 1u;
break; break;
// unclosed line // unclosed line
case 0x2: case Surface::OpenLine:
needMat[idx].first += (unsigned int)(*it).entries.size() - 1; needMat[idx].first += static_cast<unsigned int>((*it).entries.size() - 1);
needMat[idx].second += ((unsigned int)(*it).entries.size() - 1) << 1u; needMat[idx].second += static_cast<unsigned int>(((*it).entries.size() - 1) << 1u);
break; break;
// 0 == polygon, else unknown // triangle strip
default: case Surface::TriangleStrip:
if ((*it).flags & 0xf) { needMat[idx].first += (unsigned int)(*it).entries.size() - 2;
ASSIMP_LOG_WARN("AC3D: The type flag of a surface is unknown"); needMat[idx].second += ((unsigned int)(*it).entries.size() - 2) * 3;
(*it).flags &= ~(0xf); break;
}
default:
// Coerce unknowns to a polygon and warn
ASSIMP_LOG_WARN("AC3D: The type flag of a surface is unknown: ", (*it).flags);
(*it).flags &= ~(Surface::Mask);
// fallthrough
// polygon
case Surface::Polygon:
// the number of faces increments by one, the number // the number of faces increments by one, the number
// of vertices by surface.numref. // of vertices by surface.numref.
needMat[idx].first++; needMat[idx].first++;
@ -536,7 +538,7 @@ aiNode *AC3DImporter::ConvertObjectSection(Object &object,
// allocate UV coordinates, but only if the texture name for the // allocate UV coordinates, but only if the texture name for the
// surface is not empty // surface is not empty
aiVector3D *uv = nullptr; aiVector3D *uv = nullptr;
if (object.texture.length()) { if (!object.textures.empty()) {
uv = mesh->mTextureCoords[0] = new aiVector3D[mesh->mNumVertices]; uv = mesh->mTextureCoords[0] = new aiVector3D[mesh->mNumVertices];
mesh->mNumUVComponents[0] = 2; mesh->mNumUVComponents[0] = 2;
} }
@ -546,8 +548,8 @@ aiNode *AC3DImporter::ConvertObjectSection(Object &object,
const Surface &src = *it; const Surface &src = *it;
// closed polygon // closed polygon
unsigned int type = (*it).flags & 0xf; uint8_t type = (*it).GetType();
if (!type) { if (type == Surface::Polygon) {
aiFace &face = *faces++; aiFace &face = *faces++;
face.mNumIndices = (unsigned int)src.entries.size(); face.mNumIndices = (unsigned int)src.entries.size();
if (0 != face.mNumIndices) { if (0 != face.mNumIndices) {
@ -570,13 +572,62 @@ aiNode *AC3DImporter::ConvertObjectSection(Object &object,
} }
} }
} }
} else if (type == Surface::TriangleStrip) {
for (unsigned int i = 0; i < (unsigned int)src.entries.size() - 2; ++i) {
const Surface::SurfaceEntry &entry1 = src.entries[i];
const Surface::SurfaceEntry &entry2 = src.entries[i + 1];
const Surface::SurfaceEntry &entry3 = src.entries[i + 2];
aiFace &face = *faces++;
face.mNumIndices = 3;
face.mIndices = new unsigned int[face.mNumIndices];
face.mIndices[0] = cur++;
face.mIndices[1] = cur++;
face.mIndices[2] = cur++;
if (!(i & 1)) {
*vertices++ = object.vertices[entry1.first] + object.translation;
if (uv) {
uv->x = entry1.second.x;
uv->y = entry1.second.y;
++uv;
}
*vertices++ = object.vertices[entry2.first] + object.translation;
if (uv) {
uv->x = entry2.second.x;
uv->y = entry2.second.y;
++uv;
}
} else {
*vertices++ = object.vertices[entry2.first] + object.translation;
if (uv) {
uv->x = entry2.second.x;
uv->y = entry2.second.y;
++uv;
}
*vertices++ = object.vertices[entry1.first] + object.translation;
if (uv) {
uv->x = entry1.second.x;
uv->y = entry1.second.y;
++uv;
}
}
if (static_cast<unsigned>(vertices - mesh->mVertices) >= mesh->mNumVertices) {
throw DeadlyImportError("AC3D: Invalid number of vertices");
}
*vertices++ = object.vertices[entry3.first] + object.translation;
if (uv) {
uv->x = entry3.second.x;
uv->y = entry3.second.y;
++uv;
}
}
} else { } else {
it2 = (*it).entries.begin(); it2 = (*it).entries.begin();
// either a closed or an unclosed line // either a closed or an unclosed line
unsigned int tmp = (unsigned int)(*it).entries.size(); unsigned int tmp = (unsigned int)(*it).entries.size();
if (0x2 == type) --tmp; if (Surface::OpenLine == type) --tmp;
for (unsigned int m = 0; m < tmp; ++m) { for (unsigned int m = 0; m < tmp; ++m) {
aiFace &face = *faces++; aiFace &face = *faces++;
@ -599,7 +650,7 @@ aiNode *AC3DImporter::ConvertObjectSection(Object &object,
++uv; ++uv;
} }
if (0x1 == type && tmp - 1 == m) { if (Surface::ClosedLine == type && tmp - 1 == m) {
// if this is a closed line repeat its beginning now // if this is a closed line repeat its beginning now
it2 = (*it).entries.begin(); it2 = (*it).entries.begin();
} else } else
@ -625,15 +676,15 @@ aiNode *AC3DImporter::ConvertObjectSection(Object &object,
if (object.subDiv) { if (object.subDiv) {
if (configEvalSubdivision) { if (configEvalSubdivision) {
std::unique_ptr<Subdivider> div(Subdivider::Create(Subdivider::CATMULL_CLARKE)); std::unique_ptr<Subdivider> div(Subdivider::Create(Subdivider::CATMULL_CLARKE));
ASSIMP_LOG_INFO("AC3D: Evaluating subdivision surface: " + object.name); ASSIMP_LOG_INFO("AC3D: Evaluating subdivision surface: ", object.name);
std::vector<aiMesh *> cpy(meshes.size() - oldm, NULL); std::vector<aiMesh *> cpy(meshes.size() - oldm, nullptr);
div->Subdivide(&meshes[oldm], cpy.size(), &cpy.front(), object.subDiv, true); div->Subdivide(&meshes[oldm], cpy.size(), &cpy.front(), object.subDiv, true);
std::copy(cpy.begin(), cpy.end(), meshes.begin() + oldm); std::copy(cpy.begin(), cpy.end(), meshes.begin() + oldm);
// previous meshes are deleted vy Subdivide(). // previous meshes are deleted vy Subdivide().
} else { } else {
ASSIMP_LOG_INFO("AC3D: Letting the subdivision surface untouched due to my configuration: " + object.name); ASSIMP_LOG_INFO("AC3D: Letting the subdivision surface untouched due to my configuration: ", object.name);
} }
} }
} }
@ -645,18 +696,18 @@ aiNode *AC3DImporter::ConvertObjectSection(Object &object,
// generate a name depending on the type of the node // generate a name depending on the type of the node
switch (object.type) { switch (object.type) {
case Object::Group: case Object::Group:
node->mName.length = ::ai_snprintf(node->mName.data, MAXLEN, "ACGroup_%i", mGroupsCounter++); node->mName.length = ::ai_snprintf(node->mName.data, AI_MAXLEN, "ACGroup_%i", mGroupsCounter++);
break; break;
case Object::Poly: case Object::Poly:
node->mName.length = ::ai_snprintf(node->mName.data, MAXLEN, "ACPoly_%i", mPolysCounter++); node->mName.length = ::ai_snprintf(node->mName.data, AI_MAXLEN, "ACPoly_%i", mPolysCounter++);
break; break;
case Object::Light: case Object::Light:
node->mName.length = ::ai_snprintf(node->mName.data, MAXLEN, "ACLight_%i", mLightsCounter++); node->mName.length = ::ai_snprintf(node->mName.data, AI_MAXLEN, "ACLight_%i", mLightsCounter++);
break; break;
// there shouldn't be more than one world, but we don't care // there shouldn't be more than one world, but we don't care
case Object::World: case Object::World:
node->mName.length = ::ai_snprintf(node->mName.data, MAXLEN, "ACWorld_%i", mWorldsCounter++); node->mName.length = ::ai_snprintf(node->mName.data, AI_MAXLEN, "ACWorld_%i", mWorldsCounter++);
break; break;
} }
} }
@ -696,28 +747,29 @@ void AC3DImporter::InternReadFile(const std::string &pFile,
std::unique_ptr<IOStream> file(pIOHandler->Open(pFile, "rb")); std::unique_ptr<IOStream> file(pIOHandler->Open(pFile, "rb"));
// Check whether we can read from the file // Check whether we can read from the file
if (file.get() == nullptr) { if (file == nullptr) {
throw DeadlyImportError("Failed to open AC3D file " + pFile + "."); throw DeadlyImportError("Failed to open AC3D file ", pFile, ".");
} }
// allocate storage and copy the contents of the file to a memory buffer // allocate storage and copy the contents of the file to a memory buffer
std::vector<char> mBuffer2; std::vector<char> mBuffer2;
TextFileToBuffer(file.get(), mBuffer2); TextFileToBuffer(file.get(), mBuffer2);
buffer = &mBuffer2[0]; mBuffer.data = &mBuffer2[0];
mBuffer.end = &mBuffer2[0] + mBuffer2.size();
mNumMeshes = 0; mNumMeshes = 0;
mLightsCounter = mPolysCounter = mWorldsCounter = mGroupsCounter = 0; mLightsCounter = mPolysCounter = mWorldsCounter = mGroupsCounter = 0;
if (::strncmp(buffer, "AC3D", 4)) { if (::strncmp(mBuffer.data, "AC3D", 4)) {
throw DeadlyImportError("AC3D: No valid AC3D file, magic sequence not found"); throw DeadlyImportError("AC3D: No valid AC3D file, magic sequence not found");
} }
// print the file format version to the console // print the file format version to the console
unsigned int version = HexDigitToDecimal(buffer[4]); unsigned int version = HexDigitToDecimal(mBuffer.data[4]);
char msg[3]; char msg[3];
ASSIMP_itoa10(msg, 3, version); ASSIMP_itoa10(msg, 3, version);
ASSIMP_LOG_INFO_F("AC3D file format version: ", msg); ASSIMP_LOG_INFO("AC3D file format version: ", msg);
std::vector<Material> materials; std::vector<Material> materials;
materials.reserve(5); materials.reserve(5);
@ -729,35 +781,36 @@ void AC3DImporter::InternReadFile(const std::string &pFile,
mLights = &lights; mLights = &lights;
while (GetNextLine()) { while (GetNextLine()) {
if (TokenMatch(buffer, "MATERIAL", 8)) { if (TokenMatch(mBuffer.data, "MATERIAL", 8)) {
materials.push_back(Material()); materials.emplace_back();
Material &mat = materials.back(); Material &mat = materials.back();
// manually parse the material ... sscanf would use the buldin atof ... // manually parse the material ... sscanf would use the buldin atof ...
// Format: (name) rgb %f %f %f amb %f %f %f emis %f %f %f spec %f %f %f shi %d trans %f // Format: (name) rgb %f %f %f amb %f %f %f emis %f %f %f spec %f %f %f shi %d trans %f
buffer = AcSkipToNextToken(buffer); mBuffer.data = AcSkipToNextToken(mBuffer.data, mBuffer.end);
if ('\"' == *buffer) { if ('\"' == *mBuffer.data) {
buffer = AcGetString(buffer, mat.name); mBuffer.data = AcGetString(mBuffer.data, mBuffer.end, mat.name);
buffer = AcSkipToNextToken(buffer); mBuffer.data = AcSkipToNextToken(mBuffer.data, mBuffer.end);
} }
buffer = TAcCheckedLoadFloatArray(buffer, "rgb", 3, 3, &mat.rgb); mBuffer.data = TAcCheckedLoadFloatArray(mBuffer.data, mBuffer.end, "rgb", 3, 3, &mat.rgb);
buffer = TAcCheckedLoadFloatArray(buffer, "amb", 3, 3, &mat.amb); mBuffer.data = TAcCheckedLoadFloatArray(mBuffer.data, mBuffer.end, "amb", 3, 3, &mat.amb);
buffer = TAcCheckedLoadFloatArray(buffer, "emis", 4, 3, &mat.emis); mBuffer.data = TAcCheckedLoadFloatArray(mBuffer.data, mBuffer.end, "emis", 4, 3, &mat.emis);
buffer = TAcCheckedLoadFloatArray(buffer, "spec", 4, 3, &mat.spec); mBuffer.data = TAcCheckedLoadFloatArray(mBuffer.data, mBuffer.end, "spec", 4, 3, &mat.spec);
buffer = TAcCheckedLoadFloatArray(buffer, "shi", 3, 1, &mat.shin); mBuffer.data = TAcCheckedLoadFloatArray(mBuffer.data, mBuffer.end, "shi", 3, 1, &mat.shin);
buffer = TAcCheckedLoadFloatArray(buffer, "trans", 5, 1, &mat.trans); mBuffer.data = TAcCheckedLoadFloatArray(mBuffer.data, mBuffer.end, "trans", 5, 1, &mat.trans);
} else {
LoadObjectSection(rootObjects);
} }
LoadObjectSection(rootObjects);
} }
if (rootObjects.empty() || !mNumMeshes) { if (rootObjects.empty() || mNumMeshes == 0u) {
throw DeadlyImportError("AC3D: No meshes have been loaded"); throw DeadlyImportError("AC3D: No meshes have been loaded");
} }
if (materials.empty()) { if (materials.empty()) {
ASSIMP_LOG_WARN("AC3D: No material has been found"); ASSIMP_LOG_WARN("AC3D: No material has been found");
materials.push_back(Material()); materials.emplace_back();
} }
mNumMeshes += (mNumMeshes >> 2u) + 1; mNumMeshes += (mNumMeshes >> 2u) + 1;
@ -768,7 +821,7 @@ void AC3DImporter::InternReadFile(const std::string &pFile,
materials.reserve(mNumMeshes); materials.reserve(mNumMeshes);
// generate a dummy root if there are multiple objects on the top layer // generate a dummy root if there are multiple objects on the top layer
Object *root; Object *root = nullptr;
if (1 == rootObjects.size()) if (1 == rootObjects.size())
root = &rootObjects[0]; root = &rootObjects[0];
else { else {
@ -781,7 +834,7 @@ void AC3DImporter::InternReadFile(const std::string &pFile,
delete root; delete root;
} }
if (!::strncmp(pScene->mRootNode->mName.data, "Node", 4)) { if (::strncmp(pScene->mRootNode->mName.data, "Node", 4) == 0) {
pScene->mRootNode->mName.Set("<AC3DWorld>"); pScene->mRootNode->mName.Set("<AC3DWorld>");
} }
@ -800,10 +853,12 @@ void AC3DImporter::InternReadFile(const std::string &pFile,
// copy lights // copy lights
pScene->mNumLights = (unsigned int)lights.size(); pScene->mNumLights = (unsigned int)lights.size();
if (lights.size()) { if (!lights.empty()) {
pScene->mLights = new aiLight *[lights.size()]; pScene->mLights = new aiLight *[lights.size()];
::memcpy(pScene->mLights, &lights[0], lights.size() * sizeof(void *)); ::memcpy(pScene->mLights, &lights[0], lights.size() * sizeof(void *));
} }
} }
} // namespace Assimp
#endif //!defined ASSIMP_BUILD_NO_AC_IMPORTER #endif //!defined ASSIMP_BUILD_NO_AC_IMPORTER

View File

@ -2,8 +2,7 @@
Open Asset Import Library (assimp) Open Asset Import Library (assimp)
---------------------------------------------------------------------- ----------------------------------------------------------------------
Copyright (c) 2006-2020, assimp team Copyright (c) 2006-2024, assimp team
All rights reserved. All rights reserved.
@ -64,12 +63,15 @@ namespace Assimp {
class AC3DImporter : public BaseImporter { class AC3DImporter : public BaseImporter {
public: public:
AC3DImporter(); AC3DImporter();
~AC3DImporter(); ~AC3DImporter() override;
// Represents an AC3D material // Represents an AC3D material
struct Material { struct Material {
Material() : Material() :
rgb(0.6f, 0.6f, 0.6f), spec(1.f, 1.f, 1.f), shin(0.f), trans(0.f) {} rgb(0.6f, 0.6f, 0.6f),
spec(1.f, 1.f, 1.f),
shin(0.f),
trans(0.f) {}
// base color of the material // base color of the material
aiColor3D rgb; aiColor3D rgb;
@ -96,18 +98,42 @@ public:
// Represents an AC3D surface // Represents an AC3D surface
struct Surface { struct Surface {
Surface() : Surface() :
mat(0), flags(0) {} mat(0),
flags(0) {}
unsigned int mat, flags; unsigned int mat, flags;
typedef std::pair<unsigned int, aiVector2D> SurfaceEntry; typedef std::pair<unsigned int, aiVector2D> SurfaceEntry;
std::vector<SurfaceEntry> entries; std::vector<SurfaceEntry> entries;
// Type is low nibble of flags
enum Type : uint8_t {
Polygon = 0x0,
ClosedLine = 0x1,
OpenLine = 0x2,
TriangleStrip = 0x4, // ACC extension (TORCS and Speed Dreams)
Mask = 0xf,
};
inline uint8_t GetType() const { return (flags & Mask); }
}; };
// Represents an AC3D object // Represents an AC3D object
struct Object { struct Object {
Object() : Object() :
type(World), name(""), children(), texture(""), texRepeat(1.f, 1.f), texOffset(0.0f, 0.0f), rotation(), translation(), vertices(), surfaces(), numRefs(0), subDiv(0), crease() {} type(World),
name(),
children(),
texRepeat(1.f, 1.f),
texOffset(0.0f, 0.0f),
rotation(),
translation(),
vertices(),
surfaces(),
numRefs(0),
subDiv(0),
crease() {}
// Type description // Type description
enum Type { enum Type {
@ -124,7 +150,8 @@ public:
std::vector<Object> children; std::vector<Object> children;
// texture to be assigned to all surfaces of the object // texture to be assigned to all surfaces of the object
std::string texture; // the .acc format supports up to 4 textures
std::vector<std::string> textures;
// texture repat factors (scaling for all coordinates) // texture repat factors (scaling for all coordinates)
aiVector2D texRepeat, texOffset; aiVector2D texRepeat, texOffset;
@ -158,25 +185,25 @@ public:
* See BaseImporter::CanRead() for details. * See BaseImporter::CanRead() for details.
*/ */
bool CanRead(const std::string &pFile, IOSystem *pIOHandler, bool CanRead(const std::string &pFile, IOSystem *pIOHandler,
bool checkSig) const; bool checkSig) const override;
protected: protected:
// ------------------------------------------------------------------- // -------------------------------------------------------------------
/** Return importer meta information. /** Return importer meta information.
* See #BaseImporter::GetInfo for the details */ * See #BaseImporter::GetInfo for the details */
const aiImporterDesc *GetInfo() const; const aiImporterDesc *GetInfo() const override;
// ------------------------------------------------------------------- // -------------------------------------------------------------------
/** Imports the given file into the given scene structure. /** Imports the given file into the given scene structure.
* See BaseImporter::InternReadFile() for details*/ * See BaseImporter::InternReadFile() for details*/
void InternReadFile(const std::string &pFile, aiScene *pScene, void InternReadFile(const std::string &pFile, aiScene *pScene,
IOSystem *pIOHandler); IOSystem *pIOHandler) override;
// ------------------------------------------------------------------- // -------------------------------------------------------------------
/** Called prior to ReadFile(). /** Called prior to ReadFile().
* The function is a request to the importer to update its configuration * The function is a request to the importer to update its configuration
* basing on the Importer's configuration property list.*/ * basing on the Importer's configuration property list.*/
void SetupProperties(const Importer *pImp); void SetupProperties(const Importer *pImp) override;
private: private:
// ------------------------------------------------------------------- // -------------------------------------------------------------------
@ -189,7 +216,7 @@ private:
* load subobjects, the method returns after a 'kids 0' was * load subobjects, the method returns after a 'kids 0' was
* encountered. * encountered.
* @objects List of output objects*/ * @objects List of output objects*/
void LoadObjectSection(std::vector<Object> &objects); bool LoadObjectSection(std::vector<Object> &objects);
// ------------------------------------------------------------------- // -------------------------------------------------------------------
/** Convert all objects into meshes and nodes. /** Convert all objects into meshes and nodes.
@ -215,7 +242,7 @@ private:
private: private:
// points to the next data line // points to the next data line
const char *buffer; aiBuffer mBuffer;
// Configuration option: if enabled, up to two meshes // Configuration option: if enabled, up to two meshes
// are generated per material: those faces who have // are generated per material: those faces who have

View File

@ -3,9 +3,7 @@
Open Asset Import Library (assimp) Open Asset Import Library (assimp)
--------------------------------------------------------------------------- ---------------------------------------------------------------------------
Copyright (c) 2006-2020, assimp team Copyright (c) 2006-2024, assimp team
All rights reserved. All rights reserved.
@ -41,28 +39,21 @@ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
--------------------------------------------------------------------------- ---------------------------------------------------------------------------
*/ */
/// \file AMFImporter.cpp
/// \brief AMF-format files importer for Assimp: main algorithm implementation.
/// \date 2016
/// \author smal.root@gmail.com
#ifndef ASSIMP_BUILD_NO_AMF_IMPORTER #ifndef ASSIMP_BUILD_NO_AMF_IMPORTER
// Header files, Assimp. // Header files, Assimp.
#include "AMFImporter.hpp" #include "AMFImporter.hpp"
#include "AMFImporter_Macro.hpp"
#include <assimp/DefaultIOSystem.h> #include <assimp/DefaultIOSystem.h>
#include <assimp/fast_atof.h> #include <assimp/fast_atof.h>
#include <assimp/StringUtils.h>
// Header files, stdlib. // Header files, stdlib.
#include <memory> #include <memory>
namespace Assimp { namespace Assimp {
/// \var aiImporterDesc AMFImporter::Description static constexpr aiImporterDesc Description = {
/// Conastant which hold importer description
const aiImporterDesc AMFImporter::Description = {
"Additive manufacturing file format(AMF) Importer", "Additive manufacturing file format(AMF) Importer",
"smalcom", "smalcom",
"", "",
@ -82,7 +73,7 @@ void AMFImporter::Clear() {
mTexture_Converted.clear(); mTexture_Converted.clear();
// Delete all elements // Delete all elements
if (!mNodeElement_List.empty()) { if (!mNodeElement_List.empty()) {
for (CAMFImporter_NodeElement *ne : mNodeElement_List) { for (AMFNodeElementBase *ne : mNodeElement_List) {
delete ne; delete ne;
} }
@ -90,8 +81,14 @@ void AMFImporter::Clear() {
} }
} }
AMFImporter::AMFImporter() AI_NO_EXCEPT :
mNodeElement_Cur(nullptr),
mXmlParser(nullptr) {
// empty
}
AMFImporter::~AMFImporter() { AMFImporter::~AMFImporter() {
if (mReader != nullptr) delete mReader; delete mXmlParser;
// Clear() is accounting if data already is deleted. So, just check again if all data is deleted. // Clear() is accounting if data already is deleted. So, just check again if all data is deleted.
Clear(); Clear();
} }
@ -100,10 +97,12 @@ AMFImporter::~AMFImporter() {
/************************************************************ Functions: find set ************************************************************/ /************************************************************ Functions: find set ************************************************************/
/*********************************************************************************************************************************************/ /*********************************************************************************************************************************************/
bool AMFImporter::Find_NodeElement(const std::string &pID, const CAMFImporter_NodeElement::EType pType, CAMFImporter_NodeElement **pNodeElement) const { bool AMFImporter::Find_NodeElement(const std::string &pID, const AMFNodeElementBase::EType pType, AMFNodeElementBase **pNodeElement) const {
for (CAMFImporter_NodeElement *ne : mNodeElement_List) { for (AMFNodeElementBase *ne : mNodeElement_List) {
if ((ne->ID == pID) && (ne->Type == pType)) { if ((ne->ID == pID) && (ne->Type == pType)) {
if (pNodeElement != nullptr) *pNodeElement = ne; if (pNodeElement != nullptr) {
*pNodeElement = ne;
}
return true; return true;
} }
@ -112,12 +111,13 @@ bool AMFImporter::Find_NodeElement(const std::string &pID, const CAMFImporter_No
return false; return false;
} }
bool AMFImporter::Find_ConvertedNode(const std::string &pID, std::list<aiNode *> &pNodeList, aiNode **pNode) const { bool AMFImporter::Find_ConvertedNode(const std::string &pID, NodeArray &nodeArray, aiNode **pNode) const {
aiString node_name(pID.c_str()); aiString node_name(pID.c_str());
for (aiNode *node : nodeArray) {
for (aiNode *node : pNodeList) {
if (node->mName == node_name) { if (node->mName == node_name) {
if (pNode != nullptr) *pNode = node; if (pNode != nullptr) {
*pNode = node;
}
return true; return true;
} }
@ -129,7 +129,9 @@ bool AMFImporter::Find_ConvertedNode(const std::string &pID, std::list<aiNode *>
bool AMFImporter::Find_ConvertedMaterial(const std::string &pID, const SPP_Material **pConvertedMaterial) const { bool AMFImporter::Find_ConvertedMaterial(const std::string &pID, const SPP_Material **pConvertedMaterial) const {
for (const SPP_Material &mat : mMaterial_Converted) { for (const SPP_Material &mat : mMaterial_Converted) {
if (mat.ID == pID) { if (mat.ID == pID) {
if (pConvertedMaterial != nullptr) *pConvertedMaterial = &mat; if (pConvertedMaterial != nullptr) {
*pConvertedMaterial = &mat;
}
return true; return true;
} }
@ -142,174 +144,42 @@ bool AMFImporter::Find_ConvertedMaterial(const std::string &pID, const SPP_Mater
/************************************************************ Functions: throw set ***********************************************************/ /************************************************************ Functions: throw set ***********************************************************/
/*********************************************************************************************************************************************/ /*********************************************************************************************************************************************/
void AMFImporter::Throw_CloseNotFound(const std::string &pNode) { void AMFImporter::Throw_CloseNotFound(const std::string &nodeName) {
throw DeadlyImportError("Close tag for node <" + pNode + "> not found. Seems file is corrupt."); throw DeadlyImportError("Close tag for node <" + nodeName + "> not found. Seems file is corrupt.");
} }
void AMFImporter::Throw_IncorrectAttr(const std::string &pAttrName) { void AMFImporter::Throw_IncorrectAttr(const std::string &nodeName, const std::string &attrName) {
throw DeadlyImportError("Node <" + std::string(mReader->getNodeName()) + "> has incorrect attribute \"" + pAttrName + "\"."); throw DeadlyImportError("Node <" + nodeName + "> has incorrect attribute \"" + attrName + "\".");
} }
void AMFImporter::Throw_IncorrectAttrValue(const std::string &pAttrName) { void AMFImporter::Throw_IncorrectAttrValue(const std::string &nodeName, const std::string &attrName) {
throw DeadlyImportError("Attribute \"" + pAttrName + "\" in node <" + std::string(mReader->getNodeName()) + "> has incorrect value."); throw DeadlyImportError("Attribute \"" + attrName + "\" in node <" + nodeName + "> has incorrect value.");
} }
void AMFImporter::Throw_MoreThanOnceDefined(const std::string &pNodeType, const std::string &pDescription) { void AMFImporter::Throw_MoreThanOnceDefined(const std::string &nodeName, const std::string &pNodeType, const std::string &pDescription) {
throw DeadlyImportError("\"" + pNodeType + "\" node can be used only once in " + mReader->getNodeName() + ". Description: " + pDescription); throw DeadlyImportError("\"" + pNodeType + "\" node can be used only once in " + nodeName + ". Description: " + pDescription);
} }
void AMFImporter::Throw_ID_NotFound(const std::string &pID) const { void AMFImporter::Throw_ID_NotFound(const std::string &pID) const {
throw DeadlyImportError("Not found node with name \"" + pID + "\"."); throw DeadlyImportError("Not found node with name \"", pID, "\".");
} }
/*********************************************************************************************************************************************/ /*********************************************************************************************************************************************/
/************************************************************* Functions: XML set ************************************************************/ /************************************************************* Functions: XML set ************************************************************/
/*********************************************************************************************************************************************/ /*********************************************************************************************************************************************/
void AMFImporter::XML_CheckNode_MustHaveChildren() { void AMFImporter::XML_CheckNode_MustHaveChildren(pugi::xml_node &node) {
if (mReader->isEmptyElement()) throw DeadlyImportError(std::string("Node <") + mReader->getNodeName() + "> must have children."); if (node.children().begin() == node.children().end()) {
} throw DeadlyImportError(std::string("Node <") + node.name() + "> must have children.");
void AMFImporter::XML_CheckNode_SkipUnsupported(const std::string &pParentNodeName) {
static const size_t Uns_Skip_Len = 3;
const char *Uns_Skip[Uns_Skip_Len] = { "composite", "edge", "normal" };
static bool skipped_before[Uns_Skip_Len] = { false, false, false };
std::string nn(mReader->getNodeName());
bool found = false;
bool close_found = false;
size_t sk_idx;
for (sk_idx = 0; sk_idx < Uns_Skip_Len; sk_idx++) {
if (nn != Uns_Skip[sk_idx]) continue;
found = true;
if (mReader->isEmptyElement()) {
close_found = true;
goto casu_cres;
}
while (mReader->read()) {
if ((mReader->getNodeType() == irr::io::EXN_ELEMENT_END) && (nn == mReader->getNodeName())) {
close_found = true;
goto casu_cres;
}
}
} // for(sk_idx = 0; sk_idx < Uns_Skip_Len; sk_idx++)
casu_cres:
if (!found) throw DeadlyImportError("Unknown node \"" + nn + "\" in " + pParentNodeName + ".");
if (!close_found) Throw_CloseNotFound(nn);
if (!skipped_before[sk_idx]) {
skipped_before[sk_idx] = true;
ASSIMP_LOG_WARN_F("Skipping node \"", nn, "\" in ", pParentNodeName, ".");
} }
} }
bool AMFImporter::XML_SearchNode(const std::string &pNodeName) { bool AMFImporter::XML_SearchNode(const std::string &nodeName) {
while (mReader->read()) { return nullptr != mXmlParser->findNode(nodeName);
if ((mReader->getNodeType() == irr::io::EXN_ELEMENT) && XML_CheckNode_NameEqual(pNodeName)) return true;
}
return false;
}
bool AMFImporter::XML_ReadNode_GetAttrVal_AsBool(const int pAttrIdx) {
std::string val(mReader->getAttributeValue(pAttrIdx));
if ((val == "false") || (val == "0"))
return false;
else if ((val == "true") || (val == "1"))
return true;
else
throw DeadlyImportError("Bool attribute value can contain \"false\"/\"0\" or \"true\"/\"1\" not the \"" + val + "\"");
}
float AMFImporter::XML_ReadNode_GetAttrVal_AsFloat(const int pAttrIdx) {
std::string val;
float tvalf;
ParseHelper_FixTruncatedFloatString(mReader->getAttributeValue(pAttrIdx), val);
fast_atoreal_move(val.c_str(), tvalf, false);
return tvalf;
}
uint32_t AMFImporter::XML_ReadNode_GetAttrVal_AsU32(const int pAttrIdx) {
return strtoul10(mReader->getAttributeValue(pAttrIdx));
}
float AMFImporter::XML_ReadNode_GetVal_AsFloat() {
std::string val;
float tvalf;
if (!mReader->read()) throw DeadlyImportError("XML_ReadNode_GetVal_AsFloat. No data, seems file is corrupt.");
if (mReader->getNodeType() != irr::io::EXN_TEXT) throw DeadlyImportError("XML_ReadNode_GetVal_AsFloat. Invalid type of XML element, seems file is corrupt.");
ParseHelper_FixTruncatedFloatString(mReader->getNodeData(), val);
fast_atoreal_move(val.c_str(), tvalf, false);
return tvalf;
}
uint32_t AMFImporter::XML_ReadNode_GetVal_AsU32() {
if (!mReader->read()) throw DeadlyImportError("XML_ReadNode_GetVal_AsU32. No data, seems file is corrupt.");
if (mReader->getNodeType() != irr::io::EXN_TEXT) throw DeadlyImportError("XML_ReadNode_GetVal_AsU32. Invalid type of XML element, seems file is corrupt.");
return strtoul10(mReader->getNodeData());
}
void AMFImporter::XML_ReadNode_GetVal_AsString(std::string &pValue) {
if (!mReader->read()) throw DeadlyImportError("XML_ReadNode_GetVal_AsString. No data, seems file is corrupt.");
if (mReader->getNodeType() != irr::io::EXN_TEXT)
throw DeadlyImportError("XML_ReadNode_GetVal_AsString. Invalid type of XML element, seems file is corrupt.");
pValue = mReader->getNodeData();
}
/*********************************************************************************************************************************************/
/************************************************************ Functions: parse set ***********************************************************/
/*********************************************************************************************************************************************/
void AMFImporter::ParseHelper_Node_Enter(CAMFImporter_NodeElement *pNode) {
mNodeElement_Cur->Child.push_back(pNode); // add new element to current element child list.
mNodeElement_Cur = pNode; // switch current element to new one.
}
void AMFImporter::ParseHelper_Node_Exit() {
// check if we can walk up.
if (mNodeElement_Cur != nullptr) mNodeElement_Cur = mNodeElement_Cur->Parent;
}
void AMFImporter::ParseHelper_FixTruncatedFloatString(const char *pInStr, std::string &pOutString) {
size_t instr_len;
pOutString.clear();
instr_len = strlen(pInStr);
if (!instr_len) return;
pOutString.reserve(instr_len * 3 / 2);
// check and correct floats in format ".x". Must be "x.y".
if (pInStr[0] == '.') pOutString.push_back('0');
pOutString.push_back(pInStr[0]);
for (size_t ci = 1; ci < instr_len; ci++) {
if ((pInStr[ci] == '.') && ((pInStr[ci - 1] == ' ') || (pInStr[ci - 1] == '-') || (pInStr[ci - 1] == '+') || (pInStr[ci - 1] == '\t'))) {
pOutString.push_back('0');
pOutString.push_back('.');
} else {
pOutString.push_back(pInStr[ci]);
}
}
} }
static bool ParseHelper_Decode_Base64_IsBase64(const char pChar) { static bool ParseHelper_Decode_Base64_IsBase64(const char pChar) {
return (isalnum(pChar) || (pChar == '+') || (pChar == '/')); return (isalnum((unsigned char)pChar) || (pChar == '+') || (pChar == '/'));
} }
void AMFImporter::ParseHelper_Decode_Base64(const std::string &pInputBase64, std::vector<uint8_t> &pOutputData) const { void AMFImporter::ParseHelper_Decode_Base64(const std::string &pInputBase64, std::vector<uint8_t> &pOutputData) const {
@ -321,7 +191,10 @@ void AMFImporter::ParseHelper_Decode_Base64(const std::string &pInputBase64, std
uint8_t arr4[4], arr3[3]; uint8_t arr4[4], arr3[3];
// check input data // check input data
if (pInputBase64.size() % 4) throw DeadlyImportError("Base64-encoded data must have size multiply of four."); if (pInputBase64.size() % 4) {
throw DeadlyImportError("Base64-encoded data must have size multiply of four.");
}
// prepare output place // prepare output place
pOutputData.clear(); pOutputData.clear();
pOutputData.reserve(pInputBase64.size() / 4 * 3); pOutputData.reserve(pInputBase64.size() / 4 * 3);
@ -362,27 +235,34 @@ void AMFImporter::ParseHelper_Decode_Base64(const std::string &pInputBase64, std
} }
void AMFImporter::ParseFile(const std::string &pFile, IOSystem *pIOHandler) { void AMFImporter::ParseFile(const std::string &pFile, IOSystem *pIOHandler) {
irr::io::IrrXMLReader *OldReader = mReader; // store current XMLreader.
std::unique_ptr<IOStream> file(pIOHandler->Open(pFile, "rb")); std::unique_ptr<IOStream> file(pIOHandler->Open(pFile, "rb"));
// Check whether we can read from the file // Check whether we can read from the file
if (file.get() == NULL) throw DeadlyImportError("Failed to open AMF file " + pFile + "."); if (file == nullptr) {
throw DeadlyImportError("Failed to open AMF file ", pFile, ".");
}
// generate a XML reader for it mXmlParser = new XmlParser();
std::unique_ptr<CIrrXML_IOStreamReader> mIOWrapper(new CIrrXML_IOStreamReader(file.get())); if (!mXmlParser->parse(file.get())) {
mReader = irr::io::createIrrXMLReader(mIOWrapper.get()); delete mXmlParser;
if (!mReader) throw DeadlyImportError("Failed to create XML reader for file" + pFile + "."); mXmlParser = nullptr;
// throw DeadlyImportError("Failed to create XML reader for file ", pFile, ".");
// start reading }
// search for root tag <amf>
if (XML_SearchNode("amf")) // Start reading, search for root tag <amf>
ParseNode_Root(); if (!mXmlParser->hasNode("amf")) {
else
throw DeadlyImportError("Root node \"amf\" not found."); throw DeadlyImportError("Root node \"amf\" not found.");
}
ParseNode_Root();
} // namespace Assimp
delete mReader; void AMFImporter::ParseHelper_Node_Enter(AMFNodeElementBase *node) {
// restore old XMLreader mNodeElement_Cur->Child.push_back(node); // add new element to current element child list.
mReader = OldReader; mNodeElement_Cur = node;
}
void AMFImporter::ParseHelper_Node_Exit() {
if (mNodeElement_Cur != nullptr) mNodeElement_Cur = mNodeElement_Cur->Parent;
} }
// <amf // <amf
@ -393,54 +273,49 @@ void AMFImporter::ParseFile(const std::string &pFile, IOSystem *pIOHandler) {
// Root XML element. // Root XML element.
// Multi elements - No. // Multi elements - No.
void AMFImporter::ParseNode_Root() { void AMFImporter::ParseNode_Root() {
std::string unit, version; AMFNodeElementBase *ne = nullptr;
CAMFImporter_NodeElement *ne(nullptr); XmlNode *root = mXmlParser->findNode("amf");
if (nullptr == root) {
throw DeadlyImportError("Root node \"amf\" not found.");
}
XmlNode node = *root;
mUnit = ai_tolower(std::string(node.attribute("unit").as_string()));
mVersion = node.attribute("version").as_string();
// Read attributes for node <amf>. // Read attributes for node <amf>.
MACRO_ATTRREAD_LOOPBEG;
MACRO_ATTRREAD_CHECK_RET("unit", unit, mReader->getAttributeValue);
MACRO_ATTRREAD_CHECK_RET("version", version, mReader->getAttributeValue);
MACRO_ATTRREAD_LOOPEND_WSKIP;
// Check attributes // Check attributes
if (!mUnit.empty()) { if (!mUnit.empty()) {
if ((mUnit != "inch") && (mUnit != "millimeter") && (mUnit != "meter") && (mUnit != "feet") && (mUnit != "micron")) Throw_IncorrectAttrValue("unit"); if ((mUnit != "inch") && (mUnit != "millimeters") && (mUnit != "millimeter") && (mUnit != "meter") && (mUnit != "feet") && (mUnit != "micron")) {
Throw_IncorrectAttrValue("unit", mUnit);
}
} }
// create root node element. // create root node element.
ne = new CAMFImporter_NodeElement_Root(nullptr); ne = new AMFRoot(nullptr);
mNodeElement_Cur = ne; // set first "current" element mNodeElement_Cur = ne; // set first "current" element
// and assign attribute's values // and assign attribute's values
((CAMFImporter_NodeElement_Root *)ne)->Unit = unit; ((AMFRoot *)ne)->Unit = mUnit;
((CAMFImporter_NodeElement_Root *)ne)->Version = version; ((AMFRoot *)ne)->Version = mVersion;
// Check for child nodes // Check for child nodes
if (!mReader->isEmptyElement()) { for (XmlNode &currentNode : node.children() ) {
MACRO_NODECHECK_LOOPBEGIN("amf"); const std::string currentName = currentNode.name();
if (XML_CheckNode_NameEqual("object")) { if (currentName == "object") {
ParseNode_Object(); ParseNode_Object(currentNode);
continue; } else if (currentName == "material") {
ParseNode_Material(currentNode);
} else if (currentName == "texture") {
ParseNode_Texture(currentNode);
} else if (currentName == "constellation") {
ParseNode_Constellation(currentNode);
} else if (currentName == "metadata") {
ParseNode_Metadata(currentNode);
} }
if (XML_CheckNode_NameEqual("material")) { mNodeElement_Cur = ne;
ParseNode_Material(); }
continue; mNodeElement_Cur = ne; // force restore "current" element
}
if (XML_CheckNode_NameEqual("texture")) {
ParseNode_Texture();
continue;
}
if (XML_CheckNode_NameEqual("constellation")) {
ParseNode_Constellation();
continue;
}
if (XML_CheckNode_NameEqual("metadata")) {
ParseNode_Metadata();
continue;
}
MACRO_NODECHECK_LOOPEND("amf");
mNodeElement_Cur = ne; // force restore "current" element
} // if(!mReader->isEmptyElement())
mNodeElement_List.push_back(ne); // add to node element list because its a new object in graph. mNodeElement_List.push_back(ne); // add to node element list because its a new object in graph.
} }
@ -451,40 +326,34 @@ void AMFImporter::ParseNode_Root() {
// A collection of objects or constellations with specific relative locations. // A collection of objects or constellations with specific relative locations.
// Multi elements - Yes. // Multi elements - Yes.
// Parent element - <amf>. // Parent element - <amf>.
void AMFImporter::ParseNode_Constellation() { void AMFImporter::ParseNode_Constellation(XmlNode &node) {
std::string id; std::string id;
CAMFImporter_NodeElement *ne(nullptr); id = node.attribute("id").as_string();
// Read attributes for node <constellation>.
MACRO_ATTRREAD_LOOPBEG;
MACRO_ATTRREAD_CHECK_RET("id", id, mReader->getAttributeValue);
MACRO_ATTRREAD_LOOPEND;
// create and if needed - define new grouping object. // create and if needed - define new grouping object.
ne = new CAMFImporter_NodeElement_Constellation(mNodeElement_Cur); AMFNodeElementBase *ne = new AMFConstellation(mNodeElement_Cur);
CAMFImporter_NodeElement_Constellation &als = *((CAMFImporter_NodeElement_Constellation *)ne); // alias for convenience AMFConstellation &als = *((AMFConstellation *)ne); // alias for convenience
if (!id.empty()) {
als.ID = id;
}
if (!id.empty()) als.ID = id;
// Check for child nodes // Check for child nodes
if (!mReader->isEmptyElement()) { if (!node.empty()) {
ParseHelper_Node_Enter(ne); ParseHelper_Node_Enter(ne);
MACRO_NODECHECK_LOOPBEGIN("constellation"); for (XmlNode currentNode = node.first_child(); currentNode; currentNode = currentNode.next_sibling()) {
if (XML_CheckNode_NameEqual("instance")) { std::string name = currentNode.name();
ParseNode_Instance(); if (name == "instance") {
continue; ParseNode_Instance(currentNode);
} else if (name == "metadata") {
ParseNode_Metadata(currentNode);
}
} }
if (XML_CheckNode_NameEqual("metadata")) {
ParseNode_Metadata();
continue;
}
MACRO_NODECHECK_LOOPEND("constellation");
ParseHelper_Node_Exit(); ParseHelper_Node_Exit();
} // if(!mReader->isEmptyElement()) } else {
else { mNodeElement_Cur->Child.push_back(ne);
mNodeElement_Cur->Child.push_back(ne); // Add element to child list of current element }
} // if(!mReader->isEmptyElement()) else
mNodeElement_List.push_back(ne); // and to node element list because its a new object in graph. mNodeElement_List.push_back(ne); // and to node element list because its a new object in graph.
} }
@ -495,47 +364,43 @@ void AMFImporter::ParseNode_Constellation() {
// A collection of objects or constellations with specific relative locations. // A collection of objects or constellations with specific relative locations.
// Multi elements - Yes. // Multi elements - Yes.
// Parent element - <amf>. // Parent element - <amf>.
void AMFImporter::ParseNode_Instance() { void AMFImporter::ParseNode_Instance(XmlNode &node) {
std::string objectid; AMFNodeElementBase *ne(nullptr);
CAMFImporter_NodeElement *ne(nullptr);
// Read attributes for node <constellation>. // Read attributes for node <constellation>.
MACRO_ATTRREAD_LOOPBEG; std::string objectid = node.attribute("objectid").as_string();
MACRO_ATTRREAD_CHECK_RET("objectid", objectid, mReader->getAttributeValue);
MACRO_ATTRREAD_LOOPEND;
// used object id must be defined, check that. // used object id must be defined, check that.
if (objectid.empty()) throw DeadlyImportError("\"objectid\" in <instance> must be defined."); if (objectid.empty()) {
throw DeadlyImportError("\"objectid\" in <instance> must be defined.");
}
// create and define new grouping object. // create and define new grouping object.
ne = new CAMFImporter_NodeElement_Instance(mNodeElement_Cur); ne = new AMFInstance(mNodeElement_Cur);
AMFInstance &als = *((AMFInstance *)ne);
CAMFImporter_NodeElement_Instance &als = *((CAMFImporter_NodeElement_Instance *)ne); // alias for convenience
als.ObjectID = objectid; als.ObjectID = objectid;
// Check for child nodes
if (!mReader->isEmptyElement()) {
bool read_flag[6] = { false, false, false, false, false, false };
als.Delta.Set(0, 0, 0); if (!node.empty()) {
als.Rotation.Set(0, 0, 0);
ParseHelper_Node_Enter(ne); ParseHelper_Node_Enter(ne);
MACRO_NODECHECK_LOOPBEGIN("instance"); for (auto &currentNode : node.children()) {
MACRO_NODECHECK_READCOMP_F("deltax", read_flag[0], als.Delta.x); const std::string &currentName = currentNode.name();
MACRO_NODECHECK_READCOMP_F("deltay", read_flag[1], als.Delta.y); if (currentName == "deltax") {
MACRO_NODECHECK_READCOMP_F("deltaz", read_flag[2], als.Delta.z); XmlParser::getValueAsReal(currentNode, als.Delta.x);
MACRO_NODECHECK_READCOMP_F("rx", read_flag[3], als.Rotation.x); } else if (currentName == "deltay") {
MACRO_NODECHECK_READCOMP_F("ry", read_flag[4], als.Rotation.y); XmlParser::getValueAsReal(currentNode, als.Delta.y);
MACRO_NODECHECK_READCOMP_F("rz", read_flag[5], als.Rotation.z); } else if (currentName == "deltaz") {
MACRO_NODECHECK_LOOPEND("instance"); XmlParser::getValueAsReal(currentNode, als.Delta.z);
} else if (currentName == "rx") {
XmlParser::getValueAsReal(currentNode, als.Delta.x);
} else if (currentName == "ry") {
XmlParser::getValueAsReal(currentNode, als.Delta.y);
} else if (currentName == "rz") {
XmlParser::getValueAsReal(currentNode, als.Delta.z);
}
}
ParseHelper_Node_Exit(); ParseHelper_Node_Exit();
// also convert degrees to radians. } else {
als.Rotation.x = AI_MATH_PI_F * als.Rotation.x / 180.0f; mNodeElement_Cur->Child.push_back(ne);
als.Rotation.y = AI_MATH_PI_F * als.Rotation.y / 180.0f; }
als.Rotation.z = AI_MATH_PI_F * als.Rotation.z / 180.0f;
} // if(!mReader->isEmptyElement())
else {
mNodeElement_Cur->Child.push_back(ne); // Add element to child list of current element
} // if(!mReader->isEmptyElement()) else
mNodeElement_List.push_back(ne); // and to node element list because its a new object in graph. mNodeElement_List.push_back(ne); // and to node element list because its a new object in graph.
} }
@ -547,51 +412,38 @@ void AMFImporter::ParseNode_Instance() {
// An object definition. // An object definition.
// Multi elements - Yes. // Multi elements - Yes.
// Parent element - <amf>. // Parent element - <amf>.
void AMFImporter::ParseNode_Object() { void AMFImporter::ParseNode_Object(XmlNode &node) {
std::string id; AMFNodeElementBase *ne = nullptr;
CAMFImporter_NodeElement *ne(nullptr);
// Read attributes for node <object>. // Read attributes for node <object>.
MACRO_ATTRREAD_LOOPBEG; std::string id = node.attribute("id").as_string();
MACRO_ATTRREAD_CHECK_RET("id", id, mReader->getAttributeValue);
MACRO_ATTRREAD_LOOPEND;
// create and if needed - define new geometry object. // create and if needed - define new geometry object.
ne = new CAMFImporter_NodeElement_Object(mNodeElement_Cur); ne = new AMFObject(mNodeElement_Cur);
CAMFImporter_NodeElement_Object &als = *((CAMFImporter_NodeElement_Object *)ne); // alias for convenience AMFObject &als = *((AMFObject *)ne); // alias for convenience
if (!id.empty()) {
als.ID = id;
}
if (!id.empty()) als.ID = id;
// Check for child nodes // Check for child nodes
if (!mReader->isEmptyElement()) { if (!node.empty()) {
bool col_read = false;
ParseHelper_Node_Enter(ne); ParseHelper_Node_Enter(ne);
MACRO_NODECHECK_LOOPBEGIN("object"); for (auto &currentNode : node.children()) {
if (XML_CheckNode_NameEqual("color")) { const std::string &currentName = currentNode.name();
// Check if color already defined for object. if (currentName == "color") {
if (col_read) Throw_MoreThanOnceDefined("color", "Only one color can be defined for <object>."); ParseNode_Color(currentNode);
// read data and set flag about it } else if (currentName == "mesh") {
ParseNode_Color(); ParseNode_Mesh(currentNode);
col_read = true; } else if (currentName == "metadata") {
ParseNode_Metadata(currentNode);
continue; }
} }
if (XML_CheckNode_NameEqual("mesh")) {
ParseNode_Mesh();
continue;
}
if (XML_CheckNode_NameEqual("metadata")) {
ParseNode_Metadata();
continue;
}
MACRO_NODECHECK_LOOPEND("object");
ParseHelper_Node_Exit(); ParseHelper_Node_Exit();
} // if(!mReader->isEmptyElement()) } else {
else {
mNodeElement_Cur->Child.push_back(ne); // Add element to child list of current element mNodeElement_Cur->Child.push_back(ne); // Add element to child list of current element
} // if(!mReader->isEmptyElement()) else }
mNodeElement_List.push_back(ne); // and to node element list because its a new object in graph. mNodeElement_List.push_back(ne); // and to node element list because its a new object in graph.
} }
@ -614,46 +466,23 @@ void AMFImporter::ParseNode_Object() {
// "Revision" - specifies the revision of the entity // "Revision" - specifies the revision of the entity
// "Tolerance" - specifies the desired manufacturing tolerance of the entity in entity's unit system // "Tolerance" - specifies the desired manufacturing tolerance of the entity in entity's unit system
// "Volume" - specifies the total volume of the entity, in the entity's unit system, to be used for verification (object and volume only) // "Volume" - specifies the total volume of the entity, in the entity's unit system, to be used for verification (object and volume only)
void AMFImporter::ParseNode_Metadata() { void AMFImporter::ParseNode_Metadata(XmlNode &node) {
std::string type, value; AMFNodeElementBase *ne = nullptr;
CAMFImporter_NodeElement *ne(nullptr);
std::string type = node.attribute("type").as_string(), value;
XmlParser::getValueAsString(node, value);
// read attribute // read attribute
MACRO_ATTRREAD_LOOPBEG; ne = new AMFMetadata(mNodeElement_Cur);
MACRO_ATTRREAD_CHECK_RET("type", type, mReader->getAttributeValue); ((AMFMetadata *)ne)->Type = type;
MACRO_ATTRREAD_LOOPEND; ((AMFMetadata *)ne)->Value = value;
// and value of node.
value = mReader->getNodeData();
// Create node element and assign read data.
ne = new CAMFImporter_NodeElement_Metadata(mNodeElement_Cur);
((CAMFImporter_NodeElement_Metadata *)ne)->Type = type;
((CAMFImporter_NodeElement_Metadata *)ne)->Value = value;
mNodeElement_Cur->Child.push_back(ne); // Add element to child list of current element mNodeElement_Cur->Child.push_back(ne); // Add element to child list of current element
mNodeElement_List.push_back(ne); // and to node element list because its a new object in graph. mNodeElement_List.push_back(ne); // and to node element list because its a new object in graph.
} }
/*********************************************************************************************************************************************/ bool AMFImporter::CanRead(const std::string &pFile, IOSystem *pIOHandler, bool /*pCheckSig*/) const {
/******************************************************** Functions: BaseImporter set ********************************************************/ static const char *tokens[] = { "<amf" };
/*********************************************************************************************************************************************/ return SearchFileHeaderForToken(pIOHandler, pFile, tokens, AI_COUNT_OF(tokens));
bool AMFImporter::CanRead(const std::string &pFile, IOSystem *pIOHandler, bool pCheckSig) const {
const std::string extension = GetExtension(pFile);
if (extension == "amf") {
return true;
}
if (!extension.length() || pCheckSig) {
const char *tokens[] = { "<amf" };
return SearchFileHeaderForToken(pIOHandler, pFile, tokens, 1);
}
return false;
}
void AMFImporter::GetExtensionList(std::set<std::string> &pExtensionList) {
pExtensionList.insert("amf");
} }
const aiImporterDesc *AMFImporter::GetInfo() const { const aiImporterDesc *AMFImporter::GetInfo() const {

View File

@ -3,9 +3,7 @@
Open Asset Import Library (assimp) Open Asset Import Library (assimp)
--------------------------------------------------------------------------- ---------------------------------------------------------------------------
Copyright (c) 2006-2020, assimp team Copyright (c) 2006-2024, assimp team
All rights reserved. All rights reserved.
@ -54,11 +52,11 @@ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
#include "AMFImporter_Node.hpp" #include "AMFImporter_Node.hpp"
// Header files, Assimp. // Header files, Assimp.
#include <assimp/DefaultLogger.hpp>
#include <assimp/importerdesc.h>
#include "assimp/types.h" #include "assimp/types.h"
#include <assimp/BaseImporter.h> #include <assimp/BaseImporter.h>
#include <assimp/irrXMLWrapper.h> #include <assimp/XmlParser.h>
#include <assimp/importerdesc.h>
#include <assimp/DefaultLogger.hpp>
// Header files, stdlib. // Header files, stdlib.
#include <set> #include <set>
@ -100,23 +98,41 @@ namespace Assimp {
/// old - <map> and children <u1>, <u2>, <u3>, <v1>, <v2>, <v3> /// old - <map> and children <u1>, <u2>, <u3>, <v1>, <v2>, <v3>
/// ///
class AMFImporter : public BaseImporter { class AMFImporter : public BaseImporter {
private: using AMFMetaDataArray = std::vector<AMFMetadata *>;
struct SPP_Material;// forward declaration using MeshArray = std::vector<aiMesh *>;
using NodeArray = std::vector<aiNode *>;
/// \struct SPP_Composite public:
/// Data type for post-processing step. More suitable container for part of material's composition. struct SPP_Material;
/// Data type for post-processing step. More suitable container for part of material's composition.
struct SPP_Composite { struct SPP_Composite {
SPP_Material* Material;///< Pointer to material - part of composition. SPP_Material *Material; ///< Pointer to material - part of composition.
std::string Formula;///< Formula for calculating ratio of \ref Material. std::string Formula; ///< Formula for calculating ratio of \ref Material.
};
/// Data type for post-processing step. More suitable container for texture.
struct SPP_Texture {
std::string ID;
size_t Width, Height, Depth;
bool Tiled;
char FormatHint[9]; // 8 for string + 1 for terminator.
uint8_t *Data;
};
/// Data type for post-processing step. Contain face data.
struct SComplexFace {
aiFace Face; ///< Face vertices.
const AMFColor *Color; ///< Face color. Equal to nullptr if color is not set for the face.
const AMFTexMap *TexMap; ///< Face texture mapping data. Equal to nullptr if texture mapping is not set for the face.
}; };
/// \struct SPP_Material
/// Data type for post-processing step. More suitable container for material. /// Data type for post-processing step. More suitable container for material.
struct SPP_Material { struct SPP_Material {
std::string ID;///< Material ID. std::string ID; ///< Material ID.
std::list<CAMFImporter_NodeElement_Metadata*> Metadata;///< Metadata of material. std::list<AMFMetadata *> Metadata; ///< Metadata of material.
CAMFImporter_NodeElement_Color* Color;///< Color of material. AMFColor *Color; ///< Color of material.
std::list<SPP_Composite> Composition;///< List of child materials if current material is composition of few another. std::list<SPP_Composite> Composition; ///< List of child materials if current material is composition of few another.
/// Return color calculated for specified coordinate. /// Return color calculated for specified coordinate.
/// \param [in] pX - "x" coordinate. /// \param [in] pX - "x" coordinate.
@ -126,307 +142,167 @@ private:
aiColor4D GetColor(const float pX, const float pY, const float pZ) const; aiColor4D GetColor(const float pX, const float pY, const float pZ) const;
}; };
/// Data type for post-processing step. More suitable container for texture. /// Default constructor.
struct SPP_Texture { AMFImporter() AI_NO_EXCEPT;
std::string ID;
size_t Width, Height, Depth;
bool Tiled;
char FormatHint[9];// 8 for string + 1 for terminator.
uint8_t *Data;
};
/// Data type for post-processing step. Contain face data. /// Default destructor.
struct SComplexFace { ~AMFImporter() override;
aiFace Face;///< Face vertices.
const CAMFImporter_NodeElement_Color* Color;///< Face color. Equal to nullptr if color is not set for the face.
const CAMFImporter_NodeElement_TexMap* TexMap;///< Face texture mapping data. Equal to nullptr if texture mapping is not set for the face.
};
/// Clear all temporary data. /// Parse AMF file and fill scene graph. The function has no return value. Result can be found by analyzing the generated graph.
void Clear(); /// Also exception can be thrown if trouble will found.
/// \param [in] pFile - name of file to be parsed.
/***********************************************/ /// \param [in] pIOHandler - pointer to IO helper object.
/************* Functions: find set *************/ void ParseFile(const std::string &pFile, IOSystem *pIOHandler);
/***********************************************/ void ParseHelper_Node_Enter(AMFNodeElementBase *child);
void ParseHelper_Node_Exit();
/// Find specified node element in node elements list ( \ref mNodeElement_List). bool CanRead(const std::string &pFile, IOSystem *pIOHandler, bool pCheckSig) const override;
/// \param [in] pID - ID(name) of requested node element. void InternReadFile(const std::string &pFile, aiScene *pScene, IOSystem *pIOHandler) override;
/// \param [in] pType - type of node element. const aiImporterDesc *GetInfo() const override;
/// \param [out] pNode - pointer to pointer to item found. bool Find_NodeElement(const std::string &pID, const AMFNodeElementBase::EType pType, AMFNodeElementBase **pNodeElement) const;
/// \return true - if the node element is found, else - false. bool Find_ConvertedNode(const std::string &pID, NodeArray &nodeArray, aiNode **pNode) const;
bool Find_NodeElement(const std::string& pID, const CAMFImporter_NodeElement::EType pType, CAMFImporter_NodeElement** pNodeElement) const; bool Find_ConvertedMaterial(const std::string &pID, const SPP_Material **pConvertedMaterial) const;
AI_WONT_RETURN void Throw_CloseNotFound(const std::string &nodeName) AI_WONT_RETURN_SUFFIX;
/// Find requested aiNode in node list. AI_WONT_RETURN void Throw_IncorrectAttr(const std::string &nodeName, const std::string &pAttrName) AI_WONT_RETURN_SUFFIX;
/// \param [in] pID - ID(name) of requested node. AI_WONT_RETURN void Throw_IncorrectAttrValue(const std::string &nodeName, const std::string &pAttrName) AI_WONT_RETURN_SUFFIX;
/// \param [in] pNodeList - list of nodes where to find the node. AI_WONT_RETURN void Throw_MoreThanOnceDefined(const std::string &nodeName, const std::string &pNodeType, const std::string &pDescription) AI_WONT_RETURN_SUFFIX;
/// \param [out] pNode - pointer to pointer to item found. AI_WONT_RETURN void Throw_ID_NotFound(const std::string &pID) const AI_WONT_RETURN_SUFFIX;
/// \return true - if the node is found, else - false. void XML_CheckNode_MustHaveChildren(pugi::xml_node &node);
bool Find_ConvertedNode(const std::string& pID, std::list<aiNode*>& pNodeList, aiNode** pNode) const; bool XML_SearchNode(const std::string &nodeName);
AMFImporter(const AMFImporter &pScene) = delete;
/// Find material in list for converted materials. Use at postprocessing step. AMFImporter &operator=(const AMFImporter &pScene) = delete;
/// \param [in] pID - material ID.
/// \param [out] pConvertedMaterial - pointer to found converted material (\ref SPP_Material).
/// \return true - if the material is found, else - false.
bool Find_ConvertedMaterial(const std::string& pID, const SPP_Material** pConvertedMaterial) const;
/// Find texture in list of converted textures. Use at postprocessing step,
/// \param [in] pID_R - ID of source "red" texture.
/// \param [in] pID_G - ID of source "green" texture.
/// \param [in] pID_B - ID of source "blue" texture.
/// \param [in] pID_A - ID of source "alpha" texture. Use empty string to find RGB-texture.
/// \param [out] pConvertedTextureIndex - pointer where index in list of found texture will be written. If equivalent to nullptr then nothing will be
/// written.
/// \return true - if the texture is found, else - false.
bool Find_ConvertedTexture(const std::string& pID_R, const std::string& pID_G, const std::string& pID_B, const std::string& pID_A,
uint32_t* pConvertedTextureIndex = nullptr) const;
/// Get data stored in <vertices> and place it to arrays.
/// \param [in] pNodeElement - reference to node element which kept <object> data.
/// \param [in] pVertexCoordinateArray - reference to vertices coordinates kept in <vertices>.
/// \param [in] pVertexColorArray - reference to vertices colors for all <vertex's. If color for vertex is not set then corresponding member of array
/// contain nullptr.
void PostprocessHelper_CreateMeshDataArray(const CAMFImporter_NodeElement_Mesh& pNodeElement, std::vector<aiVector3D>& pVertexCoordinateArray,
std::vector<CAMFImporter_NodeElement_Color*>& pVertexColorArray) const;
/// Return converted texture ID which related to specified source textures ID's. If converted texture does not exist then it will be created and ID on new
/// converted texture will be returned. Conversion: set of textures from \ref CAMFImporter_NodeElement_Texture to one \ref SPP_Texture and place it
/// to converted textures list.
/// Any of source ID's can be absent(empty string) or even one ID only specified. But at least one ID must be specified.
/// \param [in] pID_R - ID of source "red" texture.
/// \param [in] pID_G - ID of source "green" texture.
/// \param [in] pID_B - ID of source "blue" texture.
/// \param [in] pID_A - ID of source "alpha" texture.
/// \return index of the texture in array of the converted textures.
size_t PostprocessHelper_GetTextureID_Or_Create(const std::string& pID_R, const std::string& pID_G, const std::string& pID_B, const std::string& pID_A);
/// Separate input list by texture IDs. This step is needed because aiMesh can contain mesh which is use only one texture (or set: diffuse, bump etc).
/// \param [in] pInputList - input list with faces. Some of them can contain color or texture mapping, or both of them, or nothing. Will be cleared after
/// processing.
/// \param [out] pOutputList_Separated - output list of the faces lists. Separated faces list by used texture IDs. Will be cleared before processing.
void PostprocessHelper_SplitFacesByTextureID(std::list<SComplexFace>& pInputList, std::list<std::list<SComplexFace> >& pOutputList_Separated);
/// Check if child elements of node element is metadata and add it to scene node.
/// \param [in] pMetadataList - reference to list with collected metadata.
/// \param [out] pSceneNode - scene node in which metadata will be added.
void Postprocess_AddMetadata(const std::list<CAMFImporter_NodeElement_Metadata*>& pMetadataList, aiNode& pSceneNode) const;
/// To create aiMesh and aiNode for it from <object>.
/// \param [in] pNodeElement - reference to node element which kept <object> data.
/// \param [out] pMeshList - reference to a list with all aiMesh of the scene.
/// \param [out] pSceneNode - pointer to place where new aiNode will be created.
void Postprocess_BuildNodeAndObject(const CAMFImporter_NodeElement_Object& pNodeElement, std::list<aiMesh*>& pMeshList, aiNode** pSceneNode);
/// Create mesh for every <volume> in <mesh>.
/// \param [in] pNodeElement - reference to node element which kept <mesh> data.
/// \param [in] pVertexCoordinateArray - reference to vertices coordinates for all <volume>'s.
/// \param [in] pVertexColorArray - reference to vertices colors for all <volume>'s. If color for vertex is not set then corresponding member of array
/// contain nullptr.
/// \param [in] pObjectColor - pointer to colors for <object>. If color is not set then argument contain nullptr.
/// \param [in] pMaterialList - reference to a list with defined materials.
/// \param [out] pMeshList - reference to a list with all aiMesh of the scene.
/// \param [out] pSceneNode - reference to aiNode which will own new aiMesh's.
void Postprocess_BuildMeshSet(const CAMFImporter_NodeElement_Mesh& pNodeElement, const std::vector<aiVector3D>& pVertexCoordinateArray,
const std::vector<CAMFImporter_NodeElement_Color*>& pVertexColorArray, const CAMFImporter_NodeElement_Color* pObjectColor,
std::list<aiMesh*>& pMeshList, aiNode& pSceneNode);
/// Convert material from \ref CAMFImporter_NodeElement_Material to \ref SPP_Material.
/// \param [in] pMaterial - source CAMFImporter_NodeElement_Material.
void Postprocess_BuildMaterial(const CAMFImporter_NodeElement_Material& pMaterial);
/// Create and add to aiNode's list new part of scene graph defined by <constellation>.
/// \param [in] pConstellation - reference to <constellation> node.
/// \param [out] pNodeList - reference to aiNode's list.
void Postprocess_BuildConstellation(CAMFImporter_NodeElement_Constellation& pConstellation, std::list<aiNode*>& pNodeList) const;
/// Build Assimp scene graph in aiScene from collected data.
/// \param [out] pScene - pointer to aiScene where tree will be built.
void Postprocess_BuildScene(aiScene* pScene);
/// Call that function when close tag of node not found and exception must be raised.
/// E.g.:
/// <amf>
/// <object>
/// </amf> <!--- object not closed --->
/// \throw DeadlyImportError.
/// \param [in] pNode - node name in which exception happened.
void Throw_CloseNotFound(const std::string& pNode);
/// Call that function when attribute name is incorrect and exception must be raised.
/// \param [in] pAttrName - attribute name.
/// \throw DeadlyImportError.
void Throw_IncorrectAttr(const std::string& pAttrName);
/// Call that function when attribute value is incorrect and exception must be raised.
/// \param [in] pAttrName - attribute name.
/// \throw DeadlyImportError.
void Throw_IncorrectAttrValue(const std::string& pAttrName);
/// Call that function when some type of nodes are defined twice or more when must be used only once and exception must be raised.
/// E.g.:
/// <object>
/// <color>... <!--- color defined --->
/// <color>... <!--- color defined again --->
/// </object>
/// \throw DeadlyImportError.
/// \param [in] pNodeType - type of node which defined one more time.
/// \param [in] pDescription - message about error. E.g. what the node defined while exception raised.
void Throw_MoreThanOnceDefined(const std::string& pNodeType, const std::string& pDescription);
/// Call that function when referenced element ID are not found in graph and exception must be raised.
/// \param [in] pID - ID of of element which not found.
/// \throw DeadlyImportError.
void Throw_ID_NotFound(const std::string& pID) const;
/// Check if current node have children: <node>...</node>. If not then exception will throwed.
void XML_CheckNode_MustHaveChildren();
/// Check if current node name is equal to pNodeName.
/// \param [in] pNodeName - name for checking.
/// return true if current node name is equal to pNodeName, else - false.
bool XML_CheckNode_NameEqual(const std::string& pNodeName) { return mReader->getNodeName() == pNodeName; }
/// Skip unsupported node and report about that. Depend on node name can be skipped begin tag of node all whole node.
/// \param [in] pParentNodeName - parent node name. Used for reporting.
void XML_CheckNode_SkipUnsupported(const std::string& pParentNodeName);
/// Search for specified node in file. XML file read pointer(mReader) will point to found node or file end after search is end.
/// \param [in] pNodeName - requested node name.
/// return true - if node is found, else - false.
bool XML_SearchNode(const std::string& pNodeName);
/// Read attribute value.
/// \param [in] pAttrIdx - attribute index (\ref mReader->getAttribute* set).
/// \return read data.
bool XML_ReadNode_GetAttrVal_AsBool(const int pAttrIdx);
/// Read attribute value.
/// \param [in] pAttrIdx - attribute index (\ref mReader->getAttribute* set).
/// \return read data.
float XML_ReadNode_GetAttrVal_AsFloat(const int pAttrIdx);
/// Read attribute value.
/// \param [in] pAttrIdx - attribute index (\ref mReader->getAttribute* set).
/// \return read data.
uint32_t XML_ReadNode_GetAttrVal_AsU32(const int pAttrIdx);
/// Read node value.
/// \return read data.
float XML_ReadNode_GetVal_AsFloat();
/// Read node value.
/// \return read data.
uint32_t XML_ReadNode_GetVal_AsU32();
/// Read node value.
/// \return read data.
void XML_ReadNode_GetVal_AsString(std::string& pValue);
/// Make pNode as current and enter deeper for parsing child nodes. At end \ref ParseHelper_Node_Exit must be called.
/// \param [in] pNode - new current node.
void ParseHelper_Node_Enter(CAMFImporter_NodeElement* pNode);
/// This function must be called when exiting from grouping node. \ref ParseHelper_Group_Begin.
void ParseHelper_Node_Exit();
/// Attribute values of floating point types can take form ".x"(without leading zero). irrXMLReader can not read this form of values and it
/// must be converted to right form - "0.xxx".
/// \param [in] pInStr - pointer to input string which can contain incorrect form of values.
/// \param [out[ pOutString - output string with right form of values.
void ParseHelper_FixTruncatedFloatString(const char* pInStr, std::string& pOutString);
/// Decode Base64-encoded data.
/// \param [in] pInputBase64 - reference to input Base64-encoded string.
/// \param [out] pOutputData - reference to output array for decoded data.
void ParseHelper_Decode_Base64(const std::string& pInputBase64, std::vector<uint8_t>& pOutputData) const;
/// Parse <AMF> node of the file.
void ParseNode_Root();
/// Parse <constellation> node of the file.
void ParseNode_Constellation();
/// Parse <instance> node of the file.
void ParseNode_Instance();
/// Parse <material> node of the file.
void ParseNode_Material();
/// Parse <metadata> node.
void ParseNode_Metadata();
/// Parse <object> node of the file.
void ParseNode_Object();
/// Parse <texture> node of the file.
void ParseNode_Texture();
/// Parse <coordinates> node of the file.
void ParseNode_Coordinates();
/// Parse <edge> node of the file.
void ParseNode_Edge();
/// Parse <mesh> node of the file.
void ParseNode_Mesh();
/// Parse <triangle> node of the file.
void ParseNode_Triangle();
/// Parse <vertex> node of the file.
void ParseNode_Vertex();
/// Parse <vertices> node of the file.
void ParseNode_Vertices();
/// Parse <volume> node of the file.
void ParseNode_Volume();
/// Parse <color> node of the file.
void ParseNode_Color();
/// Parse <texmap> of <map> node of the file.
/// \param [in] pUseOldName - if true then use old name of node(and children) - <map>, instead of new name - <texmap>.
void ParseNode_TexMap(const bool pUseOldName = false);
public:
/// Default constructor.
AMFImporter() AI_NO_EXCEPT
: mNodeElement_Cur(nullptr)
, mReader(nullptr) {
// empty
}
/// Default destructor.
~AMFImporter();
/// Parse AMF file and fill scene graph. The function has no return value. Result can be found by analyzing the generated graph.
/// Also exception can be thrown if trouble will found.
/// \param [in] pFile - name of file to be parsed.
/// \param [in] pIOHandler - pointer to IO helper object.
void ParseFile(const std::string& pFile, IOSystem* pIOHandler);
bool CanRead(const std::string& pFile, IOSystem* pIOHandler, bool pCheckSig) const;
void GetExtensionList(std::set<std::string>& pExtensionList);
void InternReadFile(const std::string& pFile, aiScene* pScene, IOSystem* pIOHandler);
const aiImporterDesc* GetInfo ()const;
AMFImporter(const AMFImporter& pScene) = delete;
AMFImporter& operator=(const AMFImporter& pScene) = delete;
private: private:
static const aiImporterDesc Description; /// Clear all temporary data.
void Clear();
CAMFImporter_NodeElement* mNodeElement_Cur;///< Current element. /// Get data stored in <vertices> and place it to arrays.
std::list<CAMFImporter_NodeElement*> mNodeElement_List;///< All elements of scene graph. /// \param [in] pNodeElement - reference to node element which kept <object> data.
irr::io::IrrXMLReader* mReader;///< Pointer to XML-reader object /// \param [in] pVertexCoordinateArray - reference to vertices coordinates kept in <vertices>.
/// \param [in] pVertexColorArray - reference to vertices colors for all <vertex's. If color for vertex is not set then corresponding member of array
/// contain nullptr.
void PostprocessHelper_CreateMeshDataArray(const AMFMesh &pNodeElement, std::vector<aiVector3D> &pVertexCoordinateArray,
std::vector<AMFColor *> &pVertexColorArray) const;
/// Return converted texture ID which related to specified source textures ID's. If converted texture does not exist then it will be created and ID on new
/// converted texture will be returned. Conversion: set of textures from \ref CAMFImporter_NodeElement_Texture to one \ref SPP_Texture and place it
/// to converted textures list.
/// Any of source ID's can be absent(empty string) or even one ID only specified. But at least one ID must be specified.
/// \param [in] pID_R - ID of source "red" texture.
/// \param [in] pID_G - ID of source "green" texture.
/// \param [in] pID_B - ID of source "blue" texture.
/// \param [in] pID_A - ID of source "alpha" texture.
/// \return index of the texture in array of the converted textures.
size_t PostprocessHelper_GetTextureID_Or_Create(const std::string &pID_R, const std::string &pID_G, const std::string &pID_B, const std::string &pID_A);
/// Separate input list by texture IDs. This step is needed because aiMesh can contain mesh which is use only one texture (or set: diffuse, bump etc).
/// \param [in] pInputList - input list with faces. Some of them can contain color or texture mapping, or both of them, or nothing. Will be cleared after
/// processing.
/// \param [out] pOutputList_Separated - output list of the faces lists. Separated faces list by used texture IDs. Will be cleared before processing.
void PostprocessHelper_SplitFacesByTextureID(std::list<SComplexFace> &pInputList, std::list<std::list<SComplexFace>> &pOutputList_Separated);
/// Check if child elements of node element is metadata and add it to scene node.
/// \param [in] pMetadataList - reference to list with collected metadata.
/// \param [out] pSceneNode - scene node in which metadata will be added.
void Postprocess_AddMetadata(const AMFMetaDataArray &pMetadataList, aiNode &pSceneNode) const;
/// To create aiMesh and aiNode for it from <object>.
/// \param [in] pNodeElement - reference to node element which kept <object> data.
/// \param [out] meshList - reference to a list with all aiMesh of the scene.
/// \param [out] pSceneNode - pointer to place where new aiNode will be created.
void Postprocess_BuildNodeAndObject(const AMFObject &pNodeElement, MeshArray &meshList, aiNode **pSceneNode);
/// Create mesh for every <volume> in <mesh>.
/// \param [in] pNodeElement - reference to node element which kept <mesh> data.
/// \param [in] pVertexCoordinateArray - reference to vertices coordinates for all <volume>'s.
/// \param [in] pVertexColorArray - reference to vertices colors for all <volume>'s. If color for vertex is not set then corresponding member of array
/// contain nullptr.
/// \param [in] pObjectColor - pointer to colors for <object>. If color is not set then argument contain nullptr.
/// \param [in] pMaterialList - reference to a list with defined materials.
/// \param [out] pMeshList - reference to a list with all aiMesh of the scene.
/// \param [out] pSceneNode - reference to aiNode which will own new aiMesh's.
void Postprocess_BuildMeshSet(const AMFMesh &pNodeElement, const std::vector<aiVector3D> &pVertexCoordinateArray,
const std::vector<AMFColor *> &pVertexColorArray, const AMFColor *pObjectColor,
MeshArray &pMeshList, aiNode &pSceneNode);
/// Convert material from \ref CAMFImporter_NodeElement_Material to \ref SPP_Material.
/// \param [in] pMaterial - source CAMFImporter_NodeElement_Material.
void Postprocess_BuildMaterial(const AMFMaterial &pMaterial);
/// Create and add to aiNode's list new part of scene graph defined by <constellation>.
/// \param [in] pConstellation - reference to <constellation> node.
/// \param [out] nodeArray - reference to aiNode's list.
void Postprocess_BuildConstellation(AMFConstellation &pConstellation, NodeArray &nodeArray) const;
/// Build Assimp scene graph in aiScene from collected data.
/// \param [out] pScene - pointer to aiScene where tree will be built.
void Postprocess_BuildScene(aiScene *pScene);
/// Decode Base64-encoded data.
/// \param [in] pInputBase64 - reference to input Base64-encoded string.
/// \param [out] pOutputData - reference to output array for decoded data.
void ParseHelper_Decode_Base64(const std::string &pInputBase64, std::vector<uint8_t> &pOutputData) const;
/// Parse <AMF> node of the file.
void ParseNode_Root();
/// Parse <constellation> node of the file.
void ParseNode_Constellation(XmlNode &node);
/// Parse <instance> node of the file.
void ParseNode_Instance(XmlNode &node);
/// Parse <material> node of the file.
void ParseNode_Material(XmlNode &node);
/// Parse <metadata> node.
void ParseNode_Metadata(XmlNode &node);
/// Parse <object> node of the file.
void ParseNode_Object(XmlNode &node);
/// Parse <texture> node of the file.
void ParseNode_Texture(XmlNode &node);
/// Parse <coordinates> node of the file.
void ParseNode_Coordinates(XmlNode &node);
/// Parse <edge> node of the file.
void ParseNode_Edge(XmlNode &node);
/// Parse <mesh> node of the file.
void ParseNode_Mesh(XmlNode &node);
/// Parse <triangle> node of the file.
void ParseNode_Triangle(XmlNode &node);
/// Parse <vertex> node of the file.
void ParseNode_Vertex(XmlNode &node);
/// Parse <vertices> node of the file.
void ParseNode_Vertices(XmlNode &node);
/// Parse <volume> node of the file.
void ParseNode_Volume(XmlNode &node);
/// Parse <color> node of the file.
void ParseNode_Color(XmlNode &node);
/// Parse <texmap> of <map> node of the file.
/// \param [in] pUseOldName - if true then use old name of node(and children) - <map>, instead of new name - <texmap>.
void ParseNode_TexMap(XmlNode &node, const bool pUseOldName = false);
private:
AMFNodeElementBase *mNodeElement_Cur; ///< Current element.
std::list<AMFNodeElementBase *> mNodeElement_List; ///< All elements of scene graph.
XmlParser *mXmlParser;
std::string mUnit; std::string mUnit;
std::list<SPP_Material> mMaterial_Converted;///< List of converted materials for postprocessing step. std::string mVersion;
std::list<SPP_Texture> mTexture_Converted;///< List of converted textures for postprocessing step. std::list<SPP_Material> mMaterial_Converted; ///< List of converted materials for postprocessing step.
std::list<SPP_Texture> mTexture_Converted; ///< List of converted textures for postprocessing step.
}; };
}// namespace Assimp } // namespace Assimp
#endif // INCLUDED_AI_AMF_IMPORTER_H #endif // INCLUDED_AI_AMF_IMPORTER_H

View File

@ -3,9 +3,7 @@
Open Asset Import Library (assimp) Open Asset Import Library (assimp)
--------------------------------------------------------------------------- ---------------------------------------------------------------------------
Copyright (c) 2006-2020, assimp team Copyright (c) 2006-2024, assimp team
All rights reserved. All rights reserved.
@ -41,58 +39,50 @@ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
--------------------------------------------------------------------------- ---------------------------------------------------------------------------
*/ */
/// \file AMFImporter_Geometry.cpp
/// \brief Parsing data from geometry nodes.
/// \date 2016
/// \author smal.root@gmail.com
#ifndef ASSIMP_BUILD_NO_AMF_IMPORTER #ifndef ASSIMP_BUILD_NO_AMF_IMPORTER
#include "AMFImporter.hpp" #include "AMFImporter.hpp"
#include "AMFImporter_Macro.hpp" #include <assimp/ParsingUtils.h>
namespace Assimp namespace Assimp {
{
// <mesh> // <mesh>
// </mesh> // </mesh>
// A 3D mesh hull. // A 3D mesh hull.
// Multi elements - Yes. // Multi elements - Yes.
// Parent element - <object>. // Parent element - <object>.
void AMFImporter::ParseNode_Mesh() void AMFImporter::ParseNode_Mesh(XmlNode &node) {
{ AMFNodeElementBase *ne = nullptr;
CAMFImporter_NodeElement* ne;
// create new mesh object. // Check for child nodes
ne = new CAMFImporter_NodeElement_Mesh(mNodeElement_Cur); if (0 != ASSIMP_stricmp(node.name(), "mesh")) {
// Check for child nodes return;
if(!mReader->isEmptyElement()) }
{ // create new mesh object.
bool vert_read = false; ne = new AMFMesh(mNodeElement_Cur);
bool found_verts = false, found_volumes = false;
if (!node.empty()) {
ParseHelper_Node_Enter(ne);
pugi::xml_node vertNode = node.child("vertices");
if (!vertNode.empty()) {
ParseNode_Vertices(vertNode);
found_verts = true;
}
ParseHelper_Node_Enter(ne); pugi::xml_node volumeNode = node.child("volume");
MACRO_NODECHECK_LOOPBEGIN("mesh"); if (!volumeNode.empty()) {
if(XML_CheckNode_NameEqual("vertices")) ParseNode_Volume(volumeNode);
{ found_volumes = true;
// Check if data already defined. }
if(vert_read) Throw_MoreThanOnceDefined("vertices", "Only one vertices set can be defined for <mesh>."); ParseHelper_Node_Exit();
// read data and set flag about it }
ParseNode_Vertices();
vert_read = true;
continue; if (!found_verts && !found_volumes) {
} mNodeElement_Cur->Child.push_back(ne);
} // if(!mReader->isEmptyElement()) else
if(XML_CheckNode_NameEqual("volume")) { ParseNode_Volume(); continue; } // and to node element list because its a new object in graph.
MACRO_NODECHECK_LOOPEND("mesh"); mNodeElement_List.push_back(ne);
ParseHelper_Node_Exit();
}// if(!mReader->isEmptyElement())
else
{
mNodeElement_Cur->Child.push_back(ne);// Add element to child list of current element
}// if(!mReader->isEmptyElement()) else
mNodeElement_List.push_back(ne);// and to node element list because its a new object in graph.
} }
// <vertices> // <vertices>
@ -100,27 +90,25 @@ CAMFImporter_NodeElement* ne;
// The list of vertices to be used in defining triangles. // The list of vertices to be used in defining triangles.
// Multi elements - No. // Multi elements - No.
// Parent element - <mesh>. // Parent element - <mesh>.
void AMFImporter::ParseNode_Vertices() void AMFImporter::ParseNode_Vertices(XmlNode &node) {
{ AMFNodeElementBase *ne = nullptr;
CAMFImporter_NodeElement* ne;
// create new mesh object. // create new mesh object.
ne = new CAMFImporter_NodeElement_Vertices(mNodeElement_Cur); ne = new AMFVertices(mNodeElement_Cur);
// Check for child nodes // Check for child nodes
if(!mReader->isEmptyElement()) if (node.empty()) {
{ mNodeElement_Cur->Child.push_back(ne); // Add element to child list of current element
ParseHelper_Node_Enter(ne); return;
MACRO_NODECHECK_LOOPBEGIN("vertices"); }
if(XML_CheckNode_NameEqual("vertex")) { ParseNode_Vertex(); continue; } ParseHelper_Node_Enter(ne);
MACRO_NODECHECK_LOOPEND("vertices"); for (XmlNode &currentNode : node.children()) {
ParseHelper_Node_Exit(); const std::string &currentName = currentNode.name();
}// if(!mReader->isEmptyElement()) if (currentName == "vertex") {
else ParseNode_Vertex(currentNode);
{ }
mNodeElement_Cur->Child.push_back(ne);// Add element to child list of current element }
}// if(!mReader->isEmptyElement()) else ParseHelper_Node_Exit();
mNodeElement_List.push_back(ne); // and to node element list because its a new object in graph.
mNodeElement_List.push_back(ne);// and to node element list because its a new object in graph.
} }
// <vertex> // <vertex>
@ -128,52 +116,35 @@ CAMFImporter_NodeElement* ne;
// A vertex to be referenced in triangles. // A vertex to be referenced in triangles.
// Multi elements - Yes. // Multi elements - Yes.
// Parent element - <vertices>. // Parent element - <vertices>.
void AMFImporter::ParseNode_Vertex() void AMFImporter::ParseNode_Vertex(XmlNode &node) {
{ AMFNodeElementBase *ne = nullptr;
CAMFImporter_NodeElement* ne;
// create new mesh object. // create new mesh object.
ne = new CAMFImporter_NodeElement_Vertex(mNodeElement_Cur); ne = new AMFVertex(mNodeElement_Cur);
// Check for child nodes
if(!mReader->isEmptyElement())
{
bool col_read = false;
bool coord_read = false;
ParseHelper_Node_Enter(ne); // Check for child nodes
MACRO_NODECHECK_LOOPBEGIN("vertex"); pugi::xml_node colorNode = node.child("color");
if(XML_CheckNode_NameEqual("color")) bool col_read = false;
{ bool coord_read = false;
// Check if data already defined. if (!node.empty()) {
if(col_read) Throw_MoreThanOnceDefined("color", "Only one color can be defined for <vertex>."); ParseHelper_Node_Enter(ne);
// read data and set flag about it if (!colorNode.empty()) {
ParseNode_Color(); ParseNode_Color(colorNode);
col_read = true; col_read = true;
}
pugi::xml_node coordNode = node.child("coordinates");
if (!coordNode.empty()) {
ParseNode_Coordinates(coordNode);
coord_read = true;
}
ParseHelper_Node_Exit();
}
continue; if (!coord_read && !col_read) {
} mNodeElement_Cur->Child.push_back(ne); // Add element to child list of current element
}
if(XML_CheckNode_NameEqual("coordinates")) mNodeElement_List.push_back(ne); // and to node element list because its a new object in graph.
{
// Check if data already defined.
if(coord_read) Throw_MoreThanOnceDefined("coordinates", "Only one coordinates set can be defined for <vertex>.");
// read data and set flag about it
ParseNode_Coordinates();
coord_read = true;
continue;
}
if(XML_CheckNode_NameEqual("metadata")) { ParseNode_Metadata(); continue; }
MACRO_NODECHECK_LOOPEND("vertex");
ParseHelper_Node_Exit();
}// if(!mReader->isEmptyElement())
else
{
mNodeElement_Cur->Child.push_back(ne);// Add element to child list of current element
}// if(!mReader->isEmptyElement()) else
mNodeElement_List.push_back(ne);// and to node element list because its a new object in graph.
} }
// <coordinates> // <coordinates>
@ -186,94 +157,76 @@ CAMFImporter_NodeElement* ne;
// <x>, <y>, <z> // <x>, <y>, <z>
// Multi elements - No. // Multi elements - No.
// X, Y, or Z coordinate, respectively, of a vertex position in space. // X, Y, or Z coordinate, respectively, of a vertex position in space.
void AMFImporter::ParseNode_Coordinates() void AMFImporter::ParseNode_Coordinates(XmlNode &node) {
{ AMFNodeElementBase *ne = nullptr;
CAMFImporter_NodeElement* ne; if (!node.empty()) {
ne = new AMFCoordinates(mNodeElement_Cur);
ParseHelper_Node_Enter(ne);
for (XmlNode &currentNode : node.children()) {
// create new color object.
AMFCoordinates &als = *((AMFCoordinates *)ne); // alias for convenience
const std::string &currentName = ai_tolower(currentNode.name());
if (currentName == "x") {
XmlParser::getValueAsReal(currentNode, als.Coordinate.x);
} else if (currentName == "y") {
XmlParser::getValueAsReal(currentNode, als.Coordinate.y);
} else if (currentName == "z") {
XmlParser::getValueAsReal(currentNode, als.Coordinate.z);
}
}
ParseHelper_Node_Exit();
// create new color object. } else {
ne = new CAMFImporter_NodeElement_Coordinates(mNodeElement_Cur); mNodeElement_Cur->Child.push_back(new AMFCoordinates(mNodeElement_Cur));
}
CAMFImporter_NodeElement_Coordinates& als = *((CAMFImporter_NodeElement_Coordinates*)ne);// alias for convenience mNodeElement_List.push_back(ne); // and to node element list because its a new object in graph.
// Check for child nodes
if(!mReader->isEmptyElement())
{
bool read_flag[3] = { false, false, false };
ParseHelper_Node_Enter(ne);
MACRO_NODECHECK_LOOPBEGIN("coordinates");
MACRO_NODECHECK_READCOMP_F("x", read_flag[0], als.Coordinate.x);
MACRO_NODECHECK_READCOMP_F("y", read_flag[1], als.Coordinate.y);
MACRO_NODECHECK_READCOMP_F("z", read_flag[2], als.Coordinate.z);
MACRO_NODECHECK_LOOPEND("coordinates");
ParseHelper_Node_Exit();
// check that all components was defined
if((read_flag[0] && read_flag[1] && read_flag[2]) == 0) throw DeadlyImportError("Not all coordinate's components are defined.");
}// if(!mReader->isEmptyElement())
else
{
mNodeElement_Cur->Child.push_back(ne);// Add element to child list of current element
}// if(!mReader->isEmptyElement()) else
mNodeElement_List.push_back(ne);// and to node element list because its a new object in graph.
} }
// <volume // <volume
// materialid="" - Which material to use. // materialid="" - Which material to use.
// type="" - What this volume describes can be “region” or “support”. If none specified, “object” is assumed. If support, then the geometric // type="" - What this volume describes can be "region" or "support". If none specified, "object" is assumed. If support, then the geometric
// requirements 1-8 listed in section 5 do not need to be maintained. // requirements 1-8 listed in section 5 do not need to be maintained.
// > // >
// </volume> // </volume>
// Defines a volume from the established vertex list. // Defines a volume from the established vertex list.
// Multi elements - Yes. // Multi elements - Yes.
// Parent element - <mesh>. // Parent element - <mesh>.
void AMFImporter::ParseNode_Volume() void AMFImporter::ParseNode_Volume(XmlNode &node) {
{ std::string materialid;
std::string materialid; std::string type;
std::string type; AMFNodeElementBase *ne = new AMFVolume(mNodeElement_Cur);
CAMFImporter_NodeElement* ne;
// Read attributes for node <color>. // Read attributes for node <color>.
MACRO_ATTRREAD_LOOPBEG; // and assign read data
MACRO_ATTRREAD_CHECK_RET("materialid", materialid, mReader->getAttributeValue);
MACRO_ATTRREAD_CHECK_RET("type", type, mReader->getAttributeValue);
MACRO_ATTRREAD_LOOPEND;
// create new object. ((AMFVolume *)ne)->MaterialID = node.attribute("materialid").as_string();
ne = new CAMFImporter_NodeElement_Volume(mNodeElement_Cur);
// and assign read data
((CAMFImporter_NodeElement_Volume*)ne)->MaterialID = materialid;
((CAMFImporter_NodeElement_Volume*)ne)->Type = type;
// Check for child nodes
if(!mReader->isEmptyElement())
{
bool col_read = false;
ParseHelper_Node_Enter(ne); ((AMFVolume *)ne)->Type = type;
MACRO_NODECHECK_LOOPBEGIN("volume"); // Check for child nodes
if(XML_CheckNode_NameEqual("color")) bool col_read = false;
{ if (!node.empty()) {
// Check if data already defined. ParseHelper_Node_Enter(ne);
if(col_read) Throw_MoreThanOnceDefined("color", "Only one color can be defined for <volume>."); for (auto &currentNode : node.children()) {
// read data and set flag about it const std::string currentName = currentNode.name();
ParseNode_Color(); if (currentName == "color") {
col_read = true; if (col_read) Throw_MoreThanOnceDefined(currentName, "color", "Only one color can be defined for <volume>.");
ParseNode_Color(currentNode);
col_read = true;
} else if (currentName == "triangle") {
ParseNode_Triangle(currentNode);
} else if (currentName == "metadata") {
ParseNode_Metadata(currentNode);
} else if (currentName == "volume") {
ParseNode_Metadata(currentNode);
}
}
ParseHelper_Node_Exit();
} else {
mNodeElement_Cur->Child.push_back(ne); // Add element to child list of current element
}
continue; mNodeElement_List.push_back(ne); // and to node element list because its a new object in graph.
}
if(XML_CheckNode_NameEqual("triangle")) { ParseNode_Triangle(); continue; }
if(XML_CheckNode_NameEqual("metadata")) { ParseNode_Metadata(); continue; }
MACRO_NODECHECK_LOOPEND("volume");
ParseHelper_Node_Exit();
}// if(!mReader->isEmptyElement())
else
{
mNodeElement_Cur->Child.push_back(ne);// Add element to child list of current element
}// if(!mReader->isEmptyElement()) else
mNodeElement_List.push_back(ne);// and to node element list because its a new object in graph.
} }
// <triangle> // <triangle>
@ -286,72 +239,46 @@ CAMFImporter_NodeElement* ne;
// <v1>, <v2>, <v3> // <v1>, <v2>, <v3>
// Multi elements - No. // Multi elements - No.
// Index of the desired vertices in a triangle or edge. // Index of the desired vertices in a triangle or edge.
void AMFImporter::ParseNode_Triangle() void AMFImporter::ParseNode_Triangle(XmlNode &node) {
{ AMFNodeElementBase *ne = new AMFTriangle(mNodeElement_Cur);
CAMFImporter_NodeElement* ne;
// create new color object. // create new triangle object.
ne = new CAMFImporter_NodeElement_Triangle(mNodeElement_Cur);
CAMFImporter_NodeElement_Triangle& als = *((CAMFImporter_NodeElement_Triangle*)ne);// alias for convenience AMFTriangle &als = *((AMFTriangle *)ne); // alias for convenience
// Check for child nodes bool col_read = false;
if(!mReader->isEmptyElement()) if (!node.empty()) {
{ ParseHelper_Node_Enter(ne);
bool col_read = false, tex_read = false; std::string v;
bool read_flag[3] = { false, false, false }; for (auto &currentNode : node.children()) {
const std::string currentName = currentNode.name();
if (currentName == "color") {
if (col_read) Throw_MoreThanOnceDefined(currentName, "color", "Only one color can be defined for <triangle>.");
ParseNode_Color(currentNode);
col_read = true;
} else if (currentName == "texmap") {
ParseNode_TexMap(currentNode);
} else if (currentName == "map") {
ParseNode_TexMap(currentNode, true);
} else if (currentName == "v1") {
XmlParser::getValueAsString(currentNode, v);
als.V[0] = std::atoi(v.c_str());
} else if (currentName == "v2") {
XmlParser::getValueAsString(currentNode, v);
als.V[1] = std::atoi(v.c_str());
} else if (currentName == "v3") {
XmlParser::getValueAsString(currentNode, v);
als.V[2] = std::atoi(v.c_str());
}
}
ParseHelper_Node_Exit();
} else {
mNodeElement_Cur->Child.push_back(ne); // Add element to child list of current element
}
ParseHelper_Node_Enter(ne); mNodeElement_List.push_back(ne); // and to node element list because its a new object in graph.
MACRO_NODECHECK_LOOPBEGIN("triangle");
if(XML_CheckNode_NameEqual("color"))
{
// Check if data already defined.
if(col_read) Throw_MoreThanOnceDefined("color", "Only one color can be defined for <triangle>.");
// read data and set flag about it
ParseNode_Color();
col_read = true;
continue;
}
if(XML_CheckNode_NameEqual("texmap"))// new name of node: "texmap".
{
// Check if data already defined.
if(tex_read) Throw_MoreThanOnceDefined("texmap", "Only one texture coordinate can be defined for <triangle>.");
// read data and set flag about it
ParseNode_TexMap();
tex_read = true;
continue;
}
else if(XML_CheckNode_NameEqual("map"))// old name of node: "map".
{
// Check if data already defined.
if(tex_read) Throw_MoreThanOnceDefined("map", "Only one texture coordinate can be defined for <triangle>.");
// read data and set flag about it
ParseNode_TexMap(true);
tex_read = true;
continue;
}
MACRO_NODECHECK_READCOMP_U32("v1", read_flag[0], als.V[0]);
MACRO_NODECHECK_READCOMP_U32("v2", read_flag[1], als.V[1]);
MACRO_NODECHECK_READCOMP_U32("v3", read_flag[2], als.V[2]);
MACRO_NODECHECK_LOOPEND("triangle");
ParseHelper_Node_Exit();
// check that all components was defined
if((read_flag[0] && read_flag[1] && read_flag[2]) == 0) throw DeadlyImportError("Not all vertices of the triangle are defined.");
}// if(!mReader->isEmptyElement())
else
{
mNodeElement_Cur->Child.push_back(ne);// Add element to child list of current element
}// if(!mReader->isEmptyElement()) else
mNodeElement_List.push_back(ne);// and to node element list because its a new object in graph.
} }
}// namespace Assimp } // namespace Assimp
#endif // !ASSIMP_BUILD_NO_AMF_IMPORTER #endif // !ASSIMP_BUILD_NO_AMF_IMPORTER

View File

@ -1,166 +0,0 @@
/*
---------------------------------------------------------------------------
Open Asset Import Library (assimp)
---------------------------------------------------------------------------
Copyright (c) 2006-2020, 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 AMFImporter_Macro.hpp
/// \brief Useful macrodefines.
/// \date 2016
/// \author smal.root@gmail.com
#pragma once
#ifndef AMFIMPORTER_MACRO_HPP_INCLUDED
#define AMFIMPORTER_MACRO_HPP_INCLUDED
/// \def MACRO_ATTRREAD_LOOPBEG
/// Begin of loop that read attributes values.
#define MACRO_ATTRREAD_LOOPBEG \
for(int idx = 0, idx_end = mReader->getAttributeCount(); idx < idx_end; idx++) \
{ \
std::string an(mReader->getAttributeName(idx));
/// \def MACRO_ATTRREAD_LOOPEND
/// End of loop that read attributes values.
#define MACRO_ATTRREAD_LOOPEND \
Throw_IncorrectAttr(an); \
}
/// \def MACRO_ATTRREAD_LOOPEND_WSKIP
/// End of loop that read attributes values. Difference from \ref MACRO_ATTRREAD_LOOPEND in that: current macro skip unknown attributes, but
/// \ref MACRO_ATTRREAD_LOOPEND throw an exception.
#define MACRO_ATTRREAD_LOOPEND_WSKIP \
continue; \
}
/// \def MACRO_ATTRREAD_CHECK_REF
/// Check current attribute name and if it equal to requested then read value. Result write to output variable by reference. If result was read then
/// "continue" will called.
/// \param [in] pAttrName - attribute name.
/// \param [out] pVarName - output variable name.
/// \param [in] pFunction - function which read attribute value and write it to pVarName.
#define MACRO_ATTRREAD_CHECK_REF(pAttrName, pVarName, pFunction) \
if(an == pAttrName) \
{ \
pFunction(idx, pVarName); \
continue; \
}
/// \def MACRO_ATTRREAD_CHECK_RET
/// Check current attribute name and if it equal to requested then read value. Result write to output variable using return value of \ref pFunction.
/// If result was read then "continue" will called.
/// \param [in] pAttrName - attribute name.
/// \param [out] pVarName - output variable name.
/// \param [in] pFunction - function which read attribute value and write it to pVarName.
#define MACRO_ATTRREAD_CHECK_RET(pAttrName, pVarName, pFunction) \
if(an == pAttrName) \
{ \
pVarName = pFunction(idx); \
continue; \
}
/// \def MACRO_NODECHECK_LOOPBEGIN(pNodeName)
/// Begin of loop of parsing child nodes. Do not add ';' at end.
/// \param [in] pNodeName - current node name.
#define MACRO_NODECHECK_LOOPBEGIN(pNodeName) \
do { \
bool close_found = false; \
\
while(mReader->read()) \
{ \
if(mReader->getNodeType() == irr::io::EXN_ELEMENT) \
{
/// \def MACRO_NODECHECK_LOOPEND(pNodeName)
/// End of loop of parsing child nodes.
/// \param [in] pNodeName - current node name.
#define MACRO_NODECHECK_LOOPEND(pNodeName) \
XML_CheckNode_SkipUnsupported(pNodeName); \
}/* if(mReader->getNodeType() == irr::io::EXN_ELEMENT) */ \
else if(mReader->getNodeType() == irr::io::EXN_ELEMENT_END) \
{ \
if(XML_CheckNode_NameEqual(pNodeName)) \
{ \
close_found = true; \
\
break; \
} \
}/* else if(mReader->getNodeType() == irr::io::EXN_ELEMENT_END) */ \
}/* while(mReader->read()) */ \
\
if(!close_found) Throw_CloseNotFound(pNodeName); \
\
} while(false)
/// \def MACRO_NODECHECK_READCOMP_F
/// Check current node name and if it equal to requested then read value. Result write to output variable of type "float".
/// If result was read then "continue" will called. Also check if node data already read then raise exception.
/// \param [in] pNodeName - node name.
/// \param [in, out] pReadFlag - read flag.
/// \param [out] pVarName - output variable name.
#define MACRO_NODECHECK_READCOMP_F(pNodeName, pReadFlag, pVarName) \
if(XML_CheckNode_NameEqual(pNodeName)) \
{ \
/* Check if field already read before. */ \
if(pReadFlag) Throw_MoreThanOnceDefined(pNodeName, "Only one component can be defined."); \
/* Read color component and assign it to object. */ \
pVarName = XML_ReadNode_GetVal_AsFloat(); \
pReadFlag = true; \
continue; \
}
/// \def MACRO_NODECHECK_READCOMP_U32
/// Check current node name and if it equal to requested then read value. Result write to output variable of type "uint32_t".
/// If result was read then "continue" will called. Also check if node data already read then raise exception.
/// \param [in] pNodeName - node name.
/// \param [in, out] pReadFlag - read flag.
/// \param [out] pVarName - output variable name.
#define MACRO_NODECHECK_READCOMP_U32(pNodeName, pReadFlag, pVarName) \
if(XML_CheckNode_NameEqual(pNodeName)) \
{ \
/* Check if field already read before. */ \
if(pReadFlag) Throw_MoreThanOnceDefined(pNodeName, "Only one component can be defined."); \
/* Read color component and assign it to object. */ \
pVarName = XML_ReadNode_GetVal_AsU32(); \
pReadFlag = true; \
continue; \
}
#endif // AMFIMPORTER_MACRO_HPP_INCLUDED

View File

@ -3,9 +3,7 @@
Open Asset Import Library (assimp) Open Asset Import Library (assimp)
--------------------------------------------------------------------------- ---------------------------------------------------------------------------
Copyright (c) 2006-2020, assimp team Copyright (c) 2006-2024, assimp team
All rights reserved. All rights reserved.
@ -49,10 +47,8 @@ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
#ifndef ASSIMP_BUILD_NO_AMF_IMPORTER #ifndef ASSIMP_BUILD_NO_AMF_IMPORTER
#include "AMFImporter.hpp" #include "AMFImporter.hpp"
#include "AMFImporter_Macro.hpp"
namespace Assimp namespace Assimp {
{
// <color // <color
// profile="" - The ICC color space used to interpret the three color channels <r>, <g> and <b>. // profile="" - The ICC color space used to interpret the three color channels <r>, <g> and <b>.
@ -68,51 +64,46 @@ namespace Assimp
// Multi elements - No. // Multi elements - No.
// Red, Greed, Blue and Alpha (transparency) component of a color in sRGB space, values ranging from 0 to 1. The // Red, Greed, Blue and Alpha (transparency) component of a color in sRGB space, values ranging from 0 to 1. The
// values can be specified as constants, or as a formula depending on the coordinates. // values can be specified as constants, or as a formula depending on the coordinates.
void AMFImporter::ParseNode_Color() { void AMFImporter::ParseNode_Color(XmlNode &node) {
std::string profile; if (node.empty()) {
CAMFImporter_NodeElement* ne; return;
}
// Read attributes for node <color>. const std::string &profile = node.attribute("profile").as_string();
MACRO_ATTRREAD_LOOPBEG; bool read_flag[4] = { false, false, false, false };
MACRO_ATTRREAD_CHECK_RET("profile", profile, mReader->getAttributeValue); AMFNodeElementBase *ne = new AMFColor(mNodeElement_Cur);
MACRO_ATTRREAD_LOOPEND; AMFColor &als = *((AMFColor *)ne); // alias for convenience
ParseHelper_Node_Enter(ne);
for (pugi::xml_node &child : node.children()) {
// create new color object.
als.Profile = profile;
// create new color object. const std::string &name = child.name();
ne = new CAMFImporter_NodeElement_Color(mNodeElement_Cur); if ( name == "r") {
read_flag[0] = true;
CAMFImporter_NodeElement_Color& als = *((CAMFImporter_NodeElement_Color*)ne);// alias for convenience XmlParser::getValueAsFloat(child, als.Color.r);
} else if (name == "g") {
als.Profile = profile; read_flag[1] = true;
// Check for child nodes XmlParser::getValueAsFloat(child, als.Color.g);
if(!mReader->isEmptyElement()) } else if (name == "b") {
{ read_flag[2] = true;
bool read_flag[4] = { false, false, false, false }; XmlParser::getValueAsFloat(child, als.Color.b);
} else if (name == "a") {
ParseHelper_Node_Enter(ne); read_flag[3] = true;
MACRO_NODECHECK_LOOPBEGIN("color"); XmlParser::getValueAsFloat(child, als.Color.a);
MACRO_NODECHECK_READCOMP_F("r", read_flag[0], als.Color.r);
MACRO_NODECHECK_READCOMP_F("g", read_flag[1], als.Color.g);
MACRO_NODECHECK_READCOMP_F("b", read_flag[2], als.Color.b);
MACRO_NODECHECK_READCOMP_F("a", read_flag[3], als.Color.a);
MACRO_NODECHECK_LOOPEND("color");
ParseHelper_Node_Exit();
// check that all components was defined
if (!(read_flag[0] && read_flag[1] && read_flag[2])) {
throw DeadlyImportError("Not all color components are defined.");
} }
// check if <a> is absent. Then manually add "a == 1". // check if <a> is absent. Then manually add "a == 1".
if (!read_flag[3]) { if (!read_flag[3]) {
als.Color.a = 1; als.Color.a = 1;
} }
}
als.Composed = false;
mNodeElement_List.push_back(ne); // and to node element list because its a new object in graph.
ParseHelper_Node_Exit();
// check that all components was defined
if (!(read_flag[0] && read_flag[1] && read_flag[2])) {
throw DeadlyImportError("Not all color components are defined.");
} }
else
{
mNodeElement_Cur->Child.push_back(ne);// Add element to child list of current element
}
als.Composed = false;
mNodeElement_List.push_back(ne);// and to node element list because its a new object in graph.
} }
// <material // <material
@ -122,45 +113,25 @@ void AMFImporter::ParseNode_Color() {
// An available material. // An available material.
// Multi elements - Yes. // Multi elements - Yes.
// Parent element - <amf>. // Parent element - <amf>.
void AMFImporter::ParseNode_Material() { void AMFImporter::ParseNode_Material(XmlNode &node) {
std::string id; // create new object and assign read data
CAMFImporter_NodeElement* ne; std::string id = node.attribute("id").as_string();
AMFNodeElementBase *ne = new AMFMaterial(mNodeElement_Cur);
// Read attributes for node <color>. ((AMFMaterial*)ne)->ID = id;
MACRO_ATTRREAD_LOOPBEG;
MACRO_ATTRREAD_CHECK_RET("id", id, mReader->getAttributeValue);
MACRO_ATTRREAD_LOOPEND;
// create new object.
ne = new CAMFImporter_NodeElement_Material(mNodeElement_Cur);
// and assign read data
((CAMFImporter_NodeElement_Material*)ne)->ID = id;
// Check for child nodes // Check for child nodes
if(!mReader->isEmptyElement()) if (!node.empty()) {
{ ParseHelper_Node_Enter(ne);
bool col_read = false; for (pugi::xml_node &child : node.children()) {
const std::string name = child.name();
ParseHelper_Node_Enter(ne); if (name == "color") {
MACRO_NODECHECK_LOOPBEGIN("material"); ParseNode_Color(child);
if(XML_CheckNode_NameEqual("color")) } else if (name == "metadata") {
{ ParseNode_Metadata(child);
// Check if data already defined.
if(col_read) Throw_MoreThanOnceDefined("color", "Only one color can be defined for <material>.");
// read data and set flag about it
ParseNode_Color();
col_read = true;
continue;
} }
}
if(XML_CheckNode_NameEqual("metadata")) { ParseNode_Metadata(); continue; } ParseHelper_Node_Exit();
MACRO_NODECHECK_LOOPEND("material"); } else {
ParseHelper_Node_Exit();
}
else
{
mNodeElement_Cur->Child.push_back(ne);// Add element to child list of current element mNodeElement_Cur->Child.push_back(ne);// Add element to child list of current element
} }
@ -183,51 +154,39 @@ void AMFImporter::ParseNode_Material() {
// then layer by layer. // then layer by layer.
// Multi elements - Yes. // Multi elements - Yes.
// Parent element - <amf>. // Parent element - <amf>.
void AMFImporter::ParseNode_Texture() void AMFImporter::ParseNode_Texture(XmlNode &node) {
{ const std::string id = node.attribute("id").as_string();
std::string id; const uint32_t width = node.attribute("width").as_uint();
uint32_t width = 0; const uint32_t height = node.attribute("height").as_uint();
uint32_t height = 0; uint32_t depth = node.attribute("depth").as_uint();
uint32_t depth = 1; const std::string type = node.attribute("type").as_string();
std::string type; bool tiled = node.attribute("tiled").as_bool();
bool tiled = false;
std::string enc64_data;
// Read attributes for node <color>. if (node.empty()) {
MACRO_ATTRREAD_LOOPBEG; return;
MACRO_ATTRREAD_CHECK_RET("id", id, mReader->getAttributeValue);
MACRO_ATTRREAD_CHECK_RET("width", width, XML_ReadNode_GetAttrVal_AsU32);
MACRO_ATTRREAD_CHECK_RET("height", height, XML_ReadNode_GetAttrVal_AsU32);
MACRO_ATTRREAD_CHECK_RET("depth", depth, XML_ReadNode_GetAttrVal_AsU32);
MACRO_ATTRREAD_CHECK_RET("type", type, mReader->getAttributeValue);
MACRO_ATTRREAD_CHECK_RET("tiled", tiled, XML_ReadNode_GetAttrVal_AsBool);
MACRO_ATTRREAD_LOOPEND;
// create new texture object.
CAMFImporter_NodeElement *ne = new CAMFImporter_NodeElement_Texture(mNodeElement_Cur);
CAMFImporter_NodeElement_Texture& als = *((CAMFImporter_NodeElement_Texture*)ne);// alias for convenience
// Check for child nodes
if (!mReader->isEmptyElement()) {
XML_ReadNode_GetVal_AsString(enc64_data);
} }
// create new texture object.
AMFNodeElementBase *ne = new AMFTexture(mNodeElement_Cur);
AMFTexture& als = *((AMFTexture*)ne);// alias for convenience
std::string enc64_data;
XmlParser::getValueAsString(node, enc64_data);
// Check for child nodes
// check that all components was defined // check that all components was defined
if (id.empty()) { if (id.empty()) {
throw DeadlyImportError("ID for texture must be defined."); throw DeadlyImportError("ID for texture must be defined.");
} }
if (width < 1) { if (width < 1) {
Throw_IncorrectAttrValue("width"); throw DeadlyImportError("Invalid width for texture.");
} }
if (height < 1) { if (height < 1) {
Throw_IncorrectAttrValue("height"); throw DeadlyImportError("Invalid height for texture.");
} }
if (depth < 1) {
Throw_IncorrectAttrValue("depth");
}
if (type != "grayscale") { if (type != "grayscale") {
Throw_IncorrectAttrValue("type"); throw DeadlyImportError("Invalid type for texture.");
} }
if (enc64_data.empty()) { if (enc64_data.empty()) {
throw DeadlyImportError("Texture data not defined."); throw DeadlyImportError("Texture data not defined.");
@ -239,7 +198,9 @@ void AMFImporter::ParseNode_Texture()
als.Depth = depth; als.Depth = depth;
als.Tiled = tiled; als.Tiled = tiled;
ParseHelper_Decode_Base64(enc64_data, als.Data); ParseHelper_Decode_Base64(enc64_data, als.Data);
if (depth == 0) {
depth = (uint32_t)(als.Data.size() / (width * height));
}
// check data size // check data size
if ((width * height * depth) != als.Data.size()) { if ((width * height * depth) != als.Data.size()) {
throw DeadlyImportError("Texture has incorrect data size."); throw DeadlyImportError("Texture has incorrect data size.");
@ -263,57 +224,93 @@ void AMFImporter::ParseNode_Texture()
// <utex1>, <utex2>, <utex3>, <vtex1>, <vtex2>, <vtex3>. Old name: <u1>, <u2>, <u3>, <v1>, <v2>, <v3>. // <utex1>, <utex2>, <utex3>, <vtex1>, <vtex2>, <vtex3>. Old name: <u1>, <u2>, <u3>, <v1>, <v2>, <v3>.
// Multi elements - No. // Multi elements - No.
// Texture coordinates for every vertex of triangle. // Texture coordinates for every vertex of triangle.
void AMFImporter::ParseNode_TexMap(const bool pUseOldName) { void AMFImporter::ParseNode_TexMap(XmlNode &node, const bool pUseOldName) {
std::string rtexid, gtexid, btexid, atexid;
// Read attributes for node <color>. // Read attributes for node <color>.
MACRO_ATTRREAD_LOOPBEG; AMFNodeElementBase *ne = new AMFTexMap(mNodeElement_Cur);
MACRO_ATTRREAD_CHECK_RET("rtexid", rtexid, mReader->getAttributeValue); AMFTexMap &als = *((AMFTexMap *)ne); //
MACRO_ATTRREAD_CHECK_RET("gtexid", gtexid, mReader->getAttributeValue); std::string rtexid, gtexid, btexid, atexid;
MACRO_ATTRREAD_CHECK_RET("btexid", btexid, mReader->getAttributeValue); if (!node.empty()) {
MACRO_ATTRREAD_CHECK_RET("atexid", atexid, mReader->getAttributeValue); for (pugi::xml_attribute &attr : node.attributes()) {
MACRO_ATTRREAD_LOOPEND; const std::string &currentAttr = attr.name();
if (currentAttr == "rtexid") {
rtexid = attr.as_string();
} else if (currentAttr == "gtexid") {
gtexid = attr.as_string();
} else if (currentAttr == "btexid") {
btexid = attr.as_string();
} else if (currentAttr == "atexid") {
atexid = attr.as_string();
}
}
}
// create new texture coordinates object. // create new texture coordinates object, alias for convenience
CAMFImporter_NodeElement *ne = new CAMFImporter_NodeElement_TexMap(mNodeElement_Cur);
CAMFImporter_NodeElement_TexMap& als = *((CAMFImporter_NodeElement_TexMap*)ne);// alias for convenience
// check data // check data
if(rtexid.empty() && gtexid.empty() && btexid.empty()) throw DeadlyImportError("ParseNode_TexMap. At least one texture ID must be defined."); if (rtexid.empty() && gtexid.empty() && btexid.empty()) {
throw DeadlyImportError("ParseNode_TexMap. At least one texture ID must be defined.");
}
// Check for children nodes // Check for children nodes
XML_CheckNode_MustHaveChildren(); if (node.children().begin() == node.children().end()) {
throw DeadlyImportError("Invalid children definition.");
}
// read children nodes // read children nodes
bool read_flag[6] = { false, false, false, false, false, false }; bool read_flag[6] = { false, false, false, false, false, false };
ParseHelper_Node_Enter(ne); if (!pUseOldName) {
if(!pUseOldName) ParseHelper_Node_Enter(ne);
{ for ( XmlNode &currentNode : node.children()) {
MACRO_NODECHECK_LOOPBEGIN("texmap"); const std::string &name = currentNode.name();
MACRO_NODECHECK_READCOMP_F("utex1", read_flag[0], als.TextureCoordinate[0].x); if (name == "utex1") {
MACRO_NODECHECK_READCOMP_F("utex2", read_flag[1], als.TextureCoordinate[1].x); read_flag[0] = true;
MACRO_NODECHECK_READCOMP_F("utex3", read_flag[2], als.TextureCoordinate[2].x); XmlParser::getValueAsReal(node, als.TextureCoordinate[0].x);
MACRO_NODECHECK_READCOMP_F("vtex1", read_flag[3], als.TextureCoordinate[0].y); } else if (name == "utex2") {
MACRO_NODECHECK_READCOMP_F("vtex2", read_flag[4], als.TextureCoordinate[1].y); read_flag[1] = true;
MACRO_NODECHECK_READCOMP_F("vtex3", read_flag[5], als.TextureCoordinate[2].y); XmlParser::getValueAsReal(node, als.TextureCoordinate[1].x);
MACRO_NODECHECK_LOOPEND("texmap"); } else if (name == "utex3") {
read_flag[2] = true;
XmlParser::getValueAsReal(node, als.TextureCoordinate[2].x);
} else if (name == "vtex1") {
read_flag[3] = true;
XmlParser::getValueAsReal(node, als.TextureCoordinate[0].y);
} else if (name == "vtex2") {
read_flag[4] = true;
XmlParser::getValueAsReal(node, als.TextureCoordinate[1].y);
} else if (name == "vtex3") {
read_flag[5] = true;
XmlParser::getValueAsReal(node, als.TextureCoordinate[2].y);
}
}
ParseHelper_Node_Exit();
} else {
for (pugi::xml_attribute &attr : node.attributes()) {
const std::string name = attr.name();
if (name == "u") {
read_flag[0] = true;
als.TextureCoordinate[0].x = attr.as_float();
} else if (name == "u2") {
read_flag[1] = true;
als.TextureCoordinate[1].x = attr.as_float();
} else if (name == "u3") {
read_flag[2] = true;
als.TextureCoordinate[2].x = attr.as_float();
} else if (name == "v1") {
read_flag[3] = true;
als.TextureCoordinate[0].y = attr.as_float();
} else if (name == "v2") {
read_flag[4] = true;
als.TextureCoordinate[1].y = attr.as_float();
} else if (name == "v3") {
read_flag[5] = true;
als.TextureCoordinate[0].y = attr.as_float();
}
}
} }
else
{
MACRO_NODECHECK_LOOPBEGIN("map");
MACRO_NODECHECK_READCOMP_F("u1", read_flag[0], als.TextureCoordinate[0].x);
MACRO_NODECHECK_READCOMP_F("u2", read_flag[1], als.TextureCoordinate[1].x);
MACRO_NODECHECK_READCOMP_F("u3", read_flag[2], als.TextureCoordinate[2].x);
MACRO_NODECHECK_READCOMP_F("v1", read_flag[3], als.TextureCoordinate[0].y);
MACRO_NODECHECK_READCOMP_F("v2", read_flag[4], als.TextureCoordinate[1].y);
MACRO_NODECHECK_READCOMP_F("v3", read_flag[5], als.TextureCoordinate[2].y);
MACRO_NODECHECK_LOOPEND("map");
}// if(!pUseOldName) else
ParseHelper_Node_Exit();
// check that all components was defined // check that all components was defined
if(!(read_flag[0] && read_flag[1] && read_flag[2] && read_flag[3] && read_flag[4] && read_flag[5])) if (!(read_flag[0] && read_flag[1] && read_flag[2] && read_flag[3] && read_flag[4] && read_flag[5])) {
throw DeadlyImportError("Not all texture coordinates are defined."); throw DeadlyImportError("Not all texture coordinates are defined.");
}
// copy attributes data // copy attributes data
als.TextureID_R = rtexid; als.TextureID_R = rtexid;
@ -321,7 +318,7 @@ void AMFImporter::ParseNode_TexMap(const bool pUseOldName) {
als.TextureID_B = btexid; als.TextureID_B = btexid;
als.TextureID_A = atexid; als.TextureID_A = atexid;
mNodeElement_List.push_back(ne);// add to node element list because its a new object in graph. mNodeElement_List.push_back(ne);
} }
}// namespace Assimp }// namespace Assimp

View File

@ -3,9 +3,7 @@
Open Asset Import Library (assimp) Open Asset Import Library (assimp)
--------------------------------------------------------------------------- ---------------------------------------------------------------------------
Copyright (c) 2006-2020, assimp team Copyright (c) 2006-2024, assimp team
All rights reserved. All rights reserved.
@ -50,86 +48,76 @@ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
#ifndef INCLUDED_AI_AMF_IMPORTER_NODE_H #ifndef INCLUDED_AI_AMF_IMPORTER_NODE_H
#define INCLUDED_AI_AMF_IMPORTER_NODE_H #define INCLUDED_AI_AMF_IMPORTER_NODE_H
// Header files, stdlib. // Header files, Assimp.
#include <assimp/scene.h>
#include <assimp/types.h>
#include <list> #include <list>
#include <string> #include <string>
#include <vector> #include <vector>
// Header files, Assimp.
#include "assimp/types.h"
#include "assimp/scene.h"
/// \class CAMFImporter_NodeElement
/// Base class for elements of nodes. /// Base class for elements of nodes.
class CAMFImporter_NodeElement { class AMFNodeElementBase {
public: public:
/// Define what data type contain node element. /// Define what data type contain node element.
enum EType { enum EType {
ENET_Color, ///< Color element: <color>. ENET_Color, ///< Color element: <color>.
ENET_Constellation,///< Grouping element: <constellation>. ENET_Constellation, ///< Grouping element: <constellation>.
ENET_Coordinates, ///< Coordinates element: <coordinates>. ENET_Coordinates, ///< Coordinates element: <coordinates>.
ENET_Edge, ///< Edge element: <edge>. ENET_Edge, ///< Edge element: <edge>.
ENET_Instance, ///< Grouping element: <constellation>. ENET_Instance, ///< Grouping element: <constellation>.
ENET_Material, ///< Material element: <material>. ENET_Material, ///< Material element: <material>.
ENET_Metadata, ///< Metadata element: <metadata>. ENET_Metadata, ///< Metadata element: <metadata>.
ENET_Mesh, ///< Metadata element: <mesh>. ENET_Mesh, ///< Metadata element: <mesh>.
ENET_Object, ///< Element which hold object: <object>. ENET_Object, ///< Element which hold object: <object>.
ENET_Root, ///< Root element: <amf>. ENET_Root, ///< Root element: <amf>.
ENET_Triangle, ///< Triangle element: <triangle>. ENET_Triangle, ///< Triangle element: <triangle>.
ENET_TexMap, ///< Texture coordinates element: <texmap> or <map>. ENET_TexMap, ///< Texture coordinates element: <texmap> or <map>.
ENET_Texture, ///< Texture element: <texture>. ENET_Texture, ///< Texture element: <texture>.
ENET_Vertex, ///< Vertex element: <vertex>. ENET_Vertex, ///< Vertex element: <vertex>.
ENET_Vertices, ///< Vertex element: <vertices>. ENET_Vertices, ///< Vertex element: <vertices>.
ENET_Volume, ///< Volume element: <volume>. ENET_Volume, ///< Volume element: <volume>.
ENET_Invalid ///< Element has invalid type and possible contain invalid data. ENET_Invalid ///< Element has invalid type and possible contain invalid data.
}; };
const EType Type;///< Type of element. const EType Type; ///< Type of element.
std::string ID;///< ID of element. std::string ID; ///< ID of element.
CAMFImporter_NodeElement* Parent;///< Parent element. If nullptr then this node is root. AMFNodeElementBase *Parent; ///< Parent element. If nullptr then this node is root.
std::list<CAMFImporter_NodeElement*> Child;///< Child elements. std::list<AMFNodeElementBase *> Child; ///< Child elements.
public: /// Destructor, virtual.. public: /// Destructor, virtual..
virtual ~CAMFImporter_NodeElement() { virtual ~AMFNodeElementBase() = default;
// empty
}
/// Disabled copy constructor and co. /// Disabled copy constructor and co.
CAMFImporter_NodeElement(const CAMFImporter_NodeElement& pNodeElement) = delete; AMFNodeElementBase(const AMFNodeElementBase &pNodeElement) = delete;
CAMFImporter_NodeElement(CAMFImporter_NodeElement&&) = delete; AMFNodeElementBase(AMFNodeElementBase &&) = delete;
CAMFImporter_NodeElement& operator=(const CAMFImporter_NodeElement& pNodeElement) = delete; AMFNodeElementBase &operator=(const AMFNodeElementBase &pNodeElement) = delete;
CAMFImporter_NodeElement() = delete; AMFNodeElementBase() = delete;
protected: protected:
/// In constructor inheritor must set element type. /// In constructor inheritor must set element type.
/// \param [in] pType - element type. /// \param [in] pType - element type.
/// \param [in] pParent - parent element. /// \param [in] pParent - parent element.
CAMFImporter_NodeElement(const EType pType, CAMFImporter_NodeElement* pParent) AMFNodeElementBase(const EType pType, AMFNodeElementBase *pParent) :
: Type(pType) Type(pType), Parent(pParent) {
, ID() // empty
, Parent(pParent) }
, Child() { }; // class IAMFImporter_NodeElement
// empty
}
};// class IAMFImporter_NodeElement
/// \struct CAMFImporter_NodeElement_Constellation
/// A collection of objects or constellations with specific relative locations. /// A collection of objects or constellations with specific relative locations.
struct CAMFImporter_NodeElement_Constellation : public CAMFImporter_NodeElement { struct AMFConstellation : public AMFNodeElementBase {
/// Constructor. /// Constructor.
/// \param [in] pParent - pointer to parent node. /// \param [in] pParent - pointer to parent node.
CAMFImporter_NodeElement_Constellation(CAMFImporter_NodeElement* pParent) AMFConstellation(AMFNodeElementBase *pParent) :
: CAMFImporter_NodeElement(ENET_Constellation, pParent) AMFNodeElementBase(ENET_Constellation, pParent) {}
{}
};// struct CAMFImporter_NodeElement_Constellation }; // struct CAMFImporter_NodeElement_Constellation
/// \struct CAMFImporter_NodeElement_Instance
/// Part of constellation. /// Part of constellation.
struct CAMFImporter_NodeElement_Instance : public CAMFImporter_NodeElement { struct AMFInstance : public AMFNodeElementBase {
std::string ObjectID;///< ID of object for instantiation. std::string ObjectID; ///< ID of object for instantiation.
/// \var Delta - The distance of translation in the x, y, or z direction, respectively, in the referenced object's coordinate system, to /// \var Delta - The distance of translation in the x, y, or z direction, respectively, in the referenced object's coordinate system, to
/// create an instance of the object in the current constellation. /// create an instance of the object in the current constellation.
aiVector3D Delta; aiVector3D Delta;
@ -140,201 +128,161 @@ struct CAMFImporter_NodeElement_Instance : public CAMFImporter_NodeElement {
/// Constructor. /// Constructor.
/// \param [in] pParent - pointer to parent node. /// \param [in] pParent - pointer to parent node.
CAMFImporter_NodeElement_Instance(CAMFImporter_NodeElement* pParent) AMFInstance(AMFNodeElementBase *pParent) :
: CAMFImporter_NodeElement(ENET_Instance, pParent) AMFNodeElementBase(ENET_Instance, pParent) {}
{}
}; };
/// \struct CAMFImporter_NodeElement_Metadata
/// Structure that define metadata node. /// Structure that define metadata node.
struct CAMFImporter_NodeElement_Metadata : public CAMFImporter_NodeElement { struct AMFMetadata : public AMFNodeElementBase {
std::string Type;///< Type of "Value". std::string Type; ///< Type of "Value".
std::string Value;///< Value. std::string Value; ///< Value.
/// Constructor. /// Constructor.
/// \param [in] pParent - pointer to parent node. /// \param [in] pParent - pointer to parent node.
CAMFImporter_NodeElement_Metadata(CAMFImporter_NodeElement* pParent) AMFMetadata(AMFNodeElementBase *pParent) :
: CAMFImporter_NodeElement(ENET_Metadata, pParent) AMFNodeElementBase(ENET_Metadata, pParent) {}
{}
}; };
/// \struct CAMFImporter_NodeElement_Root
/// Structure that define root node. /// Structure that define root node.
struct CAMFImporter_NodeElement_Root : public CAMFImporter_NodeElement { struct AMFRoot : public AMFNodeElementBase {
std::string Unit;///< The units to be used. May be "inch", "millimeter", "meter", "feet", or "micron". std::string Unit; ///< The units to be used. May be "inch", "millimeter", "meter", "feet", or "micron".
std::string Version;///< Version of format. std::string Version; ///< Version of format.
/// Constructor. /// Constructor.
/// \param [in] pParent - pointer to parent node. /// \param [in] pParent - pointer to parent node.
CAMFImporter_NodeElement_Root(CAMFImporter_NodeElement* pParent) AMFRoot(AMFNodeElementBase *pParent) :
: CAMFImporter_NodeElement(ENET_Root, pParent) AMFNodeElementBase(ENET_Root, pParent) {}
{}
}; };
/// \struct CAMFImporter_NodeElement_Color
/// Structure that define object node. /// Structure that define object node.
struct CAMFImporter_NodeElement_Color : public CAMFImporter_NodeElement { struct AMFColor : public AMFNodeElementBase {
bool Composed; ///< Type of color stored: if true then look for formula in \ref Color_Composed[4], else - in \ref Color. bool Composed; ///< Type of color stored: if true then look for formula in \ref Color_Composed[4], else - in \ref Color.
std::string Color_Composed[4]; ///< By components formulas of composed color. [0..3] - RGBA. std::string Color_Composed[4]; ///< By components formulas of composed color. [0..3] - RGBA.
aiColor4D Color; ///< Constant color. aiColor4D Color; ///< Constant color.
std::string Profile; ///< The ICC color space used to interpret the three color channels r, g and b.. std::string Profile; ///< The ICC color space used to interpret the three color channels r, g and b..
/// @brief Constructor. /// @brief Constructor.
/// @param [in] pParent - pointer to parent node. /// @param [in] pParent - pointer to parent node.
CAMFImporter_NodeElement_Color(CAMFImporter_NodeElement* pParent) AMFColor(AMFNodeElementBase *pParent) :
: CAMFImporter_NodeElement(ENET_Color, pParent) AMFNodeElementBase(ENET_Color, pParent), Composed(false), Color() {
, Composed( false ) // empty
, Color() }
, Profile() {
// empty
}
}; };
/// \struct CAMFImporter_NodeElement_Material
/// Structure that define material node. /// Structure that define material node.
struct CAMFImporter_NodeElement_Material : public CAMFImporter_NodeElement { struct AMFMaterial : public AMFNodeElementBase {
/// Constructor. /// Constructor.
/// \param [in] pParent - pointer to parent node. /// \param [in] pParent - pointer to parent node.
CAMFImporter_NodeElement_Material(CAMFImporter_NodeElement* pParent) AMFMaterial(AMFNodeElementBase *pParent) :
: CAMFImporter_NodeElement(ENET_Material, pParent) AMFNodeElementBase(ENET_Material, pParent) {}
{}
}; };
/// \struct CAMFImporter_NodeElement_Object
/// Structure that define object node. /// Structure that define object node.
struct CAMFImporter_NodeElement_Object : public CAMFImporter_NodeElement { struct AMFObject : public AMFNodeElementBase {
/// Constructor. /// Constructor.
/// \param [in] pParent - pointer to parent node. /// \param [in] pParent - pointer to parent node.
CAMFImporter_NodeElement_Object(CAMFImporter_NodeElement* pParent) AMFObject(AMFNodeElementBase *pParent) :
: CAMFImporter_NodeElement(ENET_Object, pParent) AMFNodeElementBase(ENET_Object, pParent) {}
{}
}; };
/// \struct CAMFImporter_NodeElement_Mesh /// \struct CAMFImporter_NodeElement_Mesh
/// Structure that define mesh node. /// Structure that define mesh node.
struct CAMFImporter_NodeElement_Mesh : public CAMFImporter_NodeElement { struct AMFMesh : public AMFNodeElementBase {
/// Constructor. /// Constructor.
/// \param [in] pParent - pointer to parent node. /// \param [in] pParent - pointer to parent node.
CAMFImporter_NodeElement_Mesh(CAMFImporter_NodeElement* pParent) AMFMesh(AMFNodeElementBase *pParent) :
: CAMFImporter_NodeElement(ENET_Mesh, pParent) AMFNodeElementBase(ENET_Mesh, pParent) {}
{}
}; };
/// \struct CAMFImporter_NodeElement_Vertex
/// Structure that define vertex node. /// Structure that define vertex node.
struct CAMFImporter_NodeElement_Vertex : public CAMFImporter_NodeElement { struct AMFVertex : public AMFNodeElementBase {
/// Constructor. /// Constructor.
/// \param [in] pParent - pointer to parent node. /// \param [in] pParent - pointer to parent node.
CAMFImporter_NodeElement_Vertex(CAMFImporter_NodeElement* pParent) AMFVertex(AMFNodeElementBase *pParent) :
: CAMFImporter_NodeElement(ENET_Vertex, pParent) AMFNodeElementBase(ENET_Vertex, pParent) {}
{}
}; };
/// \struct CAMFImporter_NodeElement_Edge
/// Structure that define edge node. /// Structure that define edge node.
struct CAMFImporter_NodeElement_Edge : public CAMFImporter_NodeElement { struct AMFEdge : public AMFNodeElementBase {
/// Constructor. /// Constructor.
/// \param [in] pParent - pointer to parent node. /// \param [in] pParent - pointer to parent node.
CAMFImporter_NodeElement_Edge(CAMFImporter_NodeElement* pParent) AMFEdge(AMFNodeElementBase *pParent) :
: CAMFImporter_NodeElement(ENET_Edge, pParent) AMFNodeElementBase(ENET_Edge, pParent) {}
{}
}; };
/// \struct CAMFImporter_NodeElement_Vertices
/// Structure that define vertices node. /// Structure that define vertices node.
struct CAMFImporter_NodeElement_Vertices : public CAMFImporter_NodeElement { struct AMFVertices : public AMFNodeElementBase {
/// Constructor. /// Constructor.
/// \param [in] pParent - pointer to parent node. /// \param [in] pParent - pointer to parent node.
CAMFImporter_NodeElement_Vertices(CAMFImporter_NodeElement* pParent) AMFVertices(AMFNodeElementBase *pParent) :
: CAMFImporter_NodeElement(ENET_Vertices, pParent) AMFNodeElementBase(ENET_Vertices, pParent) {}
{}
}; };
/// \struct CAMFImporter_NodeElement_Volume
/// Structure that define volume node. /// Structure that define volume node.
struct CAMFImporter_NodeElement_Volume : public CAMFImporter_NodeElement { struct AMFVolume : public AMFNodeElementBase {
std::string MaterialID;///< Which material to use. std::string MaterialID; ///< Which material to use.
std::string Type;///< What this volume describes can be “region” or “support”. If none specified, “object” is assumed. std::string Type; ///< What this volume describes can be "region" or "support". If none specified, "object" is assumed.
/// Constructor. /// Constructor.
/// \param [in] pParent - pointer to parent node. /// \param [in] pParent - pointer to parent node.
CAMFImporter_NodeElement_Volume(CAMFImporter_NodeElement* pParent) AMFVolume(AMFNodeElementBase *pParent) :
: CAMFImporter_NodeElement(ENET_Volume, pParent) AMFNodeElementBase(ENET_Volume, pParent) {}
{}
}; };
/// \struct CAMFImporter_NodeElement_Coordinates
/// Structure that define coordinates node. /// Structure that define coordinates node.
struct CAMFImporter_NodeElement_Coordinates : public CAMFImporter_NodeElement struct AMFCoordinates : public AMFNodeElementBase {
{ aiVector3D Coordinate; ///< Coordinate.
aiVector3D Coordinate;///< Coordinate.
/// Constructor. /// Constructor.
/// \param [in] pParent - pointer to parent node. /// \param [in] pParent - pointer to parent node.
CAMFImporter_NodeElement_Coordinates(CAMFImporter_NodeElement* pParent) AMFCoordinates(AMFNodeElementBase *pParent) :
: CAMFImporter_NodeElement(ENET_Coordinates, pParent) AMFNodeElementBase(ENET_Coordinates, pParent) {}
{}
}; };
/// \struct CAMFImporter_NodeElement_TexMap
/// Structure that define texture coordinates node. /// Structure that define texture coordinates node.
struct CAMFImporter_NodeElement_TexMap : public CAMFImporter_NodeElement { struct AMFTexMap : public AMFNodeElementBase {
aiVector3D TextureCoordinate[3];///< Texture coordinates. aiVector3D TextureCoordinate[3]; ///< Texture coordinates.
std::string TextureID_R;///< Texture ID for red color component. std::string TextureID_R; ///< Texture ID for red color component.
std::string TextureID_G;///< Texture ID for green color component. std::string TextureID_G; ///< Texture ID for green color component.
std::string TextureID_B;///< Texture ID for blue color component. std::string TextureID_B; ///< Texture ID for blue color component.
std::string TextureID_A;///< Texture ID for alpha color component. std::string TextureID_A; ///< Texture ID for alpha color component.
/// Constructor. /// Constructor.
/// \param [in] pParent - pointer to parent node. /// \param [in] pParent - pointer to parent node.
CAMFImporter_NodeElement_TexMap(CAMFImporter_NodeElement* pParent) AMFTexMap(AMFNodeElementBase *pParent) :
: CAMFImporter_NodeElement(ENET_TexMap, pParent) AMFNodeElementBase(ENET_TexMap, pParent), TextureCoordinate{} {
, TextureCoordinate{} // empty
, TextureID_R() }
, TextureID_G()
, TextureID_B()
, TextureID_A() {
// empty
}
}; };
/// \struct CAMFImporter_NodeElement_Triangle
/// Structure that define triangle node. /// Structure that define triangle node.
struct CAMFImporter_NodeElement_Triangle : public CAMFImporter_NodeElement { struct AMFTriangle : public AMFNodeElementBase {
size_t V[3];///< Triangle vertices. size_t V[3]; ///< Triangle vertices.
/// Constructor. /// Constructor.
/// \param [in] pParent - pointer to parent node. /// \param [in] pParent - pointer to parent node.
CAMFImporter_NodeElement_Triangle(CAMFImporter_NodeElement* pParent) AMFTriangle(AMFNodeElementBase *pParent) :
: CAMFImporter_NodeElement(ENET_Triangle, pParent) { AMFNodeElementBase(ENET_Triangle, pParent) {
// empty // empty
} }
}; };
/// Structure that define texture node. /// Structure that define texture node.
struct CAMFImporter_NodeElement_Texture : public CAMFImporter_NodeElement { struct AMFTexture : public AMFNodeElementBase {
size_t Width, Height, Depth;///< Size of the texture. size_t Width, Height, Depth; ///< Size of the texture.
std::vector<uint8_t> Data;///< Data of the texture. std::vector<uint8_t> Data; ///< Data of the texture.
bool Tiled; bool Tiled;
/// Constructor. /// Constructor.
/// \param [in] pParent - pointer to parent node. /// \param [in] pParent - pointer to parent node.
CAMFImporter_NodeElement_Texture(CAMFImporter_NodeElement* pParent) AMFTexture(AMFNodeElementBase *pParent) :
: CAMFImporter_NodeElement(ENET_Texture, pParent) AMFNodeElementBase(ENET_Texture, pParent), Width(0), Height(0), Depth(0), Data(), Tiled(false) {
, Width( 0 ) // empty
, Height( 0 ) }
, Depth( 0 )
, Data()
, Tiled( false ){
// empty
}
}; };
#endif // INCLUDED_AI_AMF_IMPORTER_NODE_H #endif // INCLUDED_AI_AMF_IMPORTER_NODE_H

View File

@ -3,9 +3,7 @@
Open Asset Import Library (assimp) Open Asset Import Library (assimp)
--------------------------------------------------------------------------- ---------------------------------------------------------------------------
Copyright (c) 2006-2020, assimp team Copyright (c) 2006-2024, assimp team
All rights reserved. All rights reserved.
@ -50,12 +48,10 @@ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
#include "AMFImporter.hpp" #include "AMFImporter.hpp"
// Header files, Assimp.
#include <assimp/SceneCombiner.h> #include <assimp/SceneCombiner.h>
#include <assimp/StandardShapes.h> #include <assimp/StandardShapes.h>
#include <assimp/StringUtils.h> #include <assimp/StringUtils.h>
// Header files, stdlib.
#include <iterator> #include <iterator>
namespace Assimp { namespace Assimp {
@ -66,12 +62,14 @@ aiColor4D AMFImporter::SPP_Material::GetColor(const float /*pX*/, const float /*
// Check if stored data are supported. // Check if stored data are supported.
if (!Composition.empty()) { if (!Composition.empty()) {
throw DeadlyImportError("IME. GetColor for composition"); throw DeadlyImportError("IME. GetColor for composition");
} else if (Color->Composed) {
throw DeadlyImportError("IME. GetColor, composed color");
} else {
tcol = Color->Color;
} }
if (Color->Composed) {
throw DeadlyImportError("IME. GetColor, composed color");
}
tcol = Color->Color;
// Check if default color must be used // Check if default color must be used
if ((tcol.r == 0) && (tcol.g == 0) && (tcol.b == 0) && (tcol.a == 0)) { if ((tcol.r == 0) && (tcol.g == 0) && (tcol.b == 0) && (tcol.a == 0)) {
tcol.r = 0.5f; tcol.r = 0.5f;
@ -83,61 +81,61 @@ aiColor4D AMFImporter::SPP_Material::GetColor(const float /*pX*/, const float /*
return tcol; return tcol;
} }
void AMFImporter::PostprocessHelper_CreateMeshDataArray(const CAMFImporter_NodeElement_Mesh &pNodeElement, std::vector<aiVector3D> &pVertexCoordinateArray, void AMFImporter::PostprocessHelper_CreateMeshDataArray(const AMFMesh &nodeElement, std::vector<aiVector3D> &vertexCoordinateArray,
std::vector<CAMFImporter_NodeElement_Color *> &pVertexColorArray) const { std::vector<AMFColor *> &pVertexColorArray) const {
CAMFImporter_NodeElement_Vertices *vn = nullptr; AMFVertices *vn = nullptr;
size_t col_idx; size_t col_idx;
// All data stored in "vertices", search for it. // All data stored in "vertices", search for it.
for (CAMFImporter_NodeElement *ne_child : pNodeElement.Child) { for (AMFNodeElementBase *ne_child : nodeElement.Child) {
if (ne_child->Type == CAMFImporter_NodeElement::ENET_Vertices) vn = (CAMFImporter_NodeElement_Vertices *)ne_child; if (ne_child->Type == AMFNodeElementBase::ENET_Vertices) {
vn = (AMFVertices*)ne_child;
}
} }
// If "vertices" not found then no work for us. // If "vertices" not found then no work for us.
if (vn == nullptr) return; if (vn == nullptr) {
return;
}
pVertexCoordinateArray.reserve(vn->Child.size()); // all coordinates stored as child and we need to reserve space for future push_back's. // all coordinates stored as child and we need to reserve space for future push_back's.
pVertexColorArray.resize(vn->Child.size()); // colors count equal vertices count. vertexCoordinateArray.reserve(vn->Child.size());
// colors count equal vertices count.
pVertexColorArray.resize(vn->Child.size());
col_idx = 0; col_idx = 0;
// Inside vertices collect all data and place to arrays // Inside vertices collect all data and place to arrays
for (CAMFImporter_NodeElement *vn_child : vn->Child) { for (AMFNodeElementBase *vn_child : vn->Child) {
// vertices, colors // vertices, colors
if (vn_child->Type == CAMFImporter_NodeElement::ENET_Vertex) { if (vn_child->Type == AMFNodeElementBase::ENET_Vertex) {
// by default clear color for current vertex // by default clear color for current vertex
pVertexColorArray[col_idx] = nullptr; pVertexColorArray[col_idx] = nullptr;
for (CAMFImporter_NodeElement *vtx : vn_child->Child) { for (AMFNodeElementBase *vtx : vn_child->Child) {
if (vtx->Type == CAMFImporter_NodeElement::ENET_Coordinates) { if (vtx->Type == AMFNodeElementBase::ENET_Coordinates) {
pVertexCoordinateArray.push_back(((CAMFImporter_NodeElement_Coordinates *)vtx)->Coordinate); vertexCoordinateArray.push_back(((AMFCoordinates *)vtx)->Coordinate);
continue; continue;
} }
if (vtx->Type == CAMFImporter_NodeElement::ENET_Color) { if (vtx->Type == AMFNodeElementBase::ENET_Color) {
pVertexColorArray[col_idx] = (CAMFImporter_NodeElement_Color *)vtx; pVertexColorArray[col_idx] = (AMFColor *)vtx;
continue; continue;
} }
} // for(CAMFImporter_NodeElement* vtx: vn_child->Child) }
col_idx++; ++col_idx;
} // if(vn_child->Type == CAMFImporter_NodeElement::ENET_Vertex) }
} // for(CAMFImporter_NodeElement* vn_child: vn->Child) }
} }
size_t AMFImporter::PostprocessHelper_GetTextureID_Or_Create(const std::string &pID_R, const std::string &pID_G, const std::string &pID_B, size_t AMFImporter::PostprocessHelper_GetTextureID_Or_Create(const std::string &r, const std::string &g, const std::string &b, const std::string &a) {
const std::string &pID_A) { if (r.empty() && g.empty() && b.empty() && a.empty()) {
size_t TextureConverted_Index;
std::string TextureConverted_ID;
// check input data
if (pID_R.empty() && pID_G.empty() && pID_B.empty() && pID_A.empty())
throw DeadlyImportError("PostprocessHelper_GetTextureID_Or_Create. At least one texture ID must be defined."); throw DeadlyImportError("PostprocessHelper_GetTextureID_Or_Create. At least one texture ID must be defined.");
}
// Create ID std::string TextureConverted_ID = r + "_" + g + "_" + b + "_" + a;
TextureConverted_ID = pID_R + "_" + pID_G + "_" + pID_B + "_" + pID_A; size_t TextureConverted_Index = 0;
// Check if texture specified by set of IDs is converted already.
TextureConverted_Index = 0;
for (const SPP_Texture &tex_convd : mTexture_Converted) { for (const SPP_Texture &tex_convd : mTexture_Converted) {
if (tex_convd.ID == TextureConverted_ID) { if (tex_convd.ID == TextureConverted_ID) {
return TextureConverted_Index; return TextureConverted_Index;
@ -146,52 +144,60 @@ size_t AMFImporter::PostprocessHelper_GetTextureID_Or_Create(const std::string &
} }
} }
//
// Converted texture not found, create it. // Converted texture not found, create it.
// AMFTexture *src_texture[4] {
CAMFImporter_NodeElement_Texture *src_texture[4]{ nullptr }; nullptr
std::vector<CAMFImporter_NodeElement_Texture *> src_texture_4check; };
std::vector<AMFTexture *> src_texture_4check;
SPP_Texture converted_texture; SPP_Texture converted_texture;
{ // find all specified source textures { // find all specified source textures
CAMFImporter_NodeElement *t_tex; AMFNodeElementBase *t_tex = nullptr;
// R // R
if (!pID_R.empty()) { if (!r.empty()) {
if (!Find_NodeElement(pID_R, CAMFImporter_NodeElement::ENET_Texture, &t_tex)) Throw_ID_NotFound(pID_R); if (!Find_NodeElement(r, AMFNodeElementBase::EType::ENET_Texture, &t_tex)) {
Throw_ID_NotFound(r);
}
src_texture[0] = (CAMFImporter_NodeElement_Texture *)t_tex; src_texture[0] = (AMFTexture *)t_tex;
src_texture_4check.push_back((CAMFImporter_NodeElement_Texture *)t_tex); src_texture_4check.push_back((AMFTexture *)t_tex);
} else { } else {
src_texture[0] = nullptr; src_texture[0] = nullptr;
} }
// G // G
if (!pID_G.empty()) { if (!g.empty()) {
if (!Find_NodeElement(pID_G, CAMFImporter_NodeElement::ENET_Texture, &t_tex)) Throw_ID_NotFound(pID_G); if (!Find_NodeElement(g, AMFNodeElementBase::ENET_Texture, &t_tex)) {
Throw_ID_NotFound(g);
}
src_texture[1] = (CAMFImporter_NodeElement_Texture *)t_tex; src_texture[1] = (AMFTexture *)t_tex;
src_texture_4check.push_back((CAMFImporter_NodeElement_Texture *)t_tex); src_texture_4check.push_back((AMFTexture *)t_tex);
} else { } else {
src_texture[1] = nullptr; src_texture[1] = nullptr;
} }
// B // B
if (!pID_B.empty()) { if (!b.empty()) {
if (!Find_NodeElement(pID_B, CAMFImporter_NodeElement::ENET_Texture, &t_tex)) Throw_ID_NotFound(pID_B); if (!Find_NodeElement(b, AMFNodeElementBase::ENET_Texture, &t_tex)) {
Throw_ID_NotFound(b);
}
src_texture[2] = (CAMFImporter_NodeElement_Texture *)t_tex; src_texture[2] = (AMFTexture *)t_tex;
src_texture_4check.push_back((CAMFImporter_NodeElement_Texture *)t_tex); src_texture_4check.push_back((AMFTexture *)t_tex);
} else { } else {
src_texture[2] = nullptr; src_texture[2] = nullptr;
} }
// A // A
if (!pID_A.empty()) { if (!a.empty()) {
if (!Find_NodeElement(pID_A, CAMFImporter_NodeElement::ENET_Texture, &t_tex)) Throw_ID_NotFound(pID_A); if (!Find_NodeElement(a, AMFNodeElementBase::ENET_Texture, &t_tex)) {
Throw_ID_NotFound(a);
}
src_texture[3] = (CAMFImporter_NodeElement_Texture *)t_tex; src_texture[3] = (AMFTexture *)t_tex;
src_texture_4check.push_back((CAMFImporter_NodeElement_Texture *)t_tex); src_texture_4check.push_back((AMFTexture *)t_tex);
} else { } else {
src_texture[3] = nullptr; src_texture[3] = nullptr;
} }
@ -213,38 +219,38 @@ size_t AMFImporter::PostprocessHelper_GetTextureID_Or_Create(const std::string &
converted_texture.Depth = src_texture_4check[0]->Depth; converted_texture.Depth = src_texture_4check[0]->Depth;
// if one of source texture is tiled then converted texture is tiled too. // if one of source texture is tiled then converted texture is tiled too.
converted_texture.Tiled = false; converted_texture.Tiled = false;
for (uint8_t i = 0; i < src_texture_4check.size(); i++) for (uint8_t i = 0; i < src_texture_4check.size(); ++i) {
converted_texture.Tiled |= src_texture_4check[i]->Tiled; converted_texture.Tiled |= src_texture_4check[i]->Tiled;
}
// Create format hint. // Create format hint.
strcpy(converted_texture.FormatHint, "rgba0000"); // copy initial string. constexpr char templateColor[] = "rgba0000";
if (!pID_R.empty()) converted_texture.FormatHint[4] = '8'; memcpy(converted_texture.FormatHint, templateColor, 8);
if (!pID_G.empty()) converted_texture.FormatHint[5] = '8'; if (!r.empty()) converted_texture.FormatHint[4] = '8';
if (!pID_B.empty()) converted_texture.FormatHint[6] = '8'; if (!g.empty()) converted_texture.FormatHint[5] = '8';
if (!pID_A.empty()) converted_texture.FormatHint[7] = '8'; if (!b.empty()) converted_texture.FormatHint[6] = '8';
if (!a.empty()) converted_texture.FormatHint[7] = '8';
//
// Сopy data of textures. // Сopy data of textures.
//
size_t tex_size = 0; size_t tex_size = 0;
size_t step = 0; size_t step = 0;
size_t off_g = 0; size_t off_g = 0;
size_t off_b = 0; size_t off_b = 0;
// Calculate size of the target array and rule how data will be copied. // Calculate size of the target array and rule how data will be copied.
if (!pID_R.empty() && nullptr != src_texture[0]) { if (!r.empty() && nullptr != src_texture[0]) {
tex_size += src_texture[0]->Data.size(); tex_size += src_texture[0]->Data.size();
step++, off_g++, off_b++; step++, off_g++, off_b++;
} }
if (!pID_G.empty() && nullptr != src_texture[1]) { if (!g.empty() && nullptr != src_texture[1]) {
tex_size += src_texture[1]->Data.size(); tex_size += src_texture[1]->Data.size();
step++, off_b++; step++, off_b++;
} }
if (!pID_B.empty() && nullptr != src_texture[2]) { if (!b.empty() && nullptr != src_texture[2]) {
tex_size += src_texture[2]->Data.size(); tex_size += src_texture[2]->Data.size();
step++; step++;
} }
if (!pID_A.empty() && nullptr != src_texture[3]) { if (!a.empty() && nullptr != src_texture[3]) {
tex_size += src_texture[3]->Data.size(); tex_size += src_texture[3]->Data.size();
step++; step++;
} }
@ -255,17 +261,17 @@ size_t AMFImporter::PostprocessHelper_GetTextureID_Or_Create(const std::string &
auto CopyTextureData = [&](const std::string &pID, const size_t pOffset, const size_t pStep, const uint8_t pSrcTexNum) -> void { auto CopyTextureData = [&](const std::string &pID, const size_t pOffset, const size_t pStep, const uint8_t pSrcTexNum) -> void {
if (!pID.empty()) { if (!pID.empty()) {
for (size_t idx_target = pOffset, idx_src = 0; idx_target < tex_size; idx_target += pStep, idx_src++) { for (size_t idx_target = pOffset, idx_src = 0; idx_target < tex_size; idx_target += pStep, idx_src++) {
CAMFImporter_NodeElement_Texture *tex = src_texture[pSrcTexNum]; AMFTexture *tex = src_texture[pSrcTexNum];
ai_assert(tex); ai_assert(tex);
converted_texture.Data[idx_target] = tex->Data.at(idx_src); converted_texture.Data[idx_target] = tex->Data.at(idx_src);
} }
} }
}; // auto CopyTextureData = [&](const size_t pOffset, const size_t pStep, const uint8_t pSrcTexNum) -> void }; // auto CopyTextureData = [&](const size_t pOffset, const size_t pStep, const uint8_t pSrcTexNum) -> void
CopyTextureData(pID_R, 0, step, 0); CopyTextureData(r, 0, step, 0);
CopyTextureData(pID_G, off_g, step, 1); CopyTextureData(g, off_g, step, 1);
CopyTextureData(pID_B, off_b, step, 2); CopyTextureData(b, off_b, step, 2);
CopyTextureData(pID_A, step - 1, step, 3); CopyTextureData(a, step - 1, step, 3);
// Store new converted texture ID // Store new converted texture ID
converted_texture.ID = TextureConverted_ID; converted_texture.ID = TextureConverted_ID;
@ -276,7 +282,7 @@ size_t AMFImporter::PostprocessHelper_GetTextureID_Or_Create(const std::string &
} }
void AMFImporter::PostprocessHelper_SplitFacesByTextureID(std::list<SComplexFace> &pInputList, std::list<std::list<SComplexFace>> &pOutputList_Separated) { void AMFImporter::PostprocessHelper_SplitFacesByTextureID(std::list<SComplexFace> &pInputList, std::list<std::list<SComplexFace>> &pOutputList_Separated) {
auto texmap_is_equal = [](const CAMFImporter_NodeElement_TexMap *pTexMap1, const CAMFImporter_NodeElement_TexMap *pTexMap2) -> bool { auto texmap_is_equal = [](const AMFTexMap *pTexMap1, const AMFTexMap *pTexMap2) -> bool {
if ((pTexMap1 == nullptr) && (pTexMap2 == nullptr)) return true; if ((pTexMap1 == nullptr) && (pTexMap2 == nullptr)) return true;
if (pTexMap1 == nullptr) return false; if (pTexMap1 == nullptr) return false;
if (pTexMap2 == nullptr) return false; if (pTexMap2 == nullptr) return false;
@ -313,73 +319,80 @@ void AMFImporter::PostprocessHelper_SplitFacesByTextureID(std::list<SComplexFace
} while (!pInputList.empty()); } while (!pInputList.empty());
} }
void AMFImporter::Postprocess_AddMetadata(const std::list<CAMFImporter_NodeElement_Metadata *> &metadataList, aiNode &sceneNode) const { void AMFImporter::Postprocess_AddMetadata(const AMFMetaDataArray &metadataList, aiNode &sceneNode) const {
if (!metadataList.empty()) { if (metadataList.empty()) {
if (sceneNode.mMetaData != nullptr) throw DeadlyImportError("Postprocess. MetaData member in node are not nullptr. Something went wrong."); return;
}
// copy collected metadata to output node. if (sceneNode.mMetaData != nullptr) {
sceneNode.mMetaData = aiMetadata::Alloc(static_cast<unsigned int>(metadataList.size())); throw DeadlyImportError("Postprocess. MetaData member in node are not nullptr. Something went wrong.");
size_t meta_idx(0); }
for (const CAMFImporter_NodeElement_Metadata &metadata : metadataList) { // copy collected metadata to output node.
sceneNode.mMetaData->Set(static_cast<unsigned int>(meta_idx++), metadata.Type, aiString(metadata.Value)); sceneNode.mMetaData = aiMetadata::Alloc(static_cast<unsigned int>(metadataList.size()));
} size_t meta_idx(0);
} // if(!metadataList.empty())
for (const AMFMetadata *metadata : metadataList) {
sceneNode.mMetaData->Set(static_cast<unsigned int>(meta_idx++), metadata->Type, aiString(metadata->Value));
}
} }
void AMFImporter::Postprocess_BuildNodeAndObject(const CAMFImporter_NodeElement_Object &pNodeElement, std::list<aiMesh *> &pMeshList, aiNode **pSceneNode) { void AMFImporter::Postprocess_BuildNodeAndObject(const AMFObject &pNodeElement, MeshArray &meshList, aiNode **pSceneNode) {
CAMFImporter_NodeElement_Color *object_color = nullptr; AMFColor *object_color = nullptr;
// create new aiNode and set name as <object> has. // create new aiNode and set name as <object> has.
*pSceneNode = new aiNode; *pSceneNode = new aiNode;
(*pSceneNode)->mName = pNodeElement.ID; (*pSceneNode)->mName = pNodeElement.ID;
// read mesh and color // read mesh and color
for (const CAMFImporter_NodeElement *ne_child : pNodeElement.Child) { for (const AMFNodeElementBase *ne_child : pNodeElement.Child) {
std::vector<aiVector3D> vertex_arr; std::vector<aiVector3D> vertex_arr;
std::vector<CAMFImporter_NodeElement_Color *> color_arr; std::vector<AMFColor *> color_arr;
// color for object // color for object
if (ne_child->Type == CAMFImporter_NodeElement::ENET_Color) object_color = (CAMFImporter_NodeElement_Color *)ne_child; if (ne_child->Type == AMFNodeElementBase::ENET_Color) {
object_color = (AMFColor *) ne_child;
}
if (ne_child->Type == CAMFImporter_NodeElement::ENET_Mesh) { if (ne_child->Type == AMFNodeElementBase::ENET_Mesh) {
// Create arrays from children of mesh: vertices. // Create arrays from children of mesh: vertices.
PostprocessHelper_CreateMeshDataArray(*((CAMFImporter_NodeElement_Mesh *)ne_child), vertex_arr, color_arr); PostprocessHelper_CreateMeshDataArray(*((AMFMesh *)ne_child), vertex_arr, color_arr);
// Use this arrays as a source when creating every aiMesh // Use this arrays as a source when creating every aiMesh
Postprocess_BuildMeshSet(*((CAMFImporter_NodeElement_Mesh *)ne_child), vertex_arr, color_arr, object_color, pMeshList, **pSceneNode); Postprocess_BuildMeshSet(*((AMFMesh *)ne_child), vertex_arr, color_arr, object_color, meshList, **pSceneNode);
} }
} // for(const CAMFImporter_NodeElement* ne_child: pNodeElement) } // for(const CAMFImporter_NodeElement* ne_child: pNodeElement)
} }
void AMFImporter::Postprocess_BuildMeshSet(const CAMFImporter_NodeElement_Mesh &pNodeElement, const std::vector<aiVector3D> &pVertexCoordinateArray, void AMFImporter::Postprocess_BuildMeshSet(const AMFMesh &pNodeElement, const std::vector<aiVector3D> &pVertexCoordinateArray,
const std::vector<CAMFImporter_NodeElement_Color *> &pVertexColorArray, const std::vector<AMFColor *> &pVertexColorArray, const AMFColor *pObjectColor, MeshArray &pMeshList, aiNode &pSceneNode) {
const CAMFImporter_NodeElement_Color *pObjectColor, std::list<aiMesh *> &pMeshList, aiNode &pSceneNode) {
std::list<unsigned int> mesh_idx; std::list<unsigned int> mesh_idx;
// all data stored in "volume", search for it. // all data stored in "volume", search for it.
for (const CAMFImporter_NodeElement *ne_child : pNodeElement.Child) { for (const AMFNodeElementBase *ne_child : pNodeElement.Child) {
const CAMFImporter_NodeElement_Color *ne_volume_color = nullptr; const AMFColor *ne_volume_color = nullptr;
const SPP_Material *cur_mat = nullptr; const SPP_Material *cur_mat = nullptr;
if (ne_child->Type == CAMFImporter_NodeElement::ENET_Volume) { if (ne_child->Type == AMFNodeElementBase::ENET_Volume) {
/******************* Get faces *******************/ /******************* Get faces *******************/
const CAMFImporter_NodeElement_Volume *ne_volume = reinterpret_cast<const CAMFImporter_NodeElement_Volume *>(ne_child); const AMFVolume *ne_volume = reinterpret_cast<const AMFVolume *>(ne_child);
std::list<SComplexFace> complex_faces_list; // List of the faces of the volume. std::list<SComplexFace> complex_faces_list; // List of the faces of the volume.
std::list<std::list<SComplexFace>> complex_faces_toplist; // List of the face list for every mesh. std::list<std::list<SComplexFace>> complex_faces_toplist; // List of the face list for every mesh.
// check if volume use material // check if volume use material
if (!ne_volume->MaterialID.empty()) { if (!ne_volume->MaterialID.empty()) {
if (!Find_ConvertedMaterial(ne_volume->MaterialID, &cur_mat)) Throw_ID_NotFound(ne_volume->MaterialID); if (!Find_ConvertedMaterial(ne_volume->MaterialID, &cur_mat)) {
Throw_ID_NotFound(ne_volume->MaterialID);
}
} }
// inside "volume" collect all data and place to arrays or create new objects // inside "volume" collect all data and place to arrays or create new objects
for (const CAMFImporter_NodeElement *ne_volume_child : ne_volume->Child) { for (const AMFNodeElementBase *ne_volume_child : ne_volume->Child) {
// color for volume // color for volume
if (ne_volume_child->Type == CAMFImporter_NodeElement::ENET_Color) { if (ne_volume_child->Type == AMFNodeElementBase::ENET_Color) {
ne_volume_color = reinterpret_cast<const CAMFImporter_NodeElement_Color *>(ne_volume_child); ne_volume_color = reinterpret_cast<const AMFColor *>(ne_volume_child);
} else if (ne_volume_child->Type == CAMFImporter_NodeElement::ENET_Triangle) // triangles, triangles colors } else if (ne_volume_child->Type == AMFNodeElementBase::ENET_Triangle) // triangles, triangles colors
{ {
const CAMFImporter_NodeElement_Triangle &tri_al = *reinterpret_cast<const CAMFImporter_NodeElement_Triangle *>(ne_volume_child); const AMFTriangle &tri_al = *reinterpret_cast<const AMFTriangle *>(ne_volume_child);
SComplexFace complex_face; SComplexFace complex_face;
@ -388,11 +401,11 @@ void AMFImporter::Postprocess_BuildMeshSet(const CAMFImporter_NodeElement_Mesh &
complex_face.TexMap = nullptr; complex_face.TexMap = nullptr;
// get data from triangle children: color, texture coordinates. // get data from triangle children: color, texture coordinates.
if (tri_al.Child.size()) { if (tri_al.Child.size()) {
for (const CAMFImporter_NodeElement *ne_triangle_child : tri_al.Child) { for (const AMFNodeElementBase *ne_triangle_child : tri_al.Child) {
if (ne_triangle_child->Type == CAMFImporter_NodeElement::ENET_Color) if (ne_triangle_child->Type == AMFNodeElementBase::ENET_Color)
complex_face.Color = reinterpret_cast<const CAMFImporter_NodeElement_Color *>(ne_triangle_child); complex_face.Color = reinterpret_cast<const AMFColor *>(ne_triangle_child);
else if (ne_triangle_child->Type == CAMFImporter_NodeElement::ENET_TexMap) else if (ne_triangle_child->Type == AMFNodeElementBase::ENET_TexMap)
complex_face.TexMap = reinterpret_cast<const CAMFImporter_NodeElement_TexMap *>(ne_triangle_child); complex_face.TexMap = reinterpret_cast<const AMFTexMap *>(ne_triangle_child);
} }
} // if(tri_al.Child.size()) } // if(tri_al.Child.size())
@ -416,21 +429,24 @@ void AMFImporter::Postprocess_BuildMeshSet(const CAMFImporter_NodeElement_Mesh &
if (pBiggerThan != nullptr) { if (pBiggerThan != nullptr) {
bool found = false; bool found = false;
const size_t biggerThan = *pBiggerThan;
for (const SComplexFace &face : pFaceList) { for (const SComplexFace &face : pFaceList) {
for (size_t idx_vert = 0; idx_vert < face.Face.mNumIndices; idx_vert++) { for (size_t idx_vert = 0; idx_vert < face.Face.mNumIndices; idx_vert++) {
if (face.Face.mIndices[idx_vert] > *pBiggerThan) { if (face.Face.mIndices[idx_vert] > biggerThan) {
rv = face.Face.mIndices[idx_vert]; rv = face.Face.mIndices[idx_vert];
found = true; found = true;
break; break;
} }
} }
if (found) break; if (found) {
break;
}
} }
if (!found) return *pBiggerThan; if (!found) {
return *pBiggerThan;
}
} else { } else {
rv = pFaceList.front().Face.mIndices[0]; rv = pFaceList.front().Face.mIndices[0];
} // if(pBiggerThan != nullptr) else } // if(pBiggerThan != nullptr) else
@ -505,9 +521,9 @@ void AMFImporter::Postprocess_BuildMeshSet(const CAMFImporter_NodeElement_Mesh &
tmesh->mNumFaces = static_cast<unsigned int>(face_list_cur.size()); tmesh->mNumFaces = static_cast<unsigned int>(face_list_cur.size());
tmesh->mFaces = new aiFace[tmesh->mNumFaces]; tmesh->mFaces = new aiFace[tmesh->mNumFaces];
// Create vertices list and optimize indices. Optimisation mean following.In AMF all volumes use one big list of vertices. And one volume // Create vertices list and optimize indices. Optimization mean following.In AMF all volumes use one big list of vertices. And one volume
// can use only part of vertices list, for example: vertices list contain few thousands of vertices and volume use vertices 1, 3, 10. // can use only part of vertices list, for example: vertices list contain few thousands of vertices and volume use vertices 1, 3, 10.
// Do you need all this thousands of garbage? Of course no. So, optimisation step transformate sparse indices set to continuous. // Do you need all this thousands of garbage? Of course no. So, optimization step transform sparse indices set to continuous.
size_t VertexCount_Max = tmesh->mNumFaces * 3; // 3 - triangles. size_t VertexCount_Max = tmesh->mNumFaces * 3; // 3 - triangles.
std::vector<aiVector3D> vert_arr, texcoord_arr; std::vector<aiVector3D> vert_arr, texcoord_arr;
std::vector<aiColor4D> col_arr; std::vector<aiColor4D> col_arr;
@ -566,7 +582,7 @@ void AMFImporter::Postprocess_BuildMeshSet(const CAMFImporter_NodeElement_Mesh &
size_t idx_vert_new = vert_arr.size(); size_t idx_vert_new = vert_arr.size();
///TODO: clean unused vertices. "* 2": in certain cases - mesh full of triangle colors - vert_arr will contain duplicated vertices for ///TODO: clean unused vertices. "* 2": in certain cases - mesh full of triangle colors - vert_arr will contain duplicated vertices for
/// colored triangles and initial vertices (for colored vertices) which in real became unused. This part need more thinking about /// colored triangles and initial vertices (for colored vertices) which in real became unused. This part need more thinking about
/// optimisation. /// optimization.
bool *idx_vert_used; bool *idx_vert_used;
idx_vert_used = new bool[VertexCount_Max * 2]; idx_vert_used = new bool[VertexCount_Max * 2];
@ -639,15 +655,15 @@ void AMFImporter::Postprocess_BuildMeshSet(const CAMFImporter_NodeElement_Mesh &
} // if(mesh_idx.size() > 0) } // if(mesh_idx.size() > 0)
} }
void AMFImporter::Postprocess_BuildMaterial(const CAMFImporter_NodeElement_Material &pMaterial) { void AMFImporter::Postprocess_BuildMaterial(const AMFMaterial &pMaterial) {
SPP_Material new_mat; SPP_Material new_mat;
new_mat.ID = pMaterial.ID; new_mat.ID = pMaterial.ID;
for (const CAMFImporter_NodeElement *mat_child : pMaterial.Child) { for (const AMFNodeElementBase *mat_child : pMaterial.Child) {
if (mat_child->Type == CAMFImporter_NodeElement::ENET_Color) { if (mat_child->Type == AMFNodeElementBase::ENET_Color) {
new_mat.Color = (CAMFImporter_NodeElement_Color *)mat_child; new_mat.Color = (AMFColor*)mat_child;
} else if (mat_child->Type == CAMFImporter_NodeElement::ENET_Metadata) { } else if (mat_child->Type == AMFNodeElementBase::ENET_Metadata) {
new_mat.Metadata.push_back((CAMFImporter_NodeElement_Metadata *)mat_child); new_mat.Metadata.push_back((AMFMetadata *)mat_child);
} }
} // for(const CAMFImporter_NodeElement* mat_child; pMaterial.Child) } // for(const CAMFImporter_NodeElement* mat_child; pMaterial.Child)
@ -655,7 +671,7 @@ void AMFImporter::Postprocess_BuildMaterial(const CAMFImporter_NodeElement_Mater
mMaterial_Converted.push_back(new_mat); mMaterial_Converted.push_back(new_mat);
} }
void AMFImporter::Postprocess_BuildConstellation(CAMFImporter_NodeElement_Constellation &pConstellation, std::list<aiNode *> &pNodeList) const { void AMFImporter::Postprocess_BuildConstellation(AMFConstellation &pConstellation, NodeArray &nodeArray) const {
aiNode *con_node; aiNode *con_node;
std::list<aiNode *> ch_node; std::list<aiNode *> ch_node;
@ -667,18 +683,18 @@ void AMFImporter::Postprocess_BuildConstellation(CAMFImporter_NodeElement_Conste
con_node = new aiNode; con_node = new aiNode;
con_node->mName = pConstellation.ID; con_node->mName = pConstellation.ID;
// Walk through children and search for instances of another objects, constellations. // Walk through children and search for instances of another objects, constellations.
for (const CAMFImporter_NodeElement *ne : pConstellation.Child) { for (const AMFNodeElementBase *ne : pConstellation.Child) {
aiMatrix4x4 tmat; aiMatrix4x4 tmat;
aiNode *t_node; aiNode *t_node;
aiNode *found_node; aiNode *found_node;
if (ne->Type == CAMFImporter_NodeElement::ENET_Metadata) continue; if (ne->Type == AMFNodeElementBase::ENET_Metadata) continue;
if (ne->Type != CAMFImporter_NodeElement::ENET_Instance) throw DeadlyImportError("Only <instance> nodes can be in <constellation>."); if (ne->Type != AMFNodeElementBase::ENET_Instance) throw DeadlyImportError("Only <instance> nodes can be in <constellation>.");
// create alias for conveniance // create alias for convenience
CAMFImporter_NodeElement_Instance &als = *((CAMFImporter_NodeElement_Instance *)ne); AMFInstance &als = *((AMFInstance *)ne);
// find referenced object // find referenced object
if (!Find_ConvertedNode(als.ObjectID, pNodeList, &found_node)) Throw_ID_NotFound(als.ObjectID); if (!Find_ConvertedNode(als.ObjectID, nodeArray, &found_node)) Throw_ID_NotFound(als.ObjectID);
// create node for applying transformation // create node for applying transformation
t_node = new aiNode; t_node = new aiNode;
@ -707,13 +723,13 @@ void AMFImporter::Postprocess_BuildConstellation(CAMFImporter_NodeElement_Conste
con_node->mChildren[ch_idx++] = node; con_node->mChildren[ch_idx++] = node;
// and place "root" of <constellation> node to node list // and place "root" of <constellation> node to node list
pNodeList.push_back(con_node); nodeArray.push_back(con_node);
} }
void AMFImporter::Postprocess_BuildScene(aiScene *pScene) { void AMFImporter::Postprocess_BuildScene(aiScene *pScene) {
std::list<aiNode *> node_list; NodeArray nodeArray;
std::list<aiMesh *> mesh_list; MeshArray mesh_list;
std::list<CAMFImporter_NodeElement_Metadata *> meta_list; AMFMetaDataArray meta_list;
// //
// Because for AMF "material" is just complex colors mixing so aiMaterial will not be used. // Because for AMF "material" is just complex colors mixing so aiMaterial will not be used.
@ -723,18 +739,21 @@ void AMFImporter::Postprocess_BuildScene(aiScene *pScene) {
pScene->mRootNode->mParent = nullptr; pScene->mRootNode->mParent = nullptr;
pScene->mFlags |= AI_SCENE_FLAGS_ALLOW_SHARED; pScene->mFlags |= AI_SCENE_FLAGS_ALLOW_SHARED;
// search for root(<amf>) element // search for root(<amf>) element
CAMFImporter_NodeElement *root_el = nullptr; AMFNodeElementBase *root_el = nullptr;
for (CAMFImporter_NodeElement *ne : mNodeElement_List) { for (AMFNodeElementBase *ne : mNodeElement_List) {
if (ne->Type != CAMFImporter_NodeElement::ENET_Root) continue; if (ne->Type != AMFNodeElementBase::ENET_Root) {
continue;
}
root_el = ne; root_el = ne;
break; break;
} // for(const CAMFImporter_NodeElement* ne: mNodeElement_List) } // for(const CAMFImporter_NodeElement* ne: mNodeElement_List)
// Check if root element are found. // Check if root element are found.
if (root_el == nullptr) throw DeadlyImportError("Root(<amf>) element not found."); if (root_el == nullptr) {
throw DeadlyImportError("Root(<amf>) element not found.");
}
// after that walk through children of root and collect data. Five types of nodes can be placed at top level - in <amf>: <object>, <material>, <texture>, // after that walk through children of root and collect data. Five types of nodes can be placed at top level - in <amf>: <object>, <material>, <texture>,
// <constellation> and <metadata>. But at first we must read <material> and <texture> because they will be used in <object>. <metadata> can be read // <constellation> and <metadata>. But at first we must read <material> and <texture> because they will be used in <object>. <metadata> can be read
@ -742,34 +761,38 @@ void AMFImporter::Postprocess_BuildScene(aiScene *pScene) {
// //
// 1. <material> // 1. <material>
// 2. <texture> will be converted later when processing triangles list. \sa Postprocess_BuildMeshSet // 2. <texture> will be converted later when processing triangles list. \sa Postprocess_BuildMeshSet
for (const CAMFImporter_NodeElement *root_child : root_el->Child) { for (const AMFNodeElementBase *root_child : root_el->Child) {
if (root_child->Type == CAMFImporter_NodeElement::ENET_Material) Postprocess_BuildMaterial(*((CAMFImporter_NodeElement_Material *)root_child)); if (root_child->Type == AMFNodeElementBase::ENET_Material) {
Postprocess_BuildMaterial(*((AMFMaterial *)root_child));
}
} }
// After "appearance" nodes we must read <object> because it will be used in <constellation> -> <instance>. // After "appearance" nodes we must read <object> because it will be used in <constellation> -> <instance>.
// //
// 3. <object> // 3. <object>
for (const CAMFImporter_NodeElement *root_child : root_el->Child) { for (const AMFNodeElementBase *root_child : root_el->Child) {
if (root_child->Type == CAMFImporter_NodeElement::ENET_Object) { if (root_child->Type == AMFNodeElementBase::ENET_Object) {
aiNode *tnode = nullptr; aiNode *tnode = nullptr;
// for <object> mesh and node must be built: object ID assigned to aiNode name and will be used in future for <instance> // for <object> mesh and node must be built: object ID assigned to aiNode name and will be used in future for <instance>
Postprocess_BuildNodeAndObject(*((CAMFImporter_NodeElement_Object *)root_child), mesh_list, &tnode); Postprocess_BuildNodeAndObject(*((AMFObject *)root_child), mesh_list, &tnode);
if (tnode != nullptr) node_list.push_back(tnode); if (tnode != nullptr) {
nodeArray.push_back(tnode);
}
} }
} // for(const CAMFImporter_NodeElement* root_child: root_el->Child) } // for(const CAMFImporter_NodeElement* root_child: root_el->Child)
// And finally read rest of nodes. // And finally read rest of nodes.
// //
for (const CAMFImporter_NodeElement *root_child : root_el->Child) { for (const AMFNodeElementBase *root_child : root_el->Child) {
// 4. <constellation> // 4. <constellation>
if (root_child->Type == CAMFImporter_NodeElement::ENET_Constellation) { if (root_child->Type == AMFNodeElementBase::ENET_Constellation) {
// <object> and <constellation> at top of self abstraction use aiNode. So we can use only aiNode list for creating new aiNode's. // <object> and <constellation> at top of self abstraction use aiNode. So we can use only aiNode list for creating new aiNode's.
Postprocess_BuildConstellation(*((CAMFImporter_NodeElement_Constellation *)root_child), node_list); Postprocess_BuildConstellation(*((AMFConstellation *)root_child), nodeArray);
} }
// 5, <metadata> // 5, <metadata>
if (root_child->Type == CAMFImporter_NodeElement::ENET_Metadata) meta_list.push_back((CAMFImporter_NodeElement_Metadata *)root_child); if (root_child->Type == AMFNodeElementBase::ENET_Metadata) meta_list.push_back((AMFMetadata *)root_child);
} // for(const CAMFImporter_NodeElement* root_child: root_el->Child) } // for(const CAMFImporter_NodeElement* root_child: root_el->Child)
// at now we can add collected metadata to root node // at now we can add collected metadata to root node
@ -783,17 +806,18 @@ void AMFImporter::Postprocess_BuildScene(aiScene *pScene) {
// And at this step we are checking that relations. // And at this step we are checking that relations.
nl_clean_loop: nl_clean_loop:
if (node_list.size() > 1) { if (nodeArray.size() > 1) {
// walk through all nodes // walk through all nodes
for (std::list<aiNode *>::iterator nl_it = node_list.begin(); nl_it != node_list.end(); ++nl_it) { for (NodeArray::iterator nl_it = nodeArray.begin(); nl_it != nodeArray.end(); ++nl_it) {
// and try to find them in another top nodes. // and try to find them in another top nodes.
std::list<aiNode *>::const_iterator next_it = nl_it; NodeArray::const_iterator next_it = nl_it;
++next_it; ++next_it;
for (; next_it != node_list.end(); ++next_it) { for (; next_it != nodeArray.end(); ++next_it) {
if ((*next_it)->FindNode((*nl_it)->mName) != nullptr) { if ((*next_it)->FindNode((*nl_it)->mName) != nullptr) {
// if current top node(nl_it) found in another top node then erase it from node_list and restart search loop. // if current top node(nl_it) found in another top node then erase it from node_list and restart search loop.
node_list.erase(nl_it); // FIXME: this leaks memory on test models test8.amf and test9.amf
nodeArray.erase(nl_it);
goto nl_clean_loop; goto nl_clean_loop;
} }
@ -806,10 +830,10 @@ nl_clean_loop:
// //
// //
// Nodes // Nodes
if (!node_list.empty()) { if (!nodeArray.empty()) {
std::list<aiNode *>::const_iterator nl_it = node_list.begin(); NodeArray::const_iterator nl_it = nodeArray.begin();
pScene->mRootNode->mNumChildren = static_cast<unsigned int>(node_list.size()); pScene->mRootNode->mNumChildren = static_cast<unsigned int>(nodeArray.size());
pScene->mRootNode->mChildren = new aiNode *[pScene->mRootNode->mNumChildren]; pScene->mRootNode->mChildren = new aiNode *[pScene->mRootNode->mNumChildren];
for (size_t i = 0; i < pScene->mRootNode->mNumChildren; i++) { for (size_t i = 0; i < pScene->mRootNode->mNumChildren; i++) {
// Objects and constellation that must be showed placed at top of hierarchy in <amf> node. So all aiNode's in node_list must have // Objects and constellation that must be showed placed at top of hierarchy in <amf> node. So all aiNode's in node_list must have
@ -822,7 +846,7 @@ nl_clean_loop:
// //
// Meshes // Meshes
if (!mesh_list.empty()) { if (!mesh_list.empty()) {
std::list<aiMesh *>::const_iterator ml_it = mesh_list.begin(); MeshArray::const_iterator ml_it = mesh_list.begin();
pScene->mNumMeshes = static_cast<unsigned int>(mesh_list.size()); pScene->mNumMeshes = static_cast<unsigned int>(mesh_list.size());
pScene->mMeshes = new aiMesh *[pScene->mNumMeshes]; pScene->mMeshes = new aiMesh *[pScene->mNumMeshes];
@ -844,7 +868,7 @@ nl_clean_loop:
pScene->mTextures[idx]->mHeight = static_cast<unsigned int>(tex_convd.Height); pScene->mTextures[idx]->mHeight = static_cast<unsigned int>(tex_convd.Height);
pScene->mTextures[idx]->pcData = (aiTexel *)tex_convd.Data; pScene->mTextures[idx]->pcData = (aiTexel *)tex_convd.Data;
// texture format description. // texture format description.
strcpy(pScene->mTextures[idx]->achFormatHint, tex_convd.FormatHint); strncpy(pScene->mTextures[idx]->achFormatHint, tex_convd.FormatHint, HINTMAXTEXTURELEN);
idx++; idx++;
} // for(const SPP_Texture& tex_convd: mTexture_Converted) } // for(const SPP_Texture& tex_convd: mTexture_Converted)
@ -853,7 +877,7 @@ nl_clean_loop:
pScene->mNumMaterials = static_cast<unsigned int>(mTexture_Converted.size()); pScene->mNumMaterials = static_cast<unsigned int>(mTexture_Converted.size());
pScene->mMaterials = new aiMaterial *[pScene->mNumMaterials]; pScene->mMaterials = new aiMaterial *[pScene->mNumMaterials];
for (const SPP_Texture &tex_convd : mTexture_Converted) { for (const SPP_Texture &tex_convd : mTexture_Converted) {
const aiString texture_id(AI_EMBEDDED_TEXNAME_PREFIX + to_string(idx)); const aiString texture_id(AI_EMBEDDED_TEXNAME_PREFIX + ai_to_string(idx));
const int mode = aiTextureOp_Multiply; const int mode = aiTextureOp_Multiply;
const int repeat = tex_convd.Tiled ? 1 : 0; const int repeat = tex_convd.Tiled ? 1 : 0;

View File

@ -3,9 +3,7 @@
Open Asset Import Library (assimp) Open Asset Import Library (assimp)
--------------------------------------------------------------------------- ---------------------------------------------------------------------------
Copyright (c) 2006-2020, assimp team Copyright (c) 2006-2024, assimp team
All rights reserved. All rights reserved.
@ -46,7 +44,6 @@ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/ */
#ifndef ASSIMP_BUILD_NO_ASE_IMPORTER #ifndef ASSIMP_BUILD_NO_ASE_IMPORTER
#ifndef ASSIMP_BUILD_NO_3DS_IMPORTER #ifndef ASSIMP_BUILD_NO_3DS_IMPORTER
// internal headers // internal headers
@ -66,10 +63,10 @@ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
// utilities // utilities
#include <assimp/fast_atof.h> #include <assimp/fast_atof.h>
using namespace Assimp; namespace Assimp {
using namespace Assimp::ASE; using namespace Assimp::ASE;
static const aiImporterDesc desc = { static constexpr aiImporterDesc desc = {
"ASE Importer", "ASE Importer",
"", "",
"", "",
@ -89,27 +86,11 @@ ASEImporter::ASEImporter() :
// empty // empty
} }
// ------------------------------------------------------------------------------------------------
// Destructor, private as well
ASEImporter::~ASEImporter() {
// empty
}
// ------------------------------------------------------------------------------------------------ // ------------------------------------------------------------------------------------------------
// Returns whether the class can handle the format of the given file. // Returns whether the class can handle the format of the given file.
bool ASEImporter::CanRead(const std::string &pFile, IOSystem *pIOHandler, bool cs) const { bool ASEImporter::CanRead(const std::string &pFile, IOSystem *pIOHandler, bool /*checkSig*/) const {
// check file extension static const char *tokens[] = { "*3dsmax_asciiexport" };
const std::string extension = GetExtension(pFile); return SearchFileHeaderForToken(pIOHandler, pFile, tokens, AI_COUNT_OF(tokens));
if (extension == "ase" || extension == "ask") {
return true;
}
if ((!extension.length() || cs) && pIOHandler) {
const char *tokens[] = { "*3dsmax_asciiexport" };
return SearchFileHeaderForToken(pIOHandler, pFile, tokens, 1);
}
return false;
} }
// ------------------------------------------------------------------------------------------------ // ------------------------------------------------------------------------------------------------
@ -136,14 +117,14 @@ void ASEImporter::InternReadFile(const std::string &pFile,
std::unique_ptr<IOStream> file(pIOHandler->Open(pFile, "rb")); std::unique_ptr<IOStream> file(pIOHandler->Open(pFile, "rb"));
// Check whether we can read from the file // Check whether we can read from the file
if (file.get() == nullptr) { if (file == nullptr) {
throw DeadlyImportError("Failed to open ASE file " + pFile + "."); throw DeadlyImportError("Failed to open ASE file ", pFile, ".");
} }
// Allocate storage and copy the contents of the file to a memory buffer // Allocate storage and copy the contents of the file to a memory buffer
std::vector<char> mBuffer2; std::vector<char> mBuffer2;
TextFileToBuffer(file.get(), mBuffer2); TextFileToBuffer(file.get(), mBuffer2);
const size_t fileSize = mBuffer2.size();
this->mBuffer = &mBuffer2[0]; this->mBuffer = &mBuffer2[0];
this->pcScene = pScene; this->pcScene = pScene;
@ -165,7 +146,7 @@ void ASEImporter::InternReadFile(const std::string &pFile,
}; };
// Construct an ASE parser and parse the file // Construct an ASE parser and parse the file
ASE::Parser parser(mBuffer, defaultFormat); ASE::Parser parser(mBuffer, fileSize, defaultFormat);
mParser = &parser; mParser = &parser;
mParser->Parse(); mParser->Parse();
@ -277,7 +258,7 @@ void ASEImporter::GenerateDefaultMaterial() {
} }
if (bHas || mParser->m_vMaterials.empty()) { if (bHas || mParser->m_vMaterials.empty()) {
// add a simple material without submaterials to the parser's list // add a simple material without submaterials to the parser's list
mParser->m_vMaterials.push_back(ASE::Material(AI_DEFAULT_MATERIAL_NAME)); mParser->m_vMaterials.emplace_back(AI_DEFAULT_MATERIAL_NAME);
ASE::Material &mat = mParser->m_vMaterials.back(); ASE::Material &mat = mParser->m_vMaterials.back();
mat.mDiffuse = aiColor3D(0.6f, 0.6f, 0.6f); mat.mDiffuse = aiColor3D(0.6f, 0.6f, 0.6f);
@ -340,21 +321,6 @@ void ASEImporter::BuildAnimations(const std::vector<BaseNode *> &nodes) {
aiNodeAnim *nd = pcAnim->mChannels[iNum++] = new aiNodeAnim(); aiNodeAnim *nd = pcAnim->mChannels[iNum++] = new aiNodeAnim();
nd->mNodeName.Set(me->mName + ".Target"); nd->mNodeName.Set(me->mName + ".Target");
// If there is no input position channel we will need
// to supply the default position from the node's
// local transformation matrix.
/*TargetAnimationHelper helper;
if (me->mAnim.akeyPositions.empty())
{
aiMatrix4x4& mat = (*i)->mTransform;
helper.SetFixedMainAnimationChannel(aiVector3D(
mat.a4, mat.b4, mat.c4));
}
else helper.SetMainAnimationChannel (&me->mAnim.akeyPositions);
helper.SetTargetAnimationChannel (&me->mTargetAnim.akeyPositions);
helper.Process(&me->mTargetAnim.akeyPositions);*/
// Allocate the key array and fill it // Allocate the key array and fill it
nd->mNumPositionKeys = (unsigned int)me->mTargetAnim.akeyPositions.size(); nd->mNumPositionKeys = (unsigned int)me->mTargetAnim.akeyPositions.size();
nd->mPositionKeys = new aiVectorKey[nd->mNumPositionKeys]; nd->mPositionKeys = new aiVectorKey[nd->mNumPositionKeys];
@ -480,10 +446,9 @@ void ASEImporter::BuildLights() {
} }
// ------------------------------------------------------------------------------------------------ // ------------------------------------------------------------------------------------------------
void ASEImporter::AddNodes(const std::vector<BaseNode *> &nodes, void ASEImporter::AddNodes(const std::vector<BaseNode *> &nodes, aiNode *pcParent, const std::string &name) {
aiNode *pcParent, const char *szName) {
aiMatrix4x4 m; aiMatrix4x4 m;
AddNodes(nodes, pcParent, szName, m); AddNodes(nodes, pcParent, name, m);
} }
// ------------------------------------------------------------------------------------------------ // ------------------------------------------------------------------------------------------------
@ -540,10 +505,9 @@ void ASEImporter::AddMeshes(const ASE::BaseNode *snode, aiNode *node) {
// ------------------------------------------------------------------------------------------------ // ------------------------------------------------------------------------------------------------
// Add child nodes to a given parent node // Add child nodes to a given parent node
void ASEImporter::AddNodes(const std::vector<BaseNode *> &nodes, void ASEImporter::AddNodes(const std::vector<BaseNode *> &nodes, aiNode *pcParent, const std::string &name,
aiNode *pcParent, const char *szName,
const aiMatrix4x4 &mat) { const aiMatrix4x4 &mat) {
const size_t len = szName ? ::strlen(szName) : 0; const size_t len = name.size();
ai_assert(4 <= AI_MAX_NUMBER_OF_COLOR_SETS); ai_assert(4 <= AI_MAX_NUMBER_OF_COLOR_SETS);
// Receives child nodes for the pcParent node // Receives child nodes for the pcParent node
@ -553,16 +517,18 @@ void ASEImporter::AddNodes(const std::vector<BaseNode *> &nodes,
// which has *us* as parent. // which has *us* as parent.
for (std::vector<BaseNode *>::const_iterator it = nodes.begin(), end = nodes.end(); it != end; ++it) { for (std::vector<BaseNode *>::const_iterator it = nodes.begin(), end = nodes.end(); it != end; ++it) {
const BaseNode *snode = *it; const BaseNode *snode = *it;
if (szName) { if (!name.empty()) {
if (len != snode->mParent.length() || ::strcmp(szName, snode->mParent.c_str())) if (len != snode->mParent.length() || name != snode->mParent.c_str()) {
continue; continue;
} else if (snode->mParent.length()) }
} else if (snode->mParent.length()) {
continue; continue;
}
(*it)->mProcessed = true; (*it)->mProcessed = true;
// Allocate a new node and add it to the output data structure // Allocate a new node and add it to the output data structure
apcNodes.push_back(new aiNode()); apcNodes.push_back(new aiNode);
aiNode *node = apcNodes.back(); aiNode *node = apcNodes.back();
node->mName.Set((snode->mName.length() ? snode->mName.c_str() : "Unnamed_Node")); node->mName.Set((snode->mName.length() ? snode->mName.c_str() : "Unnamed_Node"));
@ -575,7 +541,7 @@ void ASEImporter::AddNodes(const std::vector<BaseNode *> &nodes,
// Add sub nodes - prevent stack overflow due to recursive parenting // Add sub nodes - prevent stack overflow due to recursive parenting
if (node->mName != node->mParent->mName && node->mName != node->mParent->mParent->mName) { if (node->mName != node->mParent->mName && node->mName != node->mParent->mParent->mName) {
AddNodes(nodes, node, node->mName.data, snode->mTransform); AddNodes(nodes, node, node->mName.C_Str(), snode->mTransform);
} }
// Further processing depends on the type of the node // Further processing depends on the type of the node
@ -614,7 +580,7 @@ void ASEImporter::AddNodes(const std::vector<BaseNode *> &nodes,
node->mNumChildren++; node->mNumChildren++;
// What we did is so great, it is at least worth a debug message // What we did is so great, it is at least worth a debug message
ASSIMP_LOG_VERBOSE_DEBUG("ASE: Generating separate target node (" + snode->mName + ")"); ASSIMP_LOG_VERBOSE_DEBUG("ASE: Generating separate target node (", snode->mName, ")");
} }
} }
@ -653,7 +619,8 @@ void ASEImporter::BuildNodes(std::vector<BaseNode *> &nodes) {
} }
// add all nodes // add all nodes
AddNodes(nodes, ch, nullptr); static const std::string none = "";
AddNodes(nodes, ch, none);
// now iterate through al nodes and find those that have not yet // now iterate through al nodes and find those that have not yet
// been added to the nodegraph (= their parent could not be recognized) // been added to the nodegraph (= their parent could not be recognized)
@ -683,7 +650,7 @@ void ASEImporter::BuildNodes(std::vector<BaseNode *> &nodes) {
} }
} }
// Are there ane orphaned nodes? // Are there any orphaned nodes?
if (!aiList.empty()) { if (!aiList.empty()) {
std::vector<aiNode *> apcNodes; std::vector<aiNode *> apcNodes;
apcNodes.reserve(aiList.size() + pcScene->mRootNode->mNumChildren); apcNodes.reserve(aiList.size() + pcScene->mRootNode->mNumChildren);
@ -882,6 +849,7 @@ void ASEImporter::ConvertMaterial(ASE::Material &mat) {
unsigned int iWire = 1; unsigned int iWire = 1;
mat.pcInstance->AddProperty<int>((int *)&iWire, 1, AI_MATKEY_ENABLE_WIREFRAME); mat.pcInstance->AddProperty<int>((int *)&iWire, 1, AI_MATKEY_ENABLE_WIREFRAME);
} }
// fallthrough
case D3DS::Discreet3DS::Gouraud: case D3DS::Discreet3DS::Gouraud:
eShading = aiShadingMode_Gouraud; eShading = aiShadingMode_Gouraud;
break; break;
@ -937,7 +905,7 @@ void ASEImporter::ConvertMeshes(ASE::Mesh &mesh, std::vector<aiMesh *> &avOutMes
ASSIMP_LOG_WARN("Material index is out of range"); ASSIMP_LOG_WARN("Material index is out of range");
} }
// If the material the mesh is assigned to is consisting of submeshes, split it // If the material the mesh is assigned to consists of submeshes, split it
if (!mParser->m_vMaterials[mesh.iMaterialIndex].avSubMaterials.empty()) { if (!mParser->m_vMaterials[mesh.iMaterialIndex].avSubMaterials.empty()) {
std::vector<ASE::Material> vSubMaterials = mParser->m_vMaterials[mesh.iMaterialIndex].avSubMaterials; std::vector<ASE::Material> vSubMaterials = mParser->m_vMaterials[mesh.iMaterialIndex].avSubMaterials;
@ -1016,8 +984,8 @@ void ASEImporter::ConvertMeshes(ASE::Mesh &mesh, std::vector<aiMesh *> &avOutMes
blubb != mesh.mBoneVertices[iIndex2].mBoneWeights.end(); ++blubb) { blubb != mesh.mBoneVertices[iIndex2].mBoneWeights.end(); ++blubb) {
// NOTE: illegal cases have already been filtered out // NOTE: illegal cases have already been filtered out
avOutputBones[(*blubb).first].push_back(std::pair<unsigned int, float>( avOutputBones[(*blubb).first].emplace_back(
iBase, (*blubb).second)); iBase, (*blubb).second);
} }
} }
} }
@ -1295,6 +1263,8 @@ bool ASEImporter::GenerateNormals(ASE::Mesh &mesh) {
return false; return false;
} }
}
#endif // ASSIMP_BUILD_NO_3DS_IMPORTER #endif // ASSIMP_BUILD_NO_3DS_IMPORTER
#endif // !! ASSIMP_BUILD_NO_BASE_IMPORTER #endif // !! ASSIMP_BUILD_NO_BASE_IMPORTER

View File

@ -2,7 +2,7 @@
Open Asset Import Library (assimp) Open Asset Import Library (assimp)
---------------------------------------------------------------------- ----------------------------------------------------------------------
Copyright (c) 2006-2020, assimp team Copyright (c) 2006-2024, assimp team
All rights reserved. All rights reserved.
@ -62,42 +62,37 @@ namespace Assimp {
class ASEImporter : public BaseImporter { class ASEImporter : public BaseImporter {
public: public:
ASEImporter(); ASEImporter();
~ASEImporter(); ~ASEImporter() override = default;
// ------------------------------------------------------------------- // -------------------------------------------------------------------
/** Returns whether the class can handle the format of the given file. /** Returns whether the class can handle the format of the given file.
* See BaseImporter::CanRead() for details. * See BaseImporter::CanRead() for details.
*/ */
bool CanRead( const std::string& pFile, IOSystem* pIOHandler, bool CanRead( const std::string& pFile, IOSystem* pIOHandler,
bool checkSig) const; bool checkSig) const override;
protected: protected:
// ------------------------------------------------------------------- // -------------------------------------------------------------------
/** Return importer meta information. /** Return importer meta information.
* See #BaseImporter::GetInfo for the details * See #BaseImporter::GetInfo for the details
*/ */
const aiImporterDesc* GetInfo () const; const aiImporterDesc* GetInfo () const override;
// ------------------------------------------------------------------- // -------------------------------------------------------------------
/** Imports the given file into the given scene structure. /** Imports the given file into the given scene structure.
* See BaseImporter::InternReadFile() for details * See BaseImporter::InternReadFile() for details
*/ */
void InternReadFile( const std::string& pFile, aiScene* pScene, void InternReadFile( const std::string& pFile, aiScene* pScene,
IOSystem* pIOHandler); IOSystem* pIOHandler) override;
// ------------------------------------------------------------------- // -------------------------------------------------------------------
/** Called prior to ReadFile(). /** Called prior to ReadFile().
* The function is a request to the importer to update its configuration * The function is a request to the importer to update its configuration
* basing on the Importer's configuration property list. * basing on the Importer's configuration property list.
*/ */
void SetupProperties(const Importer* pImp); void SetupProperties(const Importer* pImp) override;
private: private:
// ------------------------------------------------------------------- // -------------------------------------------------------------------
/** Generate normal vectors basing on smoothing groups /** Generate normal vectors basing on smoothing groups
* (in some cases the normal are already contained in the file) * (in some cases the normal are already contained in the file)
@ -106,7 +101,6 @@ private:
*/ */
bool GenerateNormals(ASE::Mesh& mesh); bool GenerateNormals(ASE::Mesh& mesh);
// ------------------------------------------------------------------- // -------------------------------------------------------------------
/** Create valid vertex/normal/UV/color/face lists. /** Create valid vertex/normal/UV/color/face lists.
* All elements are unique, faces have only one set of indices * All elements are unique, faces have only one set of indices
@ -115,51 +109,43 @@ private:
*/ */
void BuildUniqueRepresentation(ASE::Mesh& mesh); void BuildUniqueRepresentation(ASE::Mesh& mesh);
/** Create one-material-per-mesh meshes ;-) /** Create one-material-per-mesh meshes ;-)
* \param mesh Mesh to work with * \param mesh Mesh to work with
* \param Receives the list of all created meshes * \param Receives the list of all created meshes
*/ */
void ConvertMeshes(ASE::Mesh& mesh, std::vector<aiMesh*>& avOut); void ConvertMeshes(ASE::Mesh& mesh, std::vector<aiMesh*>& avOut);
// ------------------------------------------------------------------- // -------------------------------------------------------------------
/** Convert a material to a aiMaterial object /** Convert a material to a aiMaterial object
* \param mat Input material * \param mat Input material
*/ */
void ConvertMaterial(ASE::Material& mat); void ConvertMaterial(ASE::Material& mat);
// ------------------------------------------------------------------- // -------------------------------------------------------------------
/** Setup the final material indices for each mesh /** Setup the final material indices for each mesh
*/ */
void BuildMaterialIndices(); void BuildMaterialIndices();
// ------------------------------------------------------------------- // -------------------------------------------------------------------
/** Build the node graph /** Build the node graph
*/ */
void BuildNodes(std::vector<ASE::BaseNode*>& nodes); void BuildNodes(std::vector<ASE::BaseNode*>& nodes);
// ------------------------------------------------------------------- // -------------------------------------------------------------------
/** Build output cameras /** Build output cameras
*/ */
void BuildCameras(); void BuildCameras();
// ------------------------------------------------------------------- // -------------------------------------------------------------------
/** Build output lights /** Build output lights
*/ */
void BuildLights(); void BuildLights();
// ------------------------------------------------------------------- // -------------------------------------------------------------------
/** Build output animations /** Build output animations
*/ */
void BuildAnimations(const std::vector<ASE::BaseNode*>& nodes); void BuildAnimations(const std::vector<ASE::BaseNode*>& nodes);
// ------------------------------------------------------------------- // -------------------------------------------------------------------
/** Add sub nodes to a node /** Add sub nodes to a node
* \param pcParent parent node to be filled * \param pcParent parent node to be filled
@ -167,13 +153,13 @@ private:
* \param matrix Current transform * \param matrix Current transform
*/ */
void AddNodes(const std::vector<ASE::BaseNode*>& nodes, void AddNodes(const std::vector<ASE::BaseNode*>& nodes,
aiNode* pcParent,const char* szName); aiNode* pcParent, const std::string &name);
void AddNodes(const std::vector<ASE::BaseNode*>& nodes, void AddNodes(const std::vector<ASE::BaseNode*>& nodes,
aiNode* pcParent,const char* szName, aiNode* pcParent, const std::string &name,
const aiMatrix4x4& matrix); const aiMatrix4x4& matrix);
void AddMeshes(const ASE::BaseNode* snode,aiNode* node); void AddMeshes(const ASE::BaseNode* snode, aiNode* node);
// ------------------------------------------------------------------- // -------------------------------------------------------------------
/** Generate a default material and add it to the parser's list /** Generate a default material and add it to the parser's list
@ -183,7 +169,6 @@ private:
void GenerateDefaultMaterial(); void GenerateDefaultMaterial();
protected: protected:
/** Parser instance */ /** Parser instance */
ASE::Parser* mParser; ASE::Parser* mParser;
@ -203,5 +188,4 @@ protected:
} // end of namespace Assimp } // end of namespace Assimp
#endif // AI_3DSIMPORTER_H_INC #endif // AI_3DSIMPORTER_H_INC

File diff suppressed because it is too large Load Diff

View File

@ -2,8 +2,7 @@
Open Asset Import Library (assimp) Open Asset Import Library (assimp)
---------------------------------------------------------------------- ----------------------------------------------------------------------
Copyright (c) 2006-2020, assimp team Copyright (c) 2006-2024, assimp team
All rights reserved. All rights reserved.
@ -40,15 +39,14 @@ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
---------------------------------------------------------------------- ----------------------------------------------------------------------
*/ */
/** @file Defines the helper data structures for importing ASE files */ /** @file Defines the helper data structures for importing ASE files */
#ifndef AI_ASEFILEHELPER_H_INC #ifndef AI_ASEFILEHELPER_H_INC
#define AI_ASEFILEHELPER_H_INC #define AI_ASEFILEHELPER_H_INC
// public ASSIMP headers // public ASSIMP headers
#include <assimp/types.h>
#include <assimp/mesh.h>
#include <assimp/anim.h> #include <assimp/anim.h>
#include <assimp/mesh.h>
#include <assimp/types.h>
#ifndef ASSIMP_BUILD_NO_3DS_IMPORTER #ifndef ASSIMP_BUILD_NO_3DS_IMPORTER
@ -59,27 +57,26 @@ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
// ASE is quite similar to 3ds. We can reuse some structures // ASE is quite similar to 3ds. We can reuse some structures
#include "AssetLib/3DS/3DSLoader.h" #include "AssetLib/3DS/3DSLoader.h"
namespace Assimp { namespace Assimp {
namespace ASE { namespace ASE {
using namespace D3DS; using namespace D3DS;
// --------------------------------------------------------------------------- // ---------------------------------------------------------------------------
/** Helper structure representing an ASE material */ /** Helper structure representing an ASE material */
struct Material : public D3DS::Material struct Material : public D3DS::Material {
{
//! Default constructor has been deleted //! Default constructor has been deleted
Material() = delete; Material() = delete;
//! Constructor with explicit name //! Constructor with explicit name
explicit Material(const std::string &name) explicit Material(const std::string &name) :
: D3DS::Material(name) D3DS::Material(name),
, pcInstance(NULL) pcInstance(nullptr),
, bNeed (false) { bNeed(false) {
// empty // empty
} }
Material(const Material &other) = default; Material(const Material &other) = default;
Material &operator=(const Material &other) { Material &operator=(const Material &other) {
if (this == &other) { if (this == &other) {
@ -93,19 +90,16 @@ struct Material : public D3DS::Material
return *this; return *this;
} }
//! Move constructor. This is explicitly written because MSVC doesn't support defaulting it //! Move constructor. This is explicitly written because MSVC doesn't support defaulting it
Material(Material &&other) AI_NO_EXCEPT Material(Material &&other) AI_NO_EXCEPT
: D3DS::Material(std::move(other)) : D3DS::Material(std::move(other)),
, avSubMaterials(std::move(other.avSubMaterials)) avSubMaterials(std::move(other.avSubMaterials)),
, pcInstance(std::move(other.pcInstance)) pcInstance(other.pcInstance),
, bNeed(std::move(other.bNeed)) bNeed(other.bNeed) {
{
other.pcInstance = nullptr; other.pcInstance = nullptr;
} }
Material &operator=(Material &&other) AI_NO_EXCEPT {
Material &operator=( Material &&other) AI_NO_EXCEPT {
if (this == &other) { if (this == &other) {
return *this; return *this;
} }
@ -113,23 +107,21 @@ struct Material : public D3DS::Material
//D3DS::Material::operator=(std::move(other)); //D3DS::Material::operator=(std::move(other));
avSubMaterials = std::move(other.avSubMaterials); avSubMaterials = std::move(other.avSubMaterials);
pcInstance = std::move(other.pcInstance); pcInstance = other.pcInstance;
bNeed = std::move(other.bNeed); bNeed = other.bNeed;
other.pcInstance = nullptr; other.pcInstance = nullptr;
return *this; return *this;
} }
~Material() = default;
~Material() {}
//! Contains all sub materials of this material //! Contains all sub materials of this material
std::vector<Material> avSubMaterials; std::vector<Material> avSubMaterials;
//! aiMaterial object //! aiMaterial object
aiMaterial* pcInstance; aiMaterial *pcInstance;
//! Can we remove this material? //! Can we remove this material?
bool bNeed; bool bNeed;
@ -140,8 +132,8 @@ struct Material : public D3DS::Material
struct Face : public FaceWithSmoothingGroup { struct Face : public FaceWithSmoothingGroup {
//! Default constructor. Initializes everything with 0 //! Default constructor. Initializes everything with 0
Face() AI_NO_EXCEPT Face() AI_NO_EXCEPT
: iMaterial(DEFAULT_MATINDEX) : iMaterial(DEFAULT_MATINDEX),
, iFace(0) { iFace(0) {
// empty // empty
} }
@ -172,8 +164,8 @@ struct Bone {
Bone() = delete; Bone() = delete;
//! Construction from an existing name //! Construction from an existing name
explicit Bone( const std::string& name) explicit Bone(const std::string &name) :
: mName(name) { mName(name) {
// empty // empty
} }
@ -186,33 +178,34 @@ struct Bone {
struct BoneVertex { struct BoneVertex {
//! Bone and corresponding vertex weight. //! Bone and corresponding vertex weight.
//! -1 for unrequired bones .... //! -1 for unrequired bones ....
std::vector<std::pair<int,float> > mBoneWeights; std::vector<std::pair<int, float>> mBoneWeights;
}; };
// --------------------------------------------------------------------------- // ---------------------------------------------------------------------------
/** Helper structure to represent an ASE file animation */ /** Helper structure to represent an ASE file animation */
struct Animation { struct Animation {
enum Type { enum Type {
TRACK = 0x0, TRACK = 0x0,
BEZIER = 0x1, BEZIER = 0x1,
TCB = 0x2 TCB = 0x2
} mRotationType, mScalingType, mPositionType; } mRotationType,
mScalingType, mPositionType;
Animation() AI_NO_EXCEPT Animation() AI_NO_EXCEPT
: mRotationType (TRACK) : mRotationType(TRACK),
, mScalingType (TRACK) mScalingType(TRACK),
, mPositionType (TRACK) { mPositionType(TRACK) {
// empty // empty
} }
//! List of track rotation keyframes //! List of track rotation keyframes
std::vector< aiQuatKey > akeyRotations; std::vector<aiQuatKey> akeyRotations;
//! List of track position keyframes //! List of track position keyframes
std::vector< aiVectorKey > akeyPositions; std::vector<aiVectorKey> akeyPositions;
//! List of track scaling keyframes //! List of track scaling keyframes
std::vector< aiVectorKey > akeyScaling; std::vector<aiVectorKey> akeyScaling;
}; };
// --------------------------------------------------------------------------- // ---------------------------------------------------------------------------
@ -220,7 +213,7 @@ struct Animation {
struct InheritanceInfo { struct InheritanceInfo {
//! Default constructor //! Default constructor
InheritanceInfo() AI_NO_EXCEPT { InheritanceInfo() AI_NO_EXCEPT {
for ( size_t i=0; i<3; ++i ) { for (size_t i = 0; i < 3; ++i) {
abInheritPosition[i] = abInheritRotation[i] = abInheritScaling[i] = true; abInheritPosition[i] = abInheritRotation[i] = abInheritScaling[i] = true;
} }
} }
@ -246,10 +239,8 @@ struct BaseNode {
} mType; } mType;
//! Construction from an existing name //! Construction from an existing name
BaseNode(Type _mType, const std::string &name) BaseNode(Type _mType, const std::string &name) :
: mType (_mType) mType(_mType), mName(name), mProcessed(false) {
, mName (name)
, mProcessed (false) {
// Set mTargetPosition to qnan // Set mTargetPosition to qnan
const ai_real qnan = get_qnan(); const ai_real qnan = get_qnan();
mTargetPosition.x = qnan; mTargetPosition.x = qnan;
@ -289,14 +280,9 @@ struct Mesh : public MeshWithSmoothingGroups<ASE::Face>, public BaseNode {
Mesh() = delete; Mesh() = delete;
//! Construction from an existing name //! Construction from an existing name
explicit Mesh(const std::string &name) explicit Mesh(const std::string &name) :
: BaseNode( BaseNode::Mesh, name ) BaseNode(BaseNode::Mesh, name), mVertexColors(), mBoneVertices(), mBones(), iMaterialIndex(Face::DEFAULT_MATINDEX), bSkip(false) {
, mVertexColors() for (unsigned int c = 0; c < AI_MAX_NUMBER_OF_TEXTURECOORDS; ++c) {
, mBoneVertices()
, mBones()
, iMaterialIndex(Face::DEFAULT_MATINDEX)
, bSkip (false) {
for (unsigned int c = 0; c < AI_MAX_NUMBER_OF_TEXTURECOORDS;++c) {
this->mNumUVComponents[c] = 2; this->mNumUVComponents[c] = 2;
} }
} }
@ -325,10 +311,8 @@ struct Mesh : public MeshWithSmoothingGroups<ASE::Face>, public BaseNode {
// --------------------------------------------------------------------------- // ---------------------------------------------------------------------------
/** Helper structure to represent an ASE light source */ /** Helper structure to represent an ASE light source */
struct Light : public BaseNode struct Light : public BaseNode {
{ enum LightType {
enum LightType
{
OMNI, OMNI,
TARGET, TARGET,
FREE, FREE,
@ -339,17 +323,13 @@ struct Light : public BaseNode
Light() = delete; Light() = delete;
//! Construction from an existing name //! Construction from an existing name
explicit Light(const std::string &name) explicit Light(const std::string &name) :
: BaseNode (BaseNode::Light, name) BaseNode(BaseNode::Light, name), mLightType(OMNI), mColor(1.f, 1.f, 1.f), mIntensity(1.f) // light is white by default
, mLightType (OMNI) ,
, mColor (1.f,1.f,1.f) mAngle(45.f),
, mIntensity (1.f) // light is white by default mFalloff(0.f) {
, mAngle (45.f)
, mFalloff (0.f)
{
} }
LightType mLightType; LightType mLightType;
aiColor3D mColor; aiColor3D mColor;
ai_real mIntensity; ai_real mIntensity;
@ -359,10 +339,8 @@ struct Light : public BaseNode
// --------------------------------------------------------------------------- // ---------------------------------------------------------------------------
/** Helper structure to represent an ASE camera */ /** Helper structure to represent an ASE camera */
struct Camera : public BaseNode struct Camera : public BaseNode {
{ enum CameraType {
enum CameraType
{
FREE, FREE,
TARGET TARGET
}; };
@ -370,18 +348,16 @@ struct Camera : public BaseNode
//! Default constructor has been deleted //! Default constructor has been deleted
Camera() = delete; Camera() = delete;
//! Construction from an existing name //! Construction from an existing name
explicit Camera(const std::string &name) explicit Camera(const std::string &name) :
: BaseNode (BaseNode::Camera, name) BaseNode(BaseNode::Camera, name), mFOV(0.75f) // in radians
, mFOV (0.75f) // in radians ,
, mNear (0.1f) mNear(0.1f),
, mFar (1000.f) // could be zero mFar(1000.f) // could be zero
, mCameraType (FREE) ,
{ mCameraType(FREE) {
} }
ai_real mFOV, mNear, mFar; ai_real mFOV, mNear, mFar;
CameraType mCameraType; CameraType mCameraType;
}; };
@ -391,7 +367,7 @@ struct Camera : public BaseNode
struct Dummy : public BaseNode { struct Dummy : public BaseNode {
//! Constructor //! Constructor
Dummy() AI_NO_EXCEPT Dummy() AI_NO_EXCEPT
: BaseNode (BaseNode::Dummy, "DUMMY") { : BaseNode(BaseNode::Dummy, "DUMMY") {
// empty // empty
} }
}; };
@ -408,29 +384,24 @@ struct Dummy : public BaseNode {
/** \brief Class to parse ASE files /** \brief Class to parse ASE files
*/ */
class Parser { class Parser {
private:
Parser() AI_NO_EXCEPT {
// empty
}
public: public:
/// @brief No default constructor.
Parser() = delete;
// ------------------------------------------------------------------- // -------------------------------------------------------------------
//! Construct a parser from a given input file which is //! Construct a parser from a given input file which is
//! guaranteed to be terminated with zero. //! guaranteed to be terminated with zero.
//! @param szFile Input file //! @param file The name of the input file.
//! @param fileFormatDefault Assumed file format version. If the //! @param fileFormatDefault Assumed file format version. If the
//! file format is specified in the file the new value replaces //! file format is specified in the file the new value replaces
//! the default value. //! the default value.
Parser (const char* szFile, unsigned int fileFormatDefault); Parser(const char *file, size_t fileLen, unsigned int fileFormatDefault);
// ------------------------------------------------------------------- // -------------------------------------------------------------------
//! Parses the file into the parsers internal representation //! Parses the file into the parsers internal representation
void Parse(); void Parse();
private: private:
// ------------------------------------------------------------------- // -------------------------------------------------------------------
//! Parse the *SCENE block in a file //! Parse the *SCENE block in a file
void ParseLV1SceneBlock(); void ParseLV1SceneBlock();
@ -446,45 +417,45 @@ private:
// ------------------------------------------------------------------- // -------------------------------------------------------------------
//! Parse a *<xxx>OBJECT block in a file //! Parse a *<xxx>OBJECT block in a file
//! \param mesh Node to be filled //! \param mesh Node to be filled
void ParseLV1ObjectBlock(BaseNode& mesh); void ParseLV1ObjectBlock(BaseNode &mesh);
// ------------------------------------------------------------------- // -------------------------------------------------------------------
//! Parse a *MATERIAL blocks in a material list //! Parse a *MATERIAL blocks in a material list
//! \param mat Material structure to be filled //! \param mat Material structure to be filled
void ParseLV2MaterialBlock(Material& mat); void ParseLV2MaterialBlock(Material &mat);
// ------------------------------------------------------------------- // -------------------------------------------------------------------
//! Parse a *NODE_TM block in a file //! Parse a *NODE_TM block in a file
//! \param mesh Node (!) object to be filled //! \param mesh Node (!) object to be filled
void ParseLV2NodeTransformBlock(BaseNode& mesh); void ParseLV2NodeTransformBlock(BaseNode &mesh);
// ------------------------------------------------------------------- // -------------------------------------------------------------------
//! Parse a *TM_ANIMATION block in a file //! Parse a *TM_ANIMATION block in a file
//! \param mesh Mesh object to be filled //! \param mesh Mesh object to be filled
void ParseLV2AnimationBlock(BaseNode& mesh); void ParseLV2AnimationBlock(BaseNode &mesh);
void ParseLV3PosAnimationBlock(ASE::Animation& anim); void ParseLV3PosAnimationBlock(ASE::Animation &anim);
void ParseLV3ScaleAnimationBlock(ASE::Animation& anim); void ParseLV3ScaleAnimationBlock(ASE::Animation &anim);
void ParseLV3RotAnimationBlock(ASE::Animation& anim); void ParseLV3RotAnimationBlock(ASE::Animation &anim);
// ------------------------------------------------------------------- // -------------------------------------------------------------------
//! Parse a *MESH block in a file //! Parse a *MESH block in a file
//! \param mesh Mesh object to be filled //! \param mesh Mesh object to be filled
void ParseLV2MeshBlock(Mesh& mesh); void ParseLV2MeshBlock(Mesh &mesh);
// ------------------------------------------------------------------- // -------------------------------------------------------------------
//! Parse a *LIGHT_SETTINGS block in a file //! Parse a *LIGHT_SETTINGS block in a file
//! \param light Light object to be filled //! \param light Light object to be filled
void ParseLV2LightSettingsBlock(Light& light); void ParseLV2LightSettingsBlock(Light &light);
// ------------------------------------------------------------------- // -------------------------------------------------------------------
//! Parse a *CAMERA_SETTINGS block in a file //! Parse a *CAMERA_SETTINGS block in a file
//! \param cam Camera object to be filled //! \param cam Camera object to be filled
void ParseLV2CameraSettingsBlock(Camera& cam); void ParseLV2CameraSettingsBlock(Camera &cam);
// ------------------------------------------------------------------- // -------------------------------------------------------------------
//! Parse the *MAP_XXXXXX blocks in a material //! Parse the *MAP_XXXXXX blocks in a material
//! \param map Texture structure to be filled //! \param map Texture structure to be filled
void ParseLV3MapBlock(Texture& map); void ParseLV3MapBlock(Texture &map);
// ------------------------------------------------------------------- // -------------------------------------------------------------------
//! Parse a *MESH_VERTEX_LIST block in a file //! Parse a *MESH_VERTEX_LIST block in a file
@ -493,7 +464,7 @@ private:
//! A warning is sent to the logger if the validations fails. //! A warning is sent to the logger if the validations fails.
//! \param mesh Mesh object to be filled //! \param mesh Mesh object to be filled
void ParseLV3MeshVertexListBlock( void ParseLV3MeshVertexListBlock(
unsigned int iNumVertices,Mesh& mesh); unsigned int iNumVertices, Mesh &mesh);
// ------------------------------------------------------------------- // -------------------------------------------------------------------
//! Parse a *MESH_FACE_LIST block in a file //! Parse a *MESH_FACE_LIST block in a file
@ -502,7 +473,7 @@ private:
//! A warning is sent to the logger if the validations fails. //! A warning is sent to the logger if the validations fails.
//! \param mesh Mesh object to be filled //! \param mesh Mesh object to be filled
void ParseLV3MeshFaceListBlock( void ParseLV3MeshFaceListBlock(
unsigned int iNumFaces,Mesh& mesh); unsigned int iNumFaces, Mesh &mesh);
// ------------------------------------------------------------------- // -------------------------------------------------------------------
//! Parse a *MESH_TVERT_LIST block in a file //! Parse a *MESH_TVERT_LIST block in a file
@ -512,7 +483,7 @@ private:
//! \param mesh Mesh object to be filled //! \param mesh Mesh object to be filled
//! \param iChannel Output UVW channel //! \param iChannel Output UVW channel
void ParseLV3MeshTListBlock( void ParseLV3MeshTListBlock(
unsigned int iNumVertices,Mesh& mesh, unsigned int iChannel = 0); unsigned int iNumVertices, Mesh &mesh, unsigned int iChannel = 0);
// ------------------------------------------------------------------- // -------------------------------------------------------------------
//! Parse a *MESH_TFACELIST block in a file //! Parse a *MESH_TFACELIST block in a file
@ -522,7 +493,7 @@ private:
//! \param mesh Mesh object to be filled //! \param mesh Mesh object to be filled
//! \param iChannel Output UVW channel //! \param iChannel Output UVW channel
void ParseLV3MeshTFaceListBlock( void ParseLV3MeshTFaceListBlock(
unsigned int iNumFaces,Mesh& mesh, unsigned int iChannel = 0); unsigned int iNumFaces, Mesh &mesh, unsigned int iChannel = 0);
// ------------------------------------------------------------------- // -------------------------------------------------------------------
//! Parse an additional mapping channel //! Parse an additional mapping channel
@ -530,7 +501,7 @@ private:
//! \param iChannel Channel index to be filled //! \param iChannel Channel index to be filled
//! \param mesh Mesh object to be filled //! \param mesh Mesh object to be filled
void ParseLV3MappingChannel( void ParseLV3MappingChannel(
unsigned int iChannel, Mesh& mesh); unsigned int iChannel, Mesh &mesh);
// ------------------------------------------------------------------- // -------------------------------------------------------------------
//! Parse a *MESH_CVERTLIST block in a file //! Parse a *MESH_CVERTLIST block in a file
@ -539,7 +510,7 @@ private:
//! A warning is sent to the logger if the validations fails. //! A warning is sent to the logger if the validations fails.
//! \param mesh Mesh object to be filled //! \param mesh Mesh object to be filled
void ParseLV3MeshCListBlock( void ParseLV3MeshCListBlock(
unsigned int iNumVertices, Mesh& mesh); unsigned int iNumVertices, Mesh &mesh);
// ------------------------------------------------------------------- // -------------------------------------------------------------------
//! Parse a *MESH_CFACELIST block in a file //! Parse a *MESH_CFACELIST block in a file
@ -548,70 +519,73 @@ private:
//! A warning is sent to the logger if the validations fails. //! A warning is sent to the logger if the validations fails.
//! \param mesh Mesh object to be filled //! \param mesh Mesh object to be filled
void ParseLV3MeshCFaceListBlock( void ParseLV3MeshCFaceListBlock(
unsigned int iNumFaces, Mesh& mesh); unsigned int iNumFaces, Mesh &mesh);
// ------------------------------------------------------------------- // -------------------------------------------------------------------
//! Parse a *MESH_NORMALS block in a file //! Parse a *MESH_NORMALS block in a file
//! \param mesh Mesh object to be filled //! \param mesh Mesh object to be filled
void ParseLV3MeshNormalListBlock(Mesh& mesh); void ParseLV3MeshNormalListBlock(Mesh &mesh);
// ------------------------------------------------------------------- // -------------------------------------------------------------------
//! Parse a *MESH_WEIGHTSblock in a file //! Parse a *MESH_WEIGHTSblock in a file
//! \param mesh Mesh object to be filled //! \param mesh Mesh object to be filled
void ParseLV3MeshWeightsBlock(Mesh& mesh); void ParseLV3MeshWeightsBlock(Mesh &mesh);
// ------------------------------------------------------------------- // -------------------------------------------------------------------
//! Parse the bone list of a file //! Parse the bone list of a file
//! \param mesh Mesh object to be filled //! \param mesh Mesh object to be filled
//! \param iNumBones Number of bones in the mesh //! \param iNumBones Number of bones in the mesh
void ParseLV4MeshBones(unsigned int iNumBones,Mesh& mesh); void ParseLV4MeshBones(unsigned int iNumBones, Mesh &mesh);
// ------------------------------------------------------------------- // -------------------------------------------------------------------
//! Parse the bone vertices list of a file //! Parse the bone vertices list of a file
//! \param mesh Mesh object to be filled //! \param mesh Mesh object to be filled
//! \param iNumVertices Number of vertices to be parsed //! \param iNumVertices Number of vertices to be parsed
void ParseLV4MeshBonesVertices(unsigned int iNumVertices,Mesh& mesh); void ParseLV4MeshBonesVertices(unsigned int iNumVertices, Mesh &mesh);
// ------------------------------------------------------------------- // -------------------------------------------------------------------
//! Parse a *MESH_FACE block in a file //! Parse a *MESH_FACE block in a file
//! \param out receive the face data //! \param out receive the face data
void ParseLV4MeshFace(ASE::Face& out); void ParseLV4MeshFace(ASE::Face &out);
// ------------------------------------------------------------------- // -------------------------------------------------------------------
//! Parse a *MESH_VERT block in a file //! Parse a *MESH_VERT block in a file
//! (also works for MESH_TVERT, MESH_CFACE, MESH_VERTCOL ...) //! (also works for MESH_TVERT, MESH_CFACE, MESH_VERTCOL ...)
//! \param apOut Output buffer (3 floats) //! \param apOut Output buffer (3 floats)
//! \param rIndexOut Output index //! \param rIndexOut Output index
void ParseLV4MeshFloatTriple(ai_real* apOut, unsigned int& rIndexOut); void ParseLV4MeshRealTriple(ai_real *apOut, unsigned int &rIndexOut);
void ParseLV4MeshFloatTriple(float *apOut, unsigned int &rIndexOut);
// ------------------------------------------------------------------- // -------------------------------------------------------------------
//! Parse a *MESH_VERT block in a file //! Parse a *MESH_VERT block in a file
//! (also works for MESH_TVERT, MESH_CFACE, MESH_VERTCOL ...) //! (also works for MESH_TVERT, MESH_CFACE, MESH_VERTCOL ...)
//! \param apOut Output buffer (3 floats) //! \param apOut Output buffer (3 floats)
void ParseLV4MeshFloatTriple(ai_real* apOut); void ParseLV4MeshRealTriple(ai_real *apOut);
void ParseLV4MeshFloatTriple(float *apOut);
// ------------------------------------------------------------------- // -------------------------------------------------------------------
//! Parse a *MESH_TFACE block in a file //! Parse a *MESH_TFACE block in a file
//! (also works for MESH_CFACE) //! (also works for MESH_CFACE)
//! \param apOut Output buffer (3 ints) //! \param apOut Output buffer (3 ints)
//! \param rIndexOut Output index //! \param rIndexOut Output index
void ParseLV4MeshLongTriple(unsigned int* apOut, unsigned int& rIndexOut); void ParseLV4MeshLongTriple(unsigned int *apOut, unsigned int &rIndexOut);
// ------------------------------------------------------------------- // -------------------------------------------------------------------
//! Parse a *MESH_TFACE block in a file //! Parse a *MESH_TFACE block in a file
//! (also works for MESH_CFACE) //! (also works for MESH_CFACE)
//! \param apOut Output buffer (3 ints) //! \param apOut Output buffer (3 ints)
void ParseLV4MeshLongTriple(unsigned int* apOut); void ParseLV4MeshLongTriple(unsigned int *apOut);
// ------------------------------------------------------------------- // -------------------------------------------------------------------
//! Parse a single float element //! Parse a single float element
//! \param fOut Output float //! \param fOut Output float
void ParseLV4MeshFloat(ai_real& fOut); void ParseLV4MeshReal(ai_real &fOut);
void ParseLV4MeshFloat(float &fOut);
// ------------------------------------------------------------------- // -------------------------------------------------------------------
//! Parse a single int element //! Parse a single int element
//! \param iOut Output integer //! \param iOut Output integer
void ParseLV4MeshLong(unsigned int& iOut); void ParseLV4MeshLong(unsigned int &iOut);
// ------------------------------------------------------------------- // -------------------------------------------------------------------
//! Skip everything to the next: '*' or '\0' //! Skip everything to the next: '*' or '\0'
@ -625,17 +599,17 @@ private:
// ------------------------------------------------------------------- // -------------------------------------------------------------------
//! Output a warning to the logger //! Output a warning to the logger
//! \param szWarn Warn message //! \param szWarn Warn message
void LogWarning(const char* szWarn); void LogWarning(const char *szWarn);
// ------------------------------------------------------------------- // -------------------------------------------------------------------
//! Output a message to the logger //! Output a message to the logger
//! \param szWarn Message //! \param szWarn Message
void LogInfo(const char* szWarn); void LogInfo(const char *szWarn);
// ------------------------------------------------------------------- // -------------------------------------------------------------------
//! Output an error to the logger //! Output an error to the logger
//! \param szWarn Error message //! \param szWarn Error message
AI_WONT_RETURN void LogError(const char* szWarn) AI_WONT_RETURN_SUFFIX; AI_WONT_RETURN void LogError(const char *szWarn) AI_WONT_RETURN_SUFFIX;
// ------------------------------------------------------------------- // -------------------------------------------------------------------
//! Parse a string, enclosed in double quotation marks //! Parse a string, enclosed in double quotation marks
@ -643,12 +617,11 @@ private:
//! \param szName Name of the enclosing element -> used in error //! \param szName Name of the enclosing element -> used in error
//! messages. //! messages.
//! \return false if an error occurred //! \return false if an error occurred
bool ParseString(std::string& out,const char* szName); bool ParseString(std::string &out, const char *szName);
public: public:
const char *mFilePtr; ////< Pointer to current data
//! Pointer to current data const char *mEnd; ///< The end pointer of the file data
const char* filePtr;
//! background color to be passed to the viewer //! background color to be passed to the viewer
//! QNAN if none was found //! QNAN if none was found
@ -695,9 +668,8 @@ public:
unsigned int iFileFormat; unsigned int iFileFormat;
}; };
} // Namespace ASE } // Namespace ASE
} // Namespace ASSIMP } // namespace Assimp
#endif // ASSIMP_BUILD_NO_3DS_IMPORTER #endif // ASSIMP_BUILD_NO_3DS_IMPORTER

View File

@ -2,7 +2,7 @@
Open Asset Import Library (assimp) Open Asset Import Library (assimp)
---------------------------------------------------------------------- ----------------------------------------------------------------------
Copyright (c) 2006-2020, assimp team Copyright (c) 2006-2024, assimp team
All rights reserved. All rights reserved.

View File

@ -2,8 +2,7 @@
Open Asset Import Library (assimp) Open Asset Import Library (assimp)
---------------------------------------------------------------------- ----------------------------------------------------------------------
Copyright (c) 2006-2020, assimp team Copyright (c) 2006-2024, assimp team
All rights reserved. All rights reserved.
@ -43,16 +42,19 @@ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
/** @file AssbinExporter.h /** @file AssbinExporter.h
* ASSBIN Exporter Main Header * ASSBIN Exporter Main Header
*/ */
#pragma once
#ifndef AI_ASSBINEXPORTER_H_INC #ifndef AI_ASSBINEXPORTER_H_INC
#define AI_ASSBINEXPORTER_H_INC #define AI_ASSBINEXPORTER_H_INC
#include <assimp/defs.h> #include <assimp/defs.h>
#ifndef ASSIMP_BUILD_NO_EXPORT
// nothing really needed here - reserved for future use like properties // nothing really needed here - reserved for future use like properties
namespace Assimp { namespace Assimp {
void ASSIMP_API ExportSceneAssbin(const char* pFile, IOSystem* pIOSystem, const aiScene* pScene, const ExportProperties* /*pProperties*/); void ASSIMP_API ExportSceneAssbin(const char* pFile, IOSystem* pIOSystem, const aiScene* pScene, const ExportProperties* /*pProperties*/);
} }
#endif
#endif // AI_ASSBINEXPORTER_H_INC #endif // AI_ASSBINEXPORTER_H_INC

View File

@ -2,7 +2,7 @@
Open Asset Import Library (assimp) Open Asset Import Library (assimp)
---------------------------------------------------------------------- ----------------------------------------------------------------------
Copyright (c) 2006-2020, assimp team Copyright (c) 2006-2024, assimp team
All rights reserved. All rights reserved.
@ -43,27 +43,21 @@ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/ */
#include "AssbinFileWriter.h" #include "AssbinFileWriter.h"
#include "Common/assbin_chunks.h" #include "Common/assbin_chunks.h"
#include "PostProcessing/ProcessHelper.h" #include "PostProcessing/ProcessHelper.h"
#include <assimp/Exceptional.h> #include <assimp/Exceptional.h>
#include <assimp/version.h> #include <assimp/version.h>
#include <assimp/Exporter.hpp>
#include <assimp/IOStream.hpp> #include <assimp/IOStream.hpp>
#ifdef ASSIMP_BUILD_NO_OWN_ZLIB #include "zlib.h"
#include <zlib.h>
#else
#include "../contrib/zlib/zlib.h"
#endif
#include <time.h> #include <ctime>
#ifdef _WIN32 #if _MSC_VER
#pragma warning(push) #pragma warning(push)
#pragma warning(disable : 4706) #pragma warning(disable : 4706)
#endif // _WIN32 #endif // _MSC_VER
namespace Assimp { namespace Assimp {
@ -132,7 +126,7 @@ inline size_t Write<double>(IOStream *stream, const double &f) {
// Serialize a vec3 // Serialize a vec3
template <> template <>
inline size_t Write<aiVector3D>(IOStream *stream, const aiVector3D &v) { inline size_t Write<aiVector3D>(IOStream *stream, const aiVector3D &v) {
size_t t = Write<float>(stream, v.x); size_t t = Write<ai_real>(stream, v.x);
t += Write<float>(stream, v.y); t += Write<float>(stream, v.y);
t += Write<float>(stream, v.z); t += Write<float>(stream, v.z);
@ -143,7 +137,7 @@ inline size_t Write<aiVector3D>(IOStream *stream, const aiVector3D &v) {
// Serialize a color value // Serialize a color value
template <> template <>
inline size_t Write<aiColor3D>(IOStream *stream, const aiColor3D &v) { inline size_t Write<aiColor3D>(IOStream *stream, const aiColor3D &v) {
size_t t = Write<float>(stream, v.r); size_t t = Write<ai_real>(stream, v.r);
t += Write<float>(stream, v.g); t += Write<float>(stream, v.g);
t += Write<float>(stream, v.b); t += Write<float>(stream, v.b);
@ -154,7 +148,7 @@ inline size_t Write<aiColor3D>(IOStream *stream, const aiColor3D &v) {
// Serialize a color value // Serialize a color value
template <> template <>
inline size_t Write<aiColor4D>(IOStream *stream, const aiColor4D &v) { inline size_t Write<aiColor4D>(IOStream *stream, const aiColor4D &v) {
size_t t = Write<float>(stream, v.r); size_t t = Write<ai_real>(stream, v.r);
t += Write<float>(stream, v.g); t += Write<float>(stream, v.g);
t += Write<float>(stream, v.b); t += Write<float>(stream, v.b);
t += Write<float>(stream, v.a); t += Write<float>(stream, v.a);
@ -166,13 +160,13 @@ inline size_t Write<aiColor4D>(IOStream *stream, const aiColor4D &v) {
// Serialize a quaternion // Serialize a quaternion
template <> template <>
inline size_t Write<aiQuaternion>(IOStream *stream, const aiQuaternion &v) { inline size_t Write<aiQuaternion>(IOStream *stream, const aiQuaternion &v) {
size_t t = Write<float>(stream, v.w); size_t t = Write<ai_real>(stream, v.w);
t += Write<float>(stream, v.x); t += Write<float>(stream, v.x);
t += Write<float>(stream, v.y); t += Write<float>(stream, v.y);
t += Write<float>(stream, v.z); t += Write<float>(stream, v.z);
ai_assert(t == 16); ai_assert(t == 16);
return 16; return t;
} }
// ----------------------------------------------------------------------------------- // -----------------------------------------------------------------------------------
@ -184,17 +178,19 @@ inline size_t Write<aiVertexWeight>(IOStream *stream, const aiVertexWeight &v) {
return t + Write<float>(stream, v.mWeight); return t + Write<float>(stream, v.mWeight);
} }
constexpr size_t MatrixSize = 64;
// ----------------------------------------------------------------------------------- // -----------------------------------------------------------------------------------
// Serialize a mat4x4 // Serialize a mat4x4
template <> template <>
inline size_t Write<aiMatrix4x4>(IOStream *stream, const aiMatrix4x4 &m) { inline size_t Write<aiMatrix4x4>(IOStream *stream, const aiMatrix4x4 &m) {
for (unsigned int i = 0; i < 4; ++i) { for (unsigned int i = 0; i < 4; ++i) {
for (unsigned int i2 = 0; i2 < 4; ++i2) { for (unsigned int i2 = 0; i2 < 4; ++i2) {
Write<float>(stream, m[i][i2]); Write<ai_real>(stream, m[i][i2]);
} }
} }
return 64; return MatrixSize;
} }
// ----------------------------------------------------------------------------------- // -----------------------------------------------------------------------------------
@ -277,7 +273,7 @@ public:
// empty // empty
} }
virtual ~AssbinChunkWriter() { ~AssbinChunkWriter() override {
if (container) { if (container) {
container->Write(&magic, sizeof(uint32_t), 1); container->Write(&magic, sizeof(uint32_t), 1);
container->Write(&cursor, sizeof(uint32_t), 1); container->Write(&cursor, sizeof(uint32_t), 1);
@ -288,26 +284,27 @@ public:
void *GetBufferPointer() { return buffer; } void *GetBufferPointer() { return buffer; }
// ------------------------------------------------------------------- size_t Read(void * /*pvBuffer*/, size_t /*pSize*/, size_t /*pCount*/) override {
virtual size_t Read(void * /*pvBuffer*/, size_t /*pSize*/, size_t /*pCount*/) {
return 0; return 0;
} }
virtual aiReturn Seek(size_t /*pOffset*/, aiOrigin /*pOrigin*/) {
aiReturn Seek(size_t /*pOffset*/, aiOrigin /*pOrigin*/) override {
return aiReturn_FAILURE; return aiReturn_FAILURE;
} }
virtual size_t Tell() const {
size_t Tell() const override {
return cursor; return cursor;
} }
virtual void Flush() {
void Flush() override {
// not implemented // not implemented
} }
virtual size_t FileSize() const { size_t FileSize() const override {
return cursor; return cursor;
} }
// ------------------------------------------------------------------- size_t Write(const void *pvBuffer, size_t pSize, size_t pCount) override {
virtual size_t Write(const void *pvBuffer, size_t pSize, size_t pCount) {
pSize *= pCount; pSize *= pCount;
if (cursor + pSize > cur_size) { if (cursor + pSize > cur_size) {
Grow(cursor + pSize); Grow(cursor + pSize);
@ -336,7 +333,7 @@ protected:
void WriteBinaryNode(IOStream *container, const aiNode *node) { void WriteBinaryNode(IOStream *container, const aiNode *node) {
AssbinChunkWriter chunk(container, ASSBIN_CHUNK_AINODE); AssbinChunkWriter chunk(container, ASSBIN_CHUNK_AINODE);
unsigned int nb_metadata = (node->mMetaData != NULL ? node->mMetaData->mNumProperties : 0); unsigned int nb_metadata = (node->mMetaData != nullptr ? node->mMetaData->mNumProperties : 0);
Write<aiString>(&chunk, node->mName); Write<aiString>(&chunk, node->mName);
Write<aiMatrix4x4>(&chunk, node->mTransformation); Write<aiMatrix4x4>(&chunk, node->mTransformation);
@ -641,6 +638,10 @@ protected:
Write<aiString>(&chunk, l->mName); Write<aiString>(&chunk, l->mName);
Write<unsigned int>(&chunk, l->mType); Write<unsigned int>(&chunk, l->mType);
Write<aiVector3D>(&chunk, l->mPosition);
Write<aiVector3D>(&chunk, l->mDirection);
Write<aiVector3D>(&chunk, l->mUp);
if (l->mType != aiLightSource_DIRECTIONAL) { if (l->mType != aiLightSource_DIRECTIONAL) {
Write<float>(&chunk, l->mAttenuationConstant); Write<float>(&chunk, l->mAttenuationConstant);
Write<float>(&chunk, l->mAttenuationLinear); Write<float>(&chunk, l->mAttenuationLinear);
@ -744,7 +745,7 @@ public:
}; };
try { try {
time_t tt = time(NULL); time_t tt = time(nullptr);
#if _WIN32 #if _WIN32
tm *p = gmtime(&tt); tm *p = gmtime(&tt);
#else #else
@ -790,7 +791,7 @@ public:
// Up to here the data is uncompressed. For compressed files, the rest // Up to here the data is uncompressed. For compressed files, the rest
// is compressed using standard DEFLATE from zlib. // is compressed using standard DEFLATE from zlib.
if (compressed) { if (compressed) {
AssbinChunkWriter uncompressedStream(NULL, 0); AssbinChunkWriter uncompressedStream(nullptr, 0);
WriteBinaryScene(&uncompressedStream, pScene); WriteBinaryScene(&uncompressedStream, pScene);
uLongf uncompressedSize = static_cast<uLongf>(uncompressedStream.Tell()); uLongf uncompressedSize = static_cast<uLongf>(uncompressedStream.Tell());
@ -825,8 +826,8 @@ void DumpSceneToAssbin(
AssbinFileWriter fileWriter(shortened, compressed); AssbinFileWriter fileWriter(shortened, compressed);
fileWriter.WriteBinaryDump(pFile, cmd, pIOSystem, pScene); fileWriter.WriteBinaryDump(pFile, cmd, pIOSystem, pScene);
} }
#ifdef _WIN32 #if _MSC_VER
#pragma warning(pop) #pragma warning(pop)
#endif // _WIN32 #endif // _MSC_VER
} // end of namespace Assimp } // end of namespace Assimp

View File

@ -2,7 +2,7 @@
Open Asset Import Library (assimp) Open Asset Import Library (assimp)
---------------------------------------------------------------------- ----------------------------------------------------------------------
Copyright (c) 2006-2020, assimp team Copyright (c) 2006-2024, assimp team
All rights reserved. All rights reserved.

View File

@ -3,7 +3,7 @@
Open Asset Import Library (assimp) Open Asset Import Library (assimp)
--------------------------------------------------------------------------- ---------------------------------------------------------------------------
Copyright (c) 2006-2020, assimp team Copyright (c) 2006-2024, assimp team
All rights reserved. All rights reserved.
@ -65,7 +65,7 @@ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
using namespace Assimp; using namespace Assimp;
static const aiImporterDesc desc = { static constexpr aiImporterDesc desc = {
"Assimp Binary Importer", "Assimp Binary Importer",
"Gargaj / Conspiracy", "Gargaj / Conspiracy",
"", "",
@ -406,7 +406,7 @@ void AssbinImporter::ReadBinaryMesh(IOStream *stream, aiMesh *mesh) {
f.mIndices = new unsigned int[f.mNumIndices]; f.mIndices = new unsigned int[f.mNumIndices];
for (unsigned int a = 0; a < f.mNumIndices; ++a) { for (unsigned int a = 0; a < f.mNumIndices; ++a) {
// Check if unsigned short ( 16 bit ) are big enought for the indices // Check if unsigned short ( 16 bit ) are big enough for the indices
if (fitsIntoUI16(mesh->mNumVertices)) { if (fitsIntoUI16(mesh->mNumVertices)) {
f.mIndices[a] = Read<uint16_t>(stream); f.mIndices[a] = Read<uint16_t>(stream);
} else { } else {
@ -556,6 +556,10 @@ void AssbinImporter::ReadBinaryLight(IOStream *stream, aiLight *l) {
l->mName = Read<aiString>(stream); l->mName = Read<aiString>(stream);
l->mType = (aiLightSourceType)Read<unsigned int>(stream); l->mType = (aiLightSourceType)Read<unsigned int>(stream);
l->mPosition = Read<aiVector3D>(stream);
l->mDirection = Read<aiVector3D>(stream);
l->mUp = Read<aiVector3D>(stream);
if (l->mType != aiLightSource_DIRECTIONAL) { if (l->mType != aiLightSource_DIRECTIONAL) {
l->mAttenuationConstant = Read<float>(stream); l->mAttenuationConstant = Read<float>(stream);
l->mAttenuationLinear = Read<float>(stream); l->mAttenuationLinear = Read<float>(stream);
@ -604,7 +608,7 @@ void AssbinImporter::ReadBinaryScene(IOStream *stream, aiScene *scene) {
// Read node graph // Read node graph
//scene->mRootNode = new aiNode[1]; //scene->mRootNode = new aiNode[1];
ReadBinaryNode(stream, &scene->mRootNode, (aiNode *)NULL); ReadBinaryNode(stream, &scene->mRootNode, (aiNode *)nullptr);
// Read all meshes // Read all meshes
if (scene->mNumMeshes) { if (scene->mNumMeshes) {
@ -671,7 +675,7 @@ void AssbinImporter::ReadBinaryScene(IOStream *stream, aiScene *scene) {
void AssbinImporter::InternReadFile(const std::string &pFile, aiScene *pScene, IOSystem *pIOHandler) { void AssbinImporter::InternReadFile(const std::string &pFile, aiScene *pScene, IOSystem *pIOHandler) {
IOStream *stream = pIOHandler->Open(pFile, "rb"); IOStream *stream = pIOHandler->Open(pFile, "rb");
if (nullptr == stream) { if (nullptr == stream) {
return; throw DeadlyImportError("ASSBIN: Could not open ", pFile);
} }
// signature // signature

View File

@ -3,8 +3,7 @@
Open Asset Import Library (assimp) Open Asset Import Library (assimp)
---------------------------------------------------------------------- ----------------------------------------------------------------------
Copyright (c) 2006-2020, assimp team Copyright (c) 2006-2024, assimp team
All rights reserved. All rights reserved.
@ -74,17 +73,11 @@ private:
bool compressed; bool compressed;
public: public:
virtual bool CanRead( bool CanRead(const std::string& pFile,
const std::string& pFile, IOSystem* pIOHandler, bool checkSig) const override;
IOSystem* pIOHandler, const aiImporterDesc* GetInfo() const override;
bool checkSig void InternReadFile(
) const; const std::string& pFile,aiScene* pScene,IOSystem* pIOHandler) override;
virtual const aiImporterDesc* GetInfo() const;
virtual void InternReadFile(
const std::string& pFile,
aiScene* pScene,
IOSystem* pIOHandler
);
void ReadHeader(); void ReadHeader();
void ReadBinaryScene( IOStream * stream, aiScene* pScene ); void ReadBinaryScene( IOStream * stream, aiScene* pScene );
void ReadBinaryNode( IOStream * stream, aiNode** mRootNode, aiNode* parent ); void ReadBinaryNode( IOStream * stream, aiNode** mRootNode, aiNode* parent );

View File

@ -7,10 +7,12 @@ For details, see http://sourceforge.net/projects/libb64
#include "cencode.h" // changed from <B64/cencode.h> #include "cencode.h" // changed from <B64/cencode.h>
const int CHARS_PER_LINE = 72; static const int CHARS_PER_LINE = 72;
#ifdef _MSC_VER
#pragma warning(push) #pragma warning(push)
#pragma warning(disable : 4244) #pragma warning(disable : 4244)
#endif // _MSC_VER
void base64_init_encodestate(base64_encodestate* state_in) void base64_init_encodestate(base64_encodestate* state_in)
{ {
@ -110,4 +112,6 @@ int base64_encode_blockend(char* code_out, base64_encodestate* state_in)
return (int)(codechar - code_out); return (int)(codechar - code_out);
} }
#ifdef _MSC_VER
#pragma warning(pop) #pragma warning(pop)
#endif // _MSC_VER

View File

@ -8,9 +8,9 @@ For details, see http://sourceforge.net/projects/libb64
#ifndef BASE64_CENCODE_H #ifndef BASE64_CENCODE_H
#define BASE64_CENCODE_H #define BASE64_CENCODE_H
#ifdef _WIN32 #ifdef _MSC_VER
#pragma warning(disable : 4127 ) #pragma warning(disable : 4127 )
#endif // _WIN32 #endif // _MSC_VER
typedef enum typedef enum
{ {

View File

@ -10,6 +10,7 @@ Licensed under a 3-clause BSD license. See the LICENSE file for more information
#ifndef ASSIMP_BUILD_NO_ASSJSON_EXPORTER #ifndef ASSIMP_BUILD_NO_ASSJSON_EXPORTER
#include <assimp/scene.h> #include <assimp/scene.h>
#include <assimp/ai_assert.h>
#include <assimp/Exporter.hpp> #include <assimp/Exporter.hpp>
#include <assimp/IOStream.hpp> #include <assimp/IOStream.hpp>
#include <assimp/IOSystem.hpp> #include <assimp/IOSystem.hpp>
@ -23,16 +24,15 @@ Licensed under a 3-clause BSD license. See the LICENSE file for more information
#define CURRENT_FORMAT_VERSION 100 #define CURRENT_FORMAT_VERSION 100
// grab scoped_ptr from assimp to avoid a dependency on boost.
//#include <assimp/../../code/BoostWorkaround/boost/scoped_ptr.hpp>
#include "mesh_splitter.h" #include "mesh_splitter.h"
extern "C" { extern "C" {
#include "cencode.h" # include "cencode.h"
} }
namespace Assimp { namespace Assimp {
// Forward declarations
void ExportAssimp2Json(const char *, Assimp::IOSystem *, const aiScene *, const Assimp::ExportProperties *); void ExportAssimp2Json(const char *, Assimp::IOSystem *, const aiScene *, const Assimp::ExportProperties *);
// small utility class to simplify serializing the aiScene to Json // small utility class to simplify serializing the aiScene to Json
@ -41,12 +41,17 @@ public:
enum { enum {
Flag_DoNotIndent = 0x1, Flag_DoNotIndent = 0x1,
Flag_WriteSpecialFloats = 0x2, Flag_WriteSpecialFloats = 0x2,
Flag_SkipWhitespaces = 0x4
}; };
JSONWriter(Assimp::IOStream &out, unsigned int flags = 0u) : JSONWriter(Assimp::IOStream &out, unsigned int flags = 0u) :
out(out), first(), flags(flags) { out(out), indent (""), newline("\n"), space(" "), buff (), first(false), flags(flags) {
// make sure that all formatting happens using the standard, C locale and not the user's current locale // make sure that all formatting happens using the standard, C locale and not the user's current locale
buff.imbue(std::locale("C")); buff.imbue(std::locale("C"));
if (flags & Flag_SkipWhitespaces) {
newline = "";
space = "";
}
} }
~JSONWriter() { ~JSONWriter() {
@ -70,7 +75,7 @@ public:
void Key(const std::string &name) { void Key(const std::string &name) {
AddIndentation(); AddIndentation();
Delimit(); Delimit();
buff << '\"' + name + "\": "; buff << '\"' + name + "\":" << space;
} }
template <typename Literal> template <typename Literal>
@ -78,12 +83,12 @@ public:
AddIndentation(); AddIndentation();
Delimit(); Delimit();
LiteralToString(buff, name) << '\n'; LiteralToString(buff, name) << newline;
} }
template <typename Literal> template <typename Literal>
void SimpleValue(const Literal &s) { void SimpleValue(const Literal &s) {
LiteralToString(buff, s) << '\n'; LiteralToString(buff, s) << newline;
} }
void SimpleValue(const void *buffer, size_t len) { void SimpleValue(const void *buffer, size_t len) {
@ -102,7 +107,7 @@ public:
} }
} }
buff << '\"' << cur_out << "\"\n"; buff << '\"' << cur_out << "\"" << newline;
delete[] cur_out; delete[] cur_out;
} }
@ -115,7 +120,7 @@ public:
} }
} }
first = true; first = true;
buff << "{\n"; buff << "{" << newline;
PushIndent(); PushIndent();
} }
@ -123,7 +128,7 @@ public:
PopIndent(); PopIndent();
AddIndentation(); AddIndentation();
first = false; first = false;
buff << "}\n"; buff << "}" << newline;
} }
void StartArray(bool is_element = false) { void StartArray(bool is_element = false) {
@ -135,19 +140,19 @@ public:
} }
} }
first = true; first = true;
buff << "[\n"; buff << "[" << newline;
PushIndent(); PushIndent();
} }
void EndArray() { void EndArray() {
PopIndent(); PopIndent();
AddIndentation(); AddIndentation();
buff << "]\n"; buff << "]" << newline;
first = false; first = false;
} }
void AddIndentation() { void AddIndentation() {
if (!(flags & Flag_DoNotIndent)) { if (!(flags & Flag_DoNotIndent) && !(flags & Flag_SkipWhitespaces)) {
buff << indent; buff << indent;
} }
} }
@ -156,7 +161,7 @@ public:
if (!first) { if (!first) {
buff << ','; buff << ',';
} else { } else {
buff << ' '; buff << space;
first = false; first = false;
} }
} }
@ -174,7 +179,6 @@ private:
// escape backslashes and single quotes, both would render the JSON invalid if left as is // escape backslashes and single quotes, both would render the JSON invalid if left as is
t.reserve(s.length); t.reserve(s.length);
for (size_t i = 0; i < s.length; ++i) { for (size_t i = 0; i < s.length; ++i) {
if (s.data[i] == '\\' || s.data[i] == '\'' || s.data[i] == '\"') { if (s.data[i] == '\\' || s.data[i] == '\'' || s.data[i] == '\"') {
t.push_back('\\'); t.push_back('\\');
} }
@ -227,14 +231,16 @@ private:
private: private:
Assimp::IOStream &out; Assimp::IOStream &out;
std::string indent, newline; std::string indent;
std::string newline;
std::string space;
std::stringstream buff; std::stringstream buff;
bool first; bool first;
unsigned int flags; unsigned int flags;
}; };
void Write(JSONWriter &out, const aiVector3D &ai, bool is_elem = true) { static void Write(JSONWriter &out, const aiVector3D &ai, bool is_elem = true) {
out.StartArray(is_elem); out.StartArray(is_elem);
out.Element(ai.x); out.Element(ai.x);
out.Element(ai.y); out.Element(ai.y);
@ -242,7 +248,7 @@ void Write(JSONWriter &out, const aiVector3D &ai, bool is_elem = true) {
out.EndArray(); out.EndArray();
} }
void Write(JSONWriter &out, const aiQuaternion &ai, bool is_elem = true) { static void Write(JSONWriter &out, const aiQuaternion &ai, bool is_elem = true) {
out.StartArray(is_elem); out.StartArray(is_elem);
out.Element(ai.w); out.Element(ai.w);
out.Element(ai.x); out.Element(ai.x);
@ -251,7 +257,7 @@ void Write(JSONWriter &out, const aiQuaternion &ai, bool is_elem = true) {
out.EndArray(); out.EndArray();
} }
void Write(JSONWriter &out, const aiColor3D &ai, bool is_elem = true) { static void Write(JSONWriter &out, const aiColor3D &ai, bool is_elem = true) {
out.StartArray(is_elem); out.StartArray(is_elem);
out.Element(ai.r); out.Element(ai.r);
out.Element(ai.g); out.Element(ai.g);
@ -259,7 +265,7 @@ void Write(JSONWriter &out, const aiColor3D &ai, bool is_elem = true) {
out.EndArray(); out.EndArray();
} }
void Write(JSONWriter &out, const aiMatrix4x4 &ai, bool is_elem = true) { static void Write(JSONWriter &out, const aiMatrix4x4 &ai, bool is_elem = true) {
out.StartArray(is_elem); out.StartArray(is_elem);
for (unsigned int x = 0; x < 4; ++x) { for (unsigned int x = 0; x < 4; ++x) {
for (unsigned int y = 0; y < 4; ++y) { for (unsigned int y = 0; y < 4; ++y) {
@ -269,7 +275,7 @@ void Write(JSONWriter &out, const aiMatrix4x4 &ai, bool is_elem = true) {
out.EndArray(); out.EndArray();
} }
void Write(JSONWriter &out, const aiBone &ai, bool is_elem = true) { static void Write(JSONWriter &out, const aiBone &ai, bool is_elem = true) {
out.StartObj(is_elem); out.StartObj(is_elem);
out.Key("name"); out.Key("name");
@ -290,7 +296,7 @@ void Write(JSONWriter &out, const aiBone &ai, bool is_elem = true) {
out.EndObj(); out.EndObj();
} }
void Write(JSONWriter &out, const aiFace &ai, bool is_elem = true) { static void Write(JSONWriter &out, const aiFace &ai, bool is_elem = true) {
out.StartArray(is_elem); out.StartArray(is_elem);
for (unsigned int i = 0; i < ai.mNumIndices; ++i) { for (unsigned int i = 0; i < ai.mNumIndices; ++i) {
out.Element(ai.mIndices[i]); out.Element(ai.mIndices[i]);
@ -298,7 +304,7 @@ void Write(JSONWriter &out, const aiFace &ai, bool is_elem = true) {
out.EndArray(); out.EndArray();
} }
void Write(JSONWriter &out, const aiMesh &ai, bool is_elem = true) { static void Write(JSONWriter &out, const aiMesh &ai, bool is_elem = true) {
out.StartObj(is_elem); out.StartObj(is_elem);
out.Key("name"); out.Key("name");
@ -409,7 +415,7 @@ void Write(JSONWriter &out, const aiMesh &ai, bool is_elem = true) {
out.EndObj(); out.EndObj();
} }
void Write(JSONWriter &out, const aiNode &ai, bool is_elem = true) { static void Write(JSONWriter &out, const aiNode &ai, bool is_elem = true) {
out.StartObj(is_elem); out.StartObj(is_elem);
out.Key("name"); out.Key("name");
@ -439,7 +445,7 @@ void Write(JSONWriter &out, const aiNode &ai, bool is_elem = true) {
out.EndObj(); out.EndObj();
} }
void Write(JSONWriter &out, const aiMaterial &ai, bool is_elem = true) { static void Write(JSONWriter &out, const aiMaterial &ai, bool is_elem = true) {
out.StartObj(is_elem); out.StartObj(is_elem);
out.Key("properties"); out.Key("properties");
@ -459,41 +465,55 @@ void Write(JSONWriter &out, const aiMaterial &ai, bool is_elem = true) {
out.Key("value"); out.Key("value");
switch (prop->mType) { switch (prop->mType) {
case aiPTI_Float: case aiPTI_Float:
if (prop->mDataLength / sizeof(float) > 1) { if (prop->mDataLength / sizeof(float) > 1) {
out.StartArray(); out.StartArray();
for (unsigned int ii = 0; ii < prop->mDataLength / sizeof(float); ++ii) { for (unsigned int ii = 0; ii < prop->mDataLength / sizeof(float); ++ii) {
out.Element(reinterpret_cast<float *>(prop->mData)[ii]); out.Element(reinterpret_cast<float *>(prop->mData)[ii]);
}
out.EndArray();
} else {
out.SimpleValue(*reinterpret_cast<float *>(prop->mData));
} }
out.EndArray(); break;
} else { case aiPTI_Double:
out.SimpleValue(*reinterpret_cast<float *>(prop->mData)); if (prop->mDataLength / sizeof(double) > 1) {
} out.StartArray();
break; for (unsigned int ii = 0; ii < prop->mDataLength / sizeof(double); ++ii) {
out.Element(reinterpret_cast<double*>(prop->mData)[ii]);
case aiPTI_Integer: }
if (prop->mDataLength / sizeof(int) > 1) { out.EndArray();
out.StartArray(); } else {
for (unsigned int ii = 0; ii < prop->mDataLength / sizeof(int); ++ii) { out.SimpleValue(*reinterpret_cast<double*>(prop->mData));
out.Element(reinterpret_cast<int *>(prop->mData)[ii]);
} }
out.EndArray(); break;
} else { case aiPTI_Integer:
out.SimpleValue(*reinterpret_cast<int *>(prop->mData)); if (prop->mDataLength / sizeof(int) > 1) {
} out.StartArray();
break; for (unsigned int ii = 0; ii < prop->mDataLength / sizeof(int); ++ii) {
out.Element(reinterpret_cast<int *>(prop->mData)[ii]);
}
out.EndArray();
} else {
out.SimpleValue(*reinterpret_cast<int *>(prop->mData));
}
break;
case aiPTI_String: { case aiPTI_String:
aiString s; {
aiGetMaterialString(&ai, prop->mKey.data, prop->mSemantic, prop->mIndex, &s); aiString s;
out.SimpleValue(s); aiGetMaterialString(&ai, prop->mKey.data, prop->mSemantic, prop->mIndex, &s);
} break; out.SimpleValue(s);
case aiPTI_Buffer: { }
// binary data is written as series of hex-encoded octets break;
out.SimpleValue(prop->mData, prop->mDataLength); case aiPTI_Buffer:
} break; {
default: // binary data is written as series of hex-encoded octets
assert(false); out.SimpleValue(prop->mData, prop->mDataLength);
}
break;
default:
ai_assert(false);
} }
out.EndObj(); out.EndObj();
@ -503,7 +523,7 @@ void Write(JSONWriter &out, const aiMaterial &ai, bool is_elem = true) {
out.EndObj(); out.EndObj();
} }
void Write(JSONWriter &out, const aiTexture &ai, bool is_elem = true) { static void Write(JSONWriter &out, const aiTexture &ai, bool is_elem = true) {
out.StartObj(is_elem); out.StartObj(is_elem);
out.Key("width"); out.Key("width");
@ -539,7 +559,7 @@ void Write(JSONWriter &out, const aiTexture &ai, bool is_elem = true) {
out.EndObj(); out.EndObj();
} }
void Write(JSONWriter &out, const aiLight &ai, bool is_elem = true) { static void Write(JSONWriter &out, const aiLight &ai, bool is_elem = true) {
out.StartObj(is_elem); out.StartObj(is_elem);
out.Key("name"); out.Key("name");
@ -587,7 +607,7 @@ void Write(JSONWriter &out, const aiLight &ai, bool is_elem = true) {
out.EndObj(); out.EndObj();
} }
void Write(JSONWriter &out, const aiNodeAnim &ai, bool is_elem = true) { static void Write(JSONWriter &out, const aiNodeAnim &ai, bool is_elem = true) {
out.StartObj(is_elem); out.StartObj(is_elem);
out.Key("name"); out.Key("name");
@ -640,7 +660,7 @@ void Write(JSONWriter &out, const aiNodeAnim &ai, bool is_elem = true) {
out.EndObj(); out.EndObj();
} }
void Write(JSONWriter &out, const aiAnimation &ai, bool is_elem = true) { static void Write(JSONWriter &out, const aiAnimation &ai, bool is_elem = true) {
out.StartObj(is_elem); out.StartObj(is_elem);
out.Key("name"); out.Key("name");
@ -661,7 +681,7 @@ void Write(JSONWriter &out, const aiAnimation &ai, bool is_elem = true) {
out.EndObj(); out.EndObj();
} }
void Write(JSONWriter &out, const aiCamera &ai, bool is_elem = true) { static void Write(JSONWriter &out, const aiCamera &ai, bool is_elem = true) {
out.StartObj(is_elem); out.StartObj(is_elem);
out.Key("name"); out.Key("name");
@ -688,7 +708,7 @@ void Write(JSONWriter &out, const aiCamera &ai, bool is_elem = true) {
out.EndObj(); out.EndObj();
} }
void WriteFormatInfo(JSONWriter &out) { static void WriteFormatInfo(JSONWriter &out) {
out.StartObj(); out.StartObj();
out.Key("format"); out.Key("format");
out.SimpleValue("\"assimp2json\""); out.SimpleValue("\"assimp2json\"");
@ -697,7 +717,7 @@ void WriteFormatInfo(JSONWriter &out) {
out.EndObj(); out.EndObj();
} }
void Write(JSONWriter &out, const aiScene &ai) { static void Write(JSONWriter &out, const aiScene &ai) {
out.StartObj(); out.StartObj();
out.Key("__metadata__"); out.Key("__metadata__");
@ -765,7 +785,7 @@ void Write(JSONWriter &out, const aiScene &ai) {
out.EndObj(); out.EndObj();
} }
void ExportAssimp2Json(const char *file, Assimp::IOSystem *io, const aiScene *scene, const Assimp::ExportProperties *) { void ExportAssimp2Json(const char *file, Assimp::IOSystem *io, const aiScene *scene, const Assimp::ExportProperties *pProperties) {
std::unique_ptr<Assimp::IOStream> str(io->Open(file, "wt")); std::unique_ptr<Assimp::IOStream> str(io->Open(file, "wt"));
if (!str) { if (!str) {
throw DeadlyExportError("could not open output file"); throw DeadlyExportError("could not open output file");
@ -782,7 +802,12 @@ void ExportAssimp2Json(const char *file, Assimp::IOSystem *io, const aiScene *sc
splitter.Execute(scenecopy_tmp); splitter.Execute(scenecopy_tmp);
// XXX Flag_WriteSpecialFloats is turned on by default, right now we don't have a configuration interface for exporters // XXX Flag_WriteSpecialFloats is turned on by default, right now we don't have a configuration interface for exporters
JSONWriter s(*str, JSONWriter::Flag_WriteSpecialFloats);
unsigned int flags = JSONWriter::Flag_WriteSpecialFloats;
if (pProperties->GetPropertyBool("JSON_SKIP_WHITESPACES", false)) {
flags |= JSONWriter::Flag_SkipWhitespaces;
}
JSONWriter s(*str, flags);
Write(s, *scenecopy_tmp); Write(s, *scenecopy_tmp);
} catch (...) { } catch (...) {

View File

@ -69,13 +69,12 @@ void MeshSplitter::UpdateNode(aiNode* pcNode, const std::vector<std::pair<aiMesh
for (unsigned int i = 0, end = pcNode->mNumChildren; i < end;++i) { for (unsigned int i = 0, end = pcNode->mNumChildren; i < end;++i) {
UpdateNode ( pcNode->mChildren[i], source_mesh_map ); UpdateNode ( pcNode->mChildren[i], source_mesh_map );
} }
return;
} }
#define WAS_NOT_COPIED 0xffffffff static const unsigned int WAS_NOT_COPIED = 0xffffffff;
typedef std::pair <unsigned int,float> PerVertexWeight; using PerVertexWeight = std::pair <unsigned int,float>;
typedef std::vector <PerVertexWeight> VertexWeightTable; using VertexWeightTable = std::vector <PerVertexWeight>;
// ------------------------------------------------------------------------------------------------ // ------------------------------------------------------------------------------------------------
VertexWeightTable* ComputeVertexBoneWeightTable(const aiMesh* pMesh) { VertexWeightTable* ComputeVertexBoneWeightTable(const aiMesh* pMesh) {
@ -89,7 +88,7 @@ VertexWeightTable* ComputeVertexBoneWeightTable(const aiMesh* pMesh) {
aiBone* bone = pMesh->mBones[i]; aiBone* bone = pMesh->mBones[i];
for (unsigned int a = 0; a < bone->mNumWeights;++a) { for (unsigned int a = 0; a < bone->mNumWeights;++a) {
const aiVertexWeight& weight = bone->mWeights[a]; const aiVertexWeight& weight = bone->mWeights[a];
avPerVertexWeights[weight.mVertexId].push_back( std::make_pair(i,weight.mWeight) ); avPerVertexWeights[weight.mVertexId].emplace_back(i,weight.mWeight);
} }
} }
return avPerVertexWeights; return avPerVertexWeights;
@ -100,7 +99,7 @@ void MeshSplitter :: SplitMesh(unsigned int a, aiMesh* in_mesh, std::vector<std:
// TODO: should better use std::(multi)set for source_mesh_map. // TODO: should better use std::(multi)set for source_mesh_map.
if (in_mesh->mNumVertices <= LIMIT) { if (in_mesh->mNumVertices <= LIMIT) {
source_mesh_map.push_back(std::make_pair(in_mesh,a)); source_mesh_map.emplace_back(in_mesh,a);
return; return;
} }
@ -187,7 +186,7 @@ void MeshSplitter :: SplitMesh(unsigned int a, aiMesh* in_mesh, std::vector<std:
break; break;
} }
vFaces.push_back(aiFace()); vFaces.emplace_back();
aiFace& rFace = vFaces.back(); aiFace& rFace = vFaces.back();
// setup face type and number of indices // setup face type and number of indices
@ -305,7 +304,7 @@ void MeshSplitter :: SplitMesh(unsigned int a, aiMesh* in_mesh, std::vector<std:
} }
// add the newly created mesh to the list // add the newly created mesh to the list
source_mesh_map.push_back(std::make_pair(out_mesh,a)); source_mesh_map.emplace_back(out_mesh,a);
if (base == in_mesh->mNumFaces) { if (base == in_mesh->mNumFaces) {
break; break;

View File

@ -24,38 +24,29 @@ struct aiNode;
/** Splits meshes of unique vertices into meshes with no more vertices than /** Splits meshes of unique vertices into meshes with no more vertices than
* a given, configurable threshold value. * a given, configurable threshold value.
*/ */
class MeshSplitter class MeshSplitter {
{
public: public:
unsigned int LIMIT;
void SetLimit(unsigned int l) { void SetLimit(unsigned int l) {
LIMIT = l; LIMIT = l;
} }
unsigned int GetLimit() const { unsigned int GetLimit() const {
return LIMIT; return LIMIT;
} }
public: // -------------------------------------------------------------------
/** Executes the post processing step on the given imported data.
// -------------------------------------------------------------------
/** Executes the post processing step on the given imported data.
* At the moment a process is not supposed to fail. * At the moment a process is not supposed to fail.
* @param pScene The imported data to work at. * @param pScene The imported data to work at.
*/ */
void Execute( aiScene* pScene); void Execute(aiScene *pScene);
private: private:
void UpdateNode(aiNode *pcNode, const std::vector<std::pair<aiMesh *, unsigned int>> &source_mesh_map);
void SplitMesh(unsigned int index, aiMesh *mesh, std::vector<std::pair<aiMesh *, unsigned int>> &source_mesh_map);
void UpdateNode(aiNode* pcNode, const std::vector<std::pair<aiMesh*, unsigned int> >& source_mesh_map);
void SplitMesh (unsigned int index, aiMesh* mesh, std::vector<std::pair<aiMesh*, unsigned int> >& source_mesh_map);
public:
unsigned int LIMIT;
}; };
#endif // INCLUDED_MESH_SPLITTER #endif // INCLUDED_MESH_SPLITTER

View File

@ -2,7 +2,7 @@
Open Asset Import Library (assimp) Open Asset Import Library (assimp)
---------------------------------------------------------------------- ----------------------------------------------------------------------
Copyright (c) 2006-2020, assimp team Copyright (c) 2006-2024, assimp team
All rights reserved. All rights reserved.

View File

@ -2,7 +2,7 @@
Open Asset Import Library (assimp) Open Asset Import Library (assimp)
---------------------------------------------------------------------- ----------------------------------------------------------------------
Copyright (c) 2006-2020, assimp team Copyright (c) 2006-2024, assimp team
All rights reserved. All rights reserved.
@ -43,6 +43,7 @@ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
/** @file AssxmlExporter.h /** @file AssxmlExporter.h
* ASSXML Exporter Main Header * ASSXML Exporter Main Header
*/ */
#pragma once
#ifndef AI_ASSXMLEXPORTER_H_INC #ifndef AI_ASSXMLEXPORTER_H_INC
#define AI_ASSXMLEXPORTER_H_INC #define AI_ASSXMLEXPORTER_H_INC

View File

@ -2,7 +2,7 @@
Open Asset Import Library (assimp) Open Asset Import Library (assimp)
---------------------------------------------------------------------- ----------------------------------------------------------------------
Copyright (c) 2006-2020, assimp team Copyright (c) 2006-2024, assimp team
All rights reserved. All rights reserved.
@ -168,7 +168,7 @@ static void WriteNode(const aiNode *node, IOStream *io, unsigned int depth) {
} }
// ----------------------------------------------------------------------------------- // -----------------------------------------------------------------------------------
// Some chuncks of text will need to be encoded for XML // Some chunks of text will need to be encoded for XML
// http://stackoverflow.com/questions/5665231/most-efficient-way-to-escape-xml-html-in-c-string#5665377 // http://stackoverflow.com/questions/5665231/most-efficient-way-to-escape-xml-html-in-c-string#5665377
static std::string encodeXML(const std::string &data) { static std::string encodeXML(const std::string &data) {
std::string buffer; std::string buffer;
@ -189,7 +189,7 @@ static std::string encodeXML(const std::string &data) {
// ----------------------------------------------------------------------------------- // -----------------------------------------------------------------------------------
// Write a text model dump // Write a text model dump
static void WriteDump(const char *pFile, const char *cmd, const aiScene *scene, IOStream *io, bool shortened) { static void WriteDump(const char *pFile, const char *cmd, const aiScene *scene, IOStream *io, bool shortened) {
time_t tt = ::time(NULL); time_t tt = ::time(nullptr);
#if _WIN32 #if _WIN32
tm *p = gmtime(&tt); tm *p = gmtime(&tt);
#else #else
@ -365,7 +365,7 @@ static void WriteDump(const char *pFile, const char *cmd, const aiScene *scene,
ioprintf(io, "\t\t\t<MatProperty key=\"%s\" \n\t\t\ttype=\"%s\" tex_usage=\"%s\" tex_index=\"%u\"", ioprintf(io, "\t\t\t<MatProperty key=\"%s\" \n\t\t\ttype=\"%s\" tex_usage=\"%s\" tex_index=\"%u\"",
prop->mKey.data, sz, prop->mKey.data, sz,
::TextureTypeToString((aiTextureType)prop->mSemantic), prop->mIndex); ::aiTextureTypeToString((aiTextureType)prop->mSemantic), prop->mIndex);
if (prop->mType == aiPTI_Float) { if (prop->mType == aiPTI_Float) {
ioprintf(io, " size=\"%i\">\n\t\t\t\t", ioprintf(io, " size=\"%i\">\n\t\t\t\t",
@ -598,8 +598,11 @@ static void WriteDump(const char *pFile, const char *cmd, const aiScene *scene,
if (!mesh->mTextureCoords[a]) if (!mesh->mTextureCoords[a])
break; break;
ioprintf(io, "\t\t<TextureCoords num=\"%u\" set=\"%u\" num_components=\"%u\"> \n", mesh->mNumVertices, ioprintf(io, "\t\t<TextureCoords num=\"%u\" set=\"%u\" name=\"%s\" num_components=\"%u\"> \n",
a, mesh->mNumUVComponents[a]); mesh->mNumVertices,
a,
(mesh->HasTextureCoordsName(a) ? mesh->GetTextureCoordsName(a)->C_Str() : ""),
mesh->mNumUVComponents[a]);
if (!shortened) { if (!shortened) {
if (mesh->mNumUVComponents[a] == 3) { if (mesh->mNumUVComponents[a] == 3) {
@ -649,7 +652,7 @@ void DumpSceneToAssxml(
const char *pFile, const char *cmd, IOSystem *pIOSystem, const char *pFile, const char *cmd, IOSystem *pIOSystem,
const aiScene *pScene, bool shortened) { const aiScene *pScene, bool shortened) {
std::unique_ptr<IOStream> file(pIOSystem->Open(pFile, "wt")); std::unique_ptr<IOStream> file(pIOSystem->Open(pFile, "wt"));
if (!file.get()) { if (!file) {
throw std::runtime_error("Unable to open output file " + std::string(pFile) + '\n'); throw std::runtime_error("Unable to open output file " + std::string(pFile) + '\n');
} }

View File

@ -2,8 +2,7 @@
Open Asset Import Library (assimp) Open Asset Import Library (assimp)
---------------------------------------------------------------------- ----------------------------------------------------------------------
Copyright (c) 2006-2020, assimp team Copyright (c) 2006-2024, assimp team
All rights reserved. All rights reserved.
@ -43,7 +42,7 @@ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
/** @file AssxmlFileWriter.h /** @file AssxmlFileWriter.h
* @brief Declaration of Assxml file writer. * @brief Declaration of Assxml file writer.
*/ */
#pragma once
#ifndef AI_ASSXMLFILEWRITER_H_INC #ifndef AI_ASSXMLFILEWRITER_H_INC
#define AI_ASSXMLFILEWRITER_H_INC #define AI_ASSXMLFILEWRITER_H_INC

View File

@ -3,7 +3,7 @@
Open Asset Import Library (assimp) Open Asset Import Library (assimp)
--------------------------------------------------------------------------- ---------------------------------------------------------------------------
Copyright (c) 2006-2020, assimp team Copyright (c) 2006-2024, assimp team
All rights reserved. All rights reserved.
@ -59,10 +59,10 @@ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
#include <memory> #include <memory>
using namespace Assimp; namespace Assimp {
using namespace std; using namespace std;
static const aiImporterDesc desc = { static constexpr aiImporterDesc desc = {
"BlitzBasic 3D Importer", "BlitzBasic 3D Importer",
"", "",
"", "",
@ -79,7 +79,7 @@ static const aiImporterDesc desc = {
#pragma warning(disable : 4018) #pragma warning(disable : 4018)
#endif #endif
//#define DEBUG_B3D // #define DEBUG_B3D
template <typename T> template <typename T>
void DeleteAllBarePointers(std::vector<T> &x) { void DeleteAllBarePointers(std::vector<T> &x) {
@ -88,12 +88,10 @@ void DeleteAllBarePointers(std::vector<T> &x) {
} }
} }
B3DImporter::~B3DImporter() { B3DImporter::~B3DImporter() = default;
}
// ------------------------------------------------------------------------------------------------ // ------------------------------------------------------------------------------------------------
bool B3DImporter::CanRead(const std::string &pFile, IOSystem * /*pIOHandler*/, bool /*checkSig*/) const { bool B3DImporter::CanRead(const std::string &pFile, IOSystem * /*pIOHandler*/, bool /*checkSig*/) const {
size_t pos = pFile.find_last_of('.'); size_t pos = pFile.find_last_of('.');
if (pos == string::npos) { if (pos == string::npos) {
return false; return false;
@ -118,8 +116,8 @@ void B3DImporter::InternReadFile(const std::string &pFile, aiScene *pScene, IOSy
std::unique_ptr<IOStream> file(pIOHandler->Open(pFile)); std::unique_ptr<IOStream> file(pIOHandler->Open(pFile));
// Check whether we can read from the file // Check whether we can read from the file
if (file.get() == nullptr) { if (file == nullptr) {
throw DeadlyImportError("Failed to open B3D file " + pFile + "."); throw DeadlyImportError("Failed to open B3D file ", pFile, ".");
} }
// check whether the .b3d file is large enough to contain // check whether the .b3d file is large enough to contain
@ -143,16 +141,16 @@ AI_WONT_RETURN void B3DImporter::Oops() {
} }
// ------------------------------------------------------------------------------------------------ // ------------------------------------------------------------------------------------------------
AI_WONT_RETURN void B3DImporter::Fail(string str) { AI_WONT_RETURN void B3DImporter::Fail(const string &str) {
#ifdef DEBUG_B3D #ifdef DEBUG_B3D
ASSIMP_LOG_ERROR_F("Error in B3D file data: ", str); ASSIMP_LOG_ERROR("Error in B3D file data: ", str);
#endif #endif
throw DeadlyImportError("B3D Importer - error in B3D file data: " + str); throw DeadlyImportError("B3D Importer - error in B3D file data: ", str);
} }
// ------------------------------------------------------------------------------------------------ // ------------------------------------------------------------------------------------------------
int B3DImporter::ReadByte() { int B3DImporter::ReadByte() {
if (_pos > _buf.size()) { if (_pos >= _buf.size()) {
Fail("EOF"); Fail("EOF");
} }
@ -233,7 +231,7 @@ string B3DImporter::ReadChunk() {
tag += char(ReadByte()); tag += char(ReadByte());
} }
#ifdef DEBUG_B3D #ifdef DEBUG_B3D
ASSIMP_LOG_DEBUG_F("ReadChunk: ", tag); ASSIMP_LOG_DEBUG("ReadChunk: ", tag);
#endif #endif
unsigned sz = (unsigned)ReadInt(); unsigned sz = (unsigned)ReadInt();
_stack.push_back(_pos + sz); _stack.push_back(_pos + sz);
@ -255,7 +253,7 @@ size_t B3DImporter::ChunkSize() {
template <class T> template <class T>
T *B3DImporter::to_array(const vector<T> &v) { T *B3DImporter::to_array(const vector<T> &v) {
if (v.empty()) { if (v.empty()) {
return 0; return nullptr;
} }
T *p = new T[v.size()]; T *p = new T[v.size()];
for (size_t i = 0; i < v.size(); ++i) { for (size_t i = 0; i < v.size(); ++i) {
@ -268,7 +266,7 @@ T *B3DImporter::to_array(const vector<T> &v) {
template <class T> template <class T>
T **unique_to_array(vector<std::unique_ptr<T>> &v) { T **unique_to_array(vector<std::unique_ptr<T>> &v) {
if (v.empty()) { if (v.empty()) {
return 0; return nullptr;
} }
T **p = new T *[v.size()]; T **p = new T *[v.size()];
for (size_t i = 0; i < v.size(); ++i) { for (size_t i = 0; i < v.size(); ++i) {
@ -331,7 +329,7 @@ void B3DImporter::ReadBRUS() {
mat->AddProperty(&i, 1, AI_MATKEY_TWOSIDED); mat->AddProperty(&i, 1, AI_MATKEY_TWOSIDED);
} }
//Textures // Textures
for (int i = 0; i < n_texs; ++i) { for (int i = 0; i < n_texs; ++i) {
int texid = ReadInt(); int texid = ReadInt();
if (texid < -1 || (texid >= 0 && texid >= static_cast<int>(_textures.size()))) { if (texid < -1 || (texid >= 0 && texid >= static_cast<int>(_textures.size()))) {
@ -374,7 +372,7 @@ void B3DImporter::ReadVRTS() {
} }
if (_vflags & 2) { if (_vflags & 2) {
ReadQuat(); //skip v 4bytes... ReadQuat(); // skip v 4bytes...
} }
for (int j = 0; j < _tcsets; ++j) { for (int j = 0; j < _tcsets; ++j) {
@ -397,7 +395,7 @@ void B3DImporter::ReadTRIS(int v0) {
matid = 0; matid = 0;
} else if (matid < 0 || matid >= (int)_materials.size()) { } else if (matid < 0 || matid >= (int)_materials.size()) {
#ifdef DEBUG_B3D #ifdef DEBUG_B3D
ASSIMP_LOG_ERROR_F("material id=", matid); ASSIMP_LOG_ERROR("material id=", matid);
#endif #endif
Fail("Bad material id"); Fail("Bad material id");
} }
@ -417,10 +415,9 @@ void B3DImporter::ReadTRIS(int v0) {
int i2 = ReadInt() + v0; int i2 = ReadInt() + v0;
if (i0 < 0 || i0 >= (int)_vertices.size() || i1 < 0 || i1 >= (int)_vertices.size() || i2 < 0 || i2 >= (int)_vertices.size()) { if (i0 < 0 || i0 >= (int)_vertices.size() || i1 < 0 || i1 >= (int)_vertices.size() || i2 < 0 || i2 >= (int)_vertices.size()) {
#ifdef DEBUG_B3D #ifdef DEBUG_B3D
ASSIMP_LOG_ERROR_F("Bad triangle index: i0=", i0, ", i1=", i1, ", i2=", i2); ASSIMP_LOG_ERROR("Bad triangle index: i0=", i0, ", i1=", i1, ", i2=", i2);
#endif #endif
Fail("Bad triangle index"); Fail("Bad triangle index");
continue;
} }
face->mNumIndices = 3; face->mNumIndices = 3;
face->mIndices = new unsigned[3]; face->mIndices = new unsigned[3];
@ -479,13 +476,13 @@ void B3DImporter::ReadKEYS(aiNodeAnim *nodeAnim) {
while (ChunkSize()) { while (ChunkSize()) {
int frame = ReadInt(); int frame = ReadInt();
if (flags & 1) { if (flags & 1) {
trans.push_back(aiVectorKey(frame, ReadVec3())); trans.emplace_back(frame, ReadVec3());
} }
if (flags & 2) { if (flags & 2) {
scale.push_back(aiVectorKey(frame, ReadVec3())); scale.emplace_back(frame, ReadVec3());
} }
if (flags & 4) { if (flags & 4) {
rot.push_back(aiQuatKey(frame, ReadQuat())); rot.emplace_back(frame, ReadQuat());
} }
} }
@ -619,7 +616,7 @@ void B3DImporter::ReadBB3D(aiScene *scene) {
} else if (chunk == "BRUS") { } else if (chunk == "BRUS") {
ReadBRUS(); ReadBRUS();
} else if (chunk == "NODE") { } else if (chunk == "NODE") {
ReadNODE(0); ReadNODE(nullptr);
} }
ExitChunk(); ExitChunk();
} }
@ -644,7 +641,7 @@ void B3DImporter::ReadBB3D(aiScene *scene) {
int n_tris = mesh->mNumFaces; int n_tris = mesh->mNumFaces;
int n_verts = mesh->mNumVertices = n_tris * 3; int n_verts = mesh->mNumVertices = n_tris * 3;
aiVector3D *mv = mesh->mVertices = new aiVector3D[n_verts], *mn = 0, *mc = 0; aiVector3D *mv = mesh->mVertices = new aiVector3D[n_verts], *mn = nullptr, *mc = nullptr;
if (_vflags & 1) { if (_vflags & 1) {
mn = mesh->mNormals = new aiVector3D[n_verts]; mn = mesh->mNormals = new aiVector3D[n_verts];
} }
@ -673,7 +670,7 @@ void B3DImporter::ReadBB3D(aiScene *scene) {
int bone = v.bones[k]; int bone = v.bones[k];
float weight = v.weights[k]; float weight = v.weights[k];
vweights[bone].push_back(aiVertexWeight(vertIdx + faceIndex, weight)); vweights[bone].emplace_back(vertIdx + faceIndex, weight);
} }
} }
++face; ++face;
@ -707,22 +704,22 @@ void B3DImporter::ReadBB3D(aiScene *scene) {
} }
} }
//nodes // nodes
scene->mRootNode = _nodes[0]; scene->mRootNode = _nodes[0];
_nodes.clear(); // node ownership now belongs to scene _nodes.clear(); // node ownership now belongs to scene
//material // material
if (!_materials.size()) { if (!_materials.size()) {
_materials.emplace_back(std::unique_ptr<aiMaterial>(new aiMaterial)); _materials.emplace_back(std::unique_ptr<aiMaterial>(new aiMaterial));
} }
scene->mNumMaterials = static_cast<unsigned int>(_materials.size()); scene->mNumMaterials = static_cast<unsigned int>(_materials.size());
scene->mMaterials = unique_to_array(_materials); scene->mMaterials = unique_to_array(_materials);
//meshes // meshes
scene->mNumMeshes = static_cast<unsigned int>(_meshes.size()); scene->mNumMeshes = static_cast<unsigned int>(_meshes.size());
scene->mMeshes = unique_to_array(_meshes); scene->mMeshes = unique_to_array(_meshes);
//animations // animations
if (_animations.size() == 1 && _nodeAnims.size()) { if (_animations.size() == 1 && _nodeAnims.size()) {
aiAnimation *anim = _animations.back().get(); aiAnimation *anim = _animations.back().get();
@ -741,4 +738,6 @@ void B3DImporter::ReadBB3D(aiScene *scene) {
flip.Execute(scene); flip.Execute(scene);
} }
} // namespace Assimp
#endif // !! ASSIMP_BUILD_NO_B3D_IMPORTER #endif // !! ASSIMP_BUILD_NO_B3D_IMPORTER

View File

@ -2,8 +2,7 @@
Open Asset Import Library (assimp) Open Asset Import Library (assimp)
---------------------------------------------------------------------- ----------------------------------------------------------------------
Copyright (c) 2006-2020, assimp team Copyright (c) 2006-2024, assimp team
All rights reserved. All rights reserved.
@ -40,8 +39,10 @@ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
---------------------------------------------------------------------- ----------------------------------------------------------------------
*/ */
/** @file Definition of the .b3d importer class. */ /**
* @file Definition of the .b3d importer class.
*/
#pragma once
#ifndef AI_B3DIMPORTER_H_INC #ifndef AI_B3DIMPORTER_H_INC
#define AI_B3DIMPORTER_H_INC #define AI_B3DIMPORTER_H_INC
@ -62,14 +63,12 @@ namespace Assimp{
class B3DImporter : public BaseImporter{ class B3DImporter : public BaseImporter{
public: public:
B3DImporter() = default; B3DImporter() = default;
virtual ~B3DImporter(); ~B3DImporter() override;
bool CanRead( const std::string& pFile, IOSystem* pIOHandler, bool checkSig) const override;
virtual bool CanRead( const std::string& pFile, IOSystem* pIOHandler, bool checkSig) const;
protected: protected:
const aiImporterDesc* GetInfo () const override;
virtual const aiImporterDesc* GetInfo () const; void InternReadFile( const std::string& pFile, aiScene* pScene, IOSystem* pIOHandler) override;
virtual void InternReadFile( const std::string& pFile, aiScene* pScene, IOSystem* pIOHandler);
private: private:
@ -96,7 +95,7 @@ private:
}; };
AI_WONT_RETURN void Oops() AI_WONT_RETURN_SUFFIX; AI_WONT_RETURN void Oops() AI_WONT_RETURN_SUFFIX;
AI_WONT_RETURN void Fail( std::string str ) AI_WONT_RETURN_SUFFIX; AI_WONT_RETURN void Fail(const std::string &str) AI_WONT_RETURN_SUFFIX;
void ReadTEXS(); void ReadTEXS();
void ReadBRUS(); void ReadBRUS();
@ -113,7 +112,6 @@ private:
void ReadBB3D( aiScene *scene ); void ReadBB3D( aiScene *scene );
size_t _pos; size_t _pos;
// unsigned _size;
std::vector<unsigned char> _buf; std::vector<unsigned char> _buf;
std::vector<size_t> _stack; std::vector<size_t> _stack;

View File

@ -4,7 +4,7 @@
Open Asset Import Library (assimp) Open Asset Import Library (assimp)
--------------------------------------------------------------------------- ---------------------------------------------------------------------------
Copyright (c) 2006-2020, assimp team Copyright (c) 2006-2024, assimp team
@ -55,10 +55,11 @@ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
#include <map> #include <map>
#include <memory> #include <memory>
using namespace Assimp; namespace Assimp {
using namespace Assimp::Formatter; using namespace Assimp::Formatter;
static const aiImporterDesc desc = { static constexpr aiImporterDesc desc = {
"BVH Importer (MoCap)", "BVH Importer (MoCap)",
"", "",
"", "",
@ -71,6 +72,13 @@ static const aiImporterDesc desc = {
"bvh" "bvh"
}; };
// ------------------------------------------------------------------------------------------------
// Aborts the file reading with an exception
template <typename... T>
AI_WONT_RETURN void BVHLoader::ThrowException(T &&...args) {
throw DeadlyImportError(mFileName, ":", mLine, " - ", args...);
}
// ------------------------------------------------------------------------------------------------ // ------------------------------------------------------------------------------------------------
// Constructor to be privately used by Importer // Constructor to be privately used by Importer
BVHLoader::BVHLoader() : BVHLoader::BVHLoader() :
@ -81,22 +89,13 @@ BVHLoader::BVHLoader() :
// ------------------------------------------------------------------------------------------------ // ------------------------------------------------------------------------------------------------
// Destructor, private as well // Destructor, private as well
BVHLoader::~BVHLoader() {} BVHLoader::~BVHLoader() = default;
// ------------------------------------------------------------------------------------------------ // ------------------------------------------------------------------------------------------------
// Returns whether the class can handle the format of the given file. // Returns whether the class can handle the format of the given file.
bool BVHLoader::CanRead(const std::string &pFile, IOSystem *pIOHandler, bool cs) const { bool BVHLoader::CanRead(const std::string &pFile, IOSystem *pIOHandler, bool /*checkSig*/) const {
// check file extension static const char *tokens[] = { "HIERARCHY" };
const std::string extension = GetExtension(pFile); return SearchFileHeaderForToken(pIOHandler, pFile, tokens, AI_COUNT_OF(tokens));
if (extension == "bvh")
return true;
if ((!extension.length() || cs) && pIOHandler) {
const char *tokens[] = { "HIERARCHY" };
return SearchFileHeaderForToken(pIOHandler, pFile, tokens, 1);
}
return false;
} }
// ------------------------------------------------------------------------------------------------ // ------------------------------------------------------------------------------------------------
@ -117,8 +116,8 @@ void BVHLoader::InternReadFile(const std::string &pFile, aiScene *pScene, IOSyst
// read file into memory // read file into memory
std::unique_ptr<IOStream> file(pIOHandler->Open(pFile)); std::unique_ptr<IOStream> file(pIOHandler->Open(pFile));
if (file.get() == nullptr) { if (file == nullptr) {
throw DeadlyImportError("Failed to open file " + pFile + "."); throw DeadlyImportError("Failed to open file ", pFile, ".");
} }
size_t fileSize = file->FileSize(); size_t fileSize = file->FileSize();
@ -171,29 +170,29 @@ void BVHLoader::ReadHierarchy(aiScene *pScene) {
} }
// ------------------------------------------------------------------------------------------------ // ------------------------------------------------------------------------------------------------
// Reads a node and recursively its childs and returns the created node; // Reads a node and recursively its children and returns the created node;
aiNode *BVHLoader::ReadNode() { aiNode *BVHLoader::ReadNode() {
// first token is name // first token is name
std::string nodeName = GetNextToken(); std::string nodeName = GetNextToken();
if (nodeName.empty() || nodeName == "{") if (nodeName.empty() || nodeName == "{")
ThrowException(format() << "Expected node name, but found \"" << nodeName << "\"."); ThrowException("Expected node name, but found \"", nodeName, "\".");
// then an opening brace should follow // then an opening brace should follow
std::string openBrace = GetNextToken(); std::string openBrace = GetNextToken();
if (openBrace != "{") if (openBrace != "{")
ThrowException(format() << "Expected opening brace \"{\", but found \"" << openBrace << "\"."); ThrowException("Expected opening brace \"{\", but found \"", openBrace, "\".");
// Create a node // Create a node
aiNode *node = new aiNode(nodeName); aiNode *node = new aiNode(nodeName);
std::vector<aiNode *> childNodes; std::vector<aiNode *> childNodes;
// and create an bone entry for it // and create an bone entry for it
mNodes.push_back(Node(node)); mNodes.emplace_back(node);
Node &internNode = mNodes.back(); Node &internNode = mNodes.back();
// now read the node's contents // now read the node's contents
std::string siteToken; std::string siteToken;
while (1) { while (true) {
std::string token = GetNextToken(); std::string token = GetNextToken();
// node offset to parent node // node offset to parent node
@ -211,7 +210,7 @@ aiNode *BVHLoader::ReadNode() {
siteToken.clear(); siteToken.clear();
siteToken = GetNextToken(); siteToken = GetNextToken();
if (siteToken != "Site") if (siteToken != "Site")
ThrowException(format() << "Expected \"End Site\" keyword, but found \"" << token << " " << siteToken << "\"."); ThrowException("Expected \"End Site\" keyword, but found \"", token, " ", siteToken, "\".");
aiNode *child = ReadEndSite(nodeName); aiNode *child = ReadEndSite(nodeName);
child->mParent = node; child->mParent = node;
@ -221,7 +220,7 @@ aiNode *BVHLoader::ReadNode() {
break; break;
} else { } else {
// everything else is a parse error // everything else is a parse error
ThrowException(format() << "Unknown keyword \"" << token << "\"."); ThrowException("Unknown keyword \"", token, "\".");
} }
} }
@ -242,14 +241,14 @@ aiNode *BVHLoader::ReadEndSite(const std::string &pParentName) {
// check opening brace // check opening brace
std::string openBrace = GetNextToken(); std::string openBrace = GetNextToken();
if (openBrace != "{") if (openBrace != "{")
ThrowException(format() << "Expected opening brace \"{\", but found \"" << openBrace << "\"."); ThrowException("Expected opening brace \"{\", but found \"", openBrace, "\".");
// Create a node // Create a node
aiNode *node = new aiNode("EndSite_" + pParentName); aiNode *node = new aiNode("EndSite_" + pParentName);
// now read the node's contents. Only possible entry is "OFFSET" // now read the node's contents. Only possible entry is "OFFSET"
std::string token; std::string token;
while (1) { while (true) {
token.clear(); token.clear();
token = GetNextToken(); token = GetNextToken();
@ -261,7 +260,7 @@ aiNode *BVHLoader::ReadEndSite(const std::string &pParentName) {
break; break;
} else { } else {
// everything else is a parse error // everything else is a parse error
ThrowException(format() << "Unknown keyword \"" << token << "\"."); ThrowException("Unknown keyword \"", token, "\".");
} }
} }
@ -307,7 +306,7 @@ void BVHLoader::ReadNodeChannels(BVHLoader::Node &pNode) {
else if (channelToken == "Zrotation") else if (channelToken == "Zrotation")
pNode.mChannels.push_back(Channel_RotationZ); pNode.mChannels.push_back(Channel_RotationZ);
else else
ThrowException(format() << "Invalid channel specifier \"" << channelToken << "\"."); ThrowException("Invalid channel specifier \"", channelToken, "\".");
} }
} }
@ -317,7 +316,7 @@ void BVHLoader::ReadMotion(aiScene * /*pScene*/) {
// Read number of frames // Read number of frames
std::string tokenFrames = GetNextToken(); std::string tokenFrames = GetNextToken();
if (tokenFrames != "Frames:") if (tokenFrames != "Frames:")
ThrowException(format() << "Expected frame count \"Frames:\", but found \"" << tokenFrames << "\"."); ThrowException("Expected frame count \"Frames:\", but found \"", tokenFrames, "\".");
float numFramesFloat = GetNextTokenAsFloat(); float numFramesFloat = GetNextTokenAsFloat();
mAnimNumFrames = (unsigned int)numFramesFloat; mAnimNumFrames = (unsigned int)numFramesFloat;
@ -326,7 +325,7 @@ void BVHLoader::ReadMotion(aiScene * /*pScene*/) {
std::string tokenDuration1 = GetNextToken(); std::string tokenDuration1 = GetNextToken();
std::string tokenDuration2 = GetNextToken(); std::string tokenDuration2 = GetNextToken();
if (tokenDuration1 != "Frame" || tokenDuration2 != "Time:") if (tokenDuration1 != "Frame" || tokenDuration2 != "Time:")
ThrowException(format() << "Expected frame duration \"Frame Time:\", but found \"" << tokenDuration1 << " " << tokenDuration2 << "\"."); ThrowException("Expected frame duration \"Frame Time:\", but found \"", tokenDuration1, " ", tokenDuration2, "\".");
mAnimTickDuration = GetNextTokenAsFloat(); mAnimTickDuration = GetNextTokenAsFloat();
@ -352,7 +351,7 @@ void BVHLoader::ReadMotion(aiScene * /*pScene*/) {
std::string BVHLoader::GetNextToken() { std::string BVHLoader::GetNextToken() {
// skip any preceding whitespace // skip any preceding whitespace
while (mReader != mBuffer.end()) { while (mReader != mBuffer.end()) {
if (!isspace(*mReader)) if (!isspace((unsigned char)*mReader))
break; break;
// count lines // count lines
@ -365,7 +364,7 @@ std::string BVHLoader::GetNextToken() {
// collect all chars till the next whitespace. BVH is easy in respect to that. // collect all chars till the next whitespace. BVH is easy in respect to that.
std::string token; std::string token;
while (mReader != mBuffer.end()) { while (mReader != mBuffer.end()) {
if (isspace(*mReader)) if (isspace((unsigned char)*mReader))
break; break;
token.push_back(*mReader); token.push_back(*mReader);
@ -393,17 +392,11 @@ float BVHLoader::GetNextTokenAsFloat() {
ctoken = fast_atoreal_move<float>(ctoken, result); ctoken = fast_atoreal_move<float>(ctoken, result);
if (ctoken != token.c_str() + token.length()) if (ctoken != token.c_str() + token.length())
ThrowException(format() << "Expected a floating point number, but found \"" << token << "\"."); ThrowException("Expected a floating point number, but found \"", token, "\".");
return result; return result;
} }
// ------------------------------------------------------------------------------------------------
// Aborts the file reading with an exception
AI_WONT_RETURN void BVHLoader::ThrowException(const std::string &pError) {
throw DeadlyImportError(format() << mFileName << ":" << mLine << " - " << pError);
}
// ------------------------------------------------------------------------------------------------ // ------------------------------------------------------------------------------------------------
// Constructs an animation for the motion data and stores it in the given scene // Constructs an animation for the motion data and stores it in the given scene
void BVHLoader::CreateAnimation(aiScene *pScene) { void BVHLoader::CreateAnimation(aiScene *pScene) {
@ -422,9 +415,9 @@ void BVHLoader::CreateAnimation(aiScene *pScene) {
anim->mNumChannels = static_cast<unsigned int>(mNodes.size()); anim->mNumChannels = static_cast<unsigned int>(mNodes.size());
anim->mChannels = new aiNodeAnim *[anim->mNumChannels]; anim->mChannels = new aiNodeAnim *[anim->mNumChannels];
// FIX: set the array elements to NULL to ensure proper deletion if an exception is thrown // FIX: set the array elements to nullptr to ensure proper deletion if an exception is thrown
for (unsigned int i = 0; i < anim->mNumChannels; ++i) for (unsigned int i = 0; i < anim->mNumChannels; ++i)
anim->mChannels[i] = NULL; anim->mChannels[i] = nullptr;
for (unsigned int a = 0; a < anim->mNumChannels; a++) { for (unsigned int a = 0; a < anim->mNumChannels; a++) {
const Node &node = mNodes[a]; const Node &node = mNodes[a];
@ -434,7 +427,7 @@ void BVHLoader::CreateAnimation(aiScene *pScene) {
nodeAnim->mNodeName.Set(nodeName); nodeAnim->mNodeName.Set(nodeName);
std::map<BVHLoader::ChannelType, int> channelMap; std::map<BVHLoader::ChannelType, int> channelMap;
//Build map of channels // Build map of channels
for (unsigned int channel = 0; channel < node.mChannels.size(); ++channel) { for (unsigned int channel = 0; channel < node.mChannels.size(); ++channel) {
channelMap[node.mChannels[channel]] = channel; channelMap[node.mChannels[channel]] = channel;
} }
@ -449,11 +442,11 @@ void BVHLoader::CreateAnimation(aiScene *pScene) {
// Now compute all translations // Now compute all translations
for (BVHLoader::ChannelType channel = Channel_PositionX; channel <= Channel_PositionZ; channel = (BVHLoader::ChannelType)(channel + 1)) { for (BVHLoader::ChannelType channel = Channel_PositionX; channel <= Channel_PositionZ; channel = (BVHLoader::ChannelType)(channel + 1)) {
//Find channel in node // Find channel in node
std::map<BVHLoader::ChannelType, int>::iterator mapIter = channelMap.find(channel); std::map<BVHLoader::ChannelType, int>::iterator mapIter = channelMap.find(channel);
if (mapIter == channelMap.end()) if (mapIter == channelMap.end())
throw DeadlyImportError("Missing position channel in node " + nodeName); throw DeadlyImportError("Missing position channel in node ", nodeName);
else { else {
int channelIdx = mapIter->second; int channelIdx = mapIter->second;
switch (channel) { switch (channel) {
@ -493,30 +486,27 @@ void BVHLoader::CreateAnimation(aiScene *pScene) {
for (unsigned int fr = 0; fr < mAnimNumFrames; ++fr) { for (unsigned int fr = 0; fr < mAnimNumFrames; ++fr) {
aiMatrix4x4 temp; aiMatrix4x4 temp;
aiMatrix3x3 rotMatrix; aiMatrix3x3 rotMatrix;
for (unsigned int channelIdx = 0; channelIdx < node.mChannels.size(); ++ channelIdx) { for (unsigned int channelIdx = 0; channelIdx < node.mChannels.size(); ++channelIdx) {
switch (node.mChannels[channelIdx]) { switch (node.mChannels[channelIdx]) {
case Channel_RotationX: case Channel_RotationX: {
{
const float angle = node.mChannelValues[fr * node.mChannels.size() + channelIdx] * float(AI_MATH_PI) / 180.0f; const float angle = node.mChannelValues[fr * node.mChannels.size() + channelIdx] * float(AI_MATH_PI) / 180.0f;
aiMatrix4x4::RotationX( angle, temp); rotMatrix *= aiMatrix3x3( temp); aiMatrix4x4::RotationX(angle, temp);
} rotMatrix *= aiMatrix3x3(temp);
break; } break;
case Channel_RotationY: case Channel_RotationY: {
{
const float angle = node.mChannelValues[fr * node.mChannels.size() + channelIdx] * float(AI_MATH_PI) / 180.0f; const float angle = node.mChannelValues[fr * node.mChannels.size() + channelIdx] * float(AI_MATH_PI) / 180.0f;
aiMatrix4x4::RotationY( angle, temp); rotMatrix *= aiMatrix3x3( temp); aiMatrix4x4::RotationY(angle, temp);
} rotMatrix *= aiMatrix3x3(temp);
break; } break;
case Channel_RotationZ: case Channel_RotationZ: {
{
const float angle = node.mChannelValues[fr * node.mChannels.size() + channelIdx] * float(AI_MATH_PI) / 180.0f; const float angle = node.mChannelValues[fr * node.mChannels.size() + channelIdx] * float(AI_MATH_PI) / 180.0f;
aiMatrix4x4::RotationZ( angle, temp); rotMatrix *= aiMatrix3x3( temp); aiMatrix4x4::RotationZ(angle, temp);
} rotMatrix *= aiMatrix3x3(temp);
break; } break;
default: default:
break; break;
} }
} }
rotkey->mTime = double(fr); rotkey->mTime = double(fr);
rotkey->mValue = aiQuaternion(rotMatrix); rotkey->mValue = aiQuaternion(rotMatrix);
++rotkey; ++rotkey;
@ -533,4 +523,6 @@ void BVHLoader::CreateAnimation(aiScene *pScene) {
} }
} }
} // namespace Assimp
#endif // !! ASSIMP_BUILD_NO_BVH_IMPORTER #endif // !! ASSIMP_BUILD_NO_BVH_IMPORTER

View File

@ -4,7 +4,7 @@
Open Asset Import Library (assimp) Open Asset Import Library (assimp)
---------------------------------------------------------------------- ----------------------------------------------------------------------
Copyright (c) 2006-2020, assimp team Copyright (c) 2006-2024, assimp team
All rights reserved. All rights reserved.
@ -112,7 +112,7 @@ protected:
/** Reads the hierarchy */ /** Reads the hierarchy */
void ReadHierarchy(aiScene *pScene); void ReadHierarchy(aiScene *pScene);
/** Reads a node and recursively its childs and returns the created node. */ /** Reads a node and recursively its children and returns the created node. */
aiNode *ReadNode(); aiNode *ReadNode();
/** Reads an end node and returns the created node. */ /** Reads an end node and returns the created node. */
@ -134,7 +134,8 @@ protected:
float GetNextTokenAsFloat(); float GetNextTokenAsFloat();
/** Aborts the file reading with an exception */ /** Aborts the file reading with an exception */
AI_WONT_RETURN void ThrowException(const std::string &pError) AI_WONT_RETURN_SUFFIX; template<typename... T>
AI_WONT_RETURN void ThrowException(T&&... args) AI_WONT_RETURN_SUFFIX;
/** Constructs an animation for the motion data and stores it in the given scene */ /** Constructs an animation for the motion data and stores it in the given scene */
void CreateAnimation(aiScene *pScene); void CreateAnimation(aiScene *pScene);

View File

@ -2,7 +2,7 @@
Open Asset Import Library (assimp) Open Asset Import Library (assimp)
---------------------------------------------------------------------- ----------------------------------------------------------------------
Copyright (c) 2006-2020, assimp team Copyright (c) 2006-2024, assimp team
All rights reserved. All rights reserved.
Redistribution and use of this software in source and binary forms, Redistribution and use of this software in source and binary forms,
@ -52,8 +52,7 @@ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
namespace Assimp { namespace Assimp {
template <> template <>
const char *LogFunctions<BlenderBMeshConverter>::Prefix() { const char *LogFunctions<BlenderBMeshConverter>::Prefix() {
static auto prefix = "BLEND_BMESH: "; return "BLEND_BMESH: ";
return prefix;
} }
} // namespace Assimp } // namespace Assimp
@ -140,7 +139,7 @@ void BlenderBMeshConverter::ConvertPolyToFaces(const MPoly &poly) {
ThrowException("BMesh uv loop array has incorrect size"); ThrowException("BMesh uv loop array has incorrect size");
} }
const MLoopUV *loopUV = &BMesh->mloopuv[poly.loopstart]; const MLoopUV *loopUV = &BMesh->mloopuv[poly.loopstart];
AddTFace(loopUV[0].uv, loopUV[1].uv, loopUV[2].uv, poly.totloop == 4 ? loopUV[3].uv : 0); AddTFace(loopUV[0].uv, loopUV[1].uv, loopUV[2].uv, poly.totloop == 4 ? loopUV[3].uv : nullptr);
} }
} else if (poly.totloop > 4) { } else if (poly.totloop > 4) {
#if ASSIMP_BLEND_WITH_GLU_TESSELLATE #if ASSIMP_BLEND_WITH_GLU_TESSELLATE

View File

@ -2,7 +2,7 @@
Open Asset Import Library (assimp) Open Asset Import Library (assimp)
---------------------------------------------------------------------- ----------------------------------------------------------------------
Copyright (c) 2006-2020, assimp team Copyright (c) 2006-2024, assimp team
All rights reserved. All rights reserved.
Redistribution and use of this software in source and binary forms, Redistribution and use of this software in source and binary forms,
@ -80,7 +80,7 @@ namespace Assimp
void DestroyTriMesh( ); void DestroyTriMesh( );
void ConvertPolyToFaces( const Blender::MPoly& poly ); void ConvertPolyToFaces( const Blender::MPoly& poly );
void AddFace( int v1, int v2, int v3, int v4 = 0 ); void AddFace( int v1, int v2, int v3, int v4 = 0 );
void AddTFace( const float* uv1, const float* uv2, const float *uv3, const float* uv4 = 0 ); void AddTFace(const float *uv1, const float *uv2, const float *uv3, const float *uv4 = nullptr);
const Blender::Mesh* BMesh; const Blender::Mesh* BMesh;
Blender::Mesh* triMesh; Blender::Mesh* triMesh;

View File

@ -96,7 +96,8 @@ struct CustomDataTypeDescription {
* other (like CD_ORCO, ...) uses arrays of rawtypes or even arrays of Structures * other (like CD_ORCO, ...) uses arrays of rawtypes or even arrays of Structures
* use a special readfunction for that cases * use a special readfunction for that cases
*/ */
std::array<CustomDataTypeDescription, CD_NUMTYPES> customDataTypeDescriptions = { { DECL_STRUCT_CUSTOMDATATYPEDESCRIPTION(MVert), static std::array<CustomDataTypeDescription, CD_NUMTYPES> customDataTypeDescriptions = { {
DECL_STRUCT_CUSTOMDATATYPEDESCRIPTION(MVert),
DECL_UNSUPPORTED_CUSTOMDATATYPEDESCRIPTION, DECL_UNSUPPORTED_CUSTOMDATATYPEDESCRIPTION,
DECL_UNSUPPORTED_CUSTOMDATATYPEDESCRIPTION, DECL_UNSUPPORTED_CUSTOMDATATYPEDESCRIPTION,
DECL_STRUCT_CUSTOMDATATYPEDESCRIPTION(MEdge), DECL_STRUCT_CUSTOMDATATYPEDESCRIPTION(MEdge),
@ -149,7 +150,7 @@ bool isValidCustomDataType(const int cdtype) {
bool readCustomData(std::shared_ptr<ElemBase> &out, const int cdtype, const size_t cnt, const FileDatabase &db) { bool readCustomData(std::shared_ptr<ElemBase> &out, const int cdtype, const size_t cnt, const FileDatabase &db) {
if (!isValidCustomDataType(cdtype)) { if (!isValidCustomDataType(cdtype)) {
throw Error((Formatter::format(), "CustomData.type ", cdtype, " out of index")); throw Error("CustomData.type ", cdtype, " out of index");
} }
const CustomDataTypeDescription cdtd = customDataTypeDescriptions[cdtype]; const CustomDataTypeDescription cdtd = customDataTypeDescriptions[cdtype];

View File

@ -2,7 +2,7 @@
Open Asset Import Library (assimp) Open Asset Import Library (assimp)
---------------------------------------------------------------------- ----------------------------------------------------------------------
Copyright (c) 2006-2020, assimp team Copyright (c) 2006-2024, assimp team
All rights reserved. All rights reserved.
@ -72,7 +72,7 @@ struct Type {
// ------------------------------------------------------------------------------------------------ // ------------------------------------------------------------------------------------------------
void DNAParser::Parse() { void DNAParser::Parse() {
StreamReaderAny &stream = *db.reader.get(); StreamReaderAny &stream = *db.reader;
DNA &dna = db.dna; DNA &dna = db.dna;
if (!match4(stream, "SDNA")) { if (!match4(stream, "SDNA")) {
@ -130,9 +130,7 @@ void DNAParser::Parse() {
uint16_t n = stream.GetI2(); uint16_t n = stream.GetI2();
if (n >= types.size()) { if (n >= types.size()) {
throw DeadlyImportError((format(), throw DeadlyImportError("BlenderDNA: Invalid type index in structure name", n, " (there are only ", types.size(), " entries)");
"BlenderDNA: Invalid type index in structure name", n,
" (there are only ", types.size(), " entries)"));
} }
// maintain separate indexes // maintain separate indexes
@ -141,7 +139,6 @@ void DNAParser::Parse() {
dna.structures.push_back(Structure()); dna.structures.push_back(Structure());
Structure &s = dna.structures.back(); Structure &s = dna.structures.back();
s.name = types[n].name; s.name = types[n].name;
//s.index = dna.structures.size()-1;
n = stream.GetI2(); n = stream.GetI2();
s.fields.reserve(n); s.fields.reserve(n);
@ -151,9 +148,7 @@ void DNAParser::Parse() {
uint16_t j = stream.GetI2(); uint16_t j = stream.GetI2();
if (j >= types.size()) { if (j >= types.size()) {
throw DeadlyImportError((format(), throw DeadlyImportError("BlenderDNA: Invalid type index in structure field ", j, " (there are only ", types.size(), " entries)");
"BlenderDNA: Invalid type index in structure field ", j,
" (there are only ", types.size(), " entries)"));
} }
s.fields.push_back(Field()); s.fields.push_back(Field());
Field &f = s.fields.back(); Field &f = s.fields.back();
@ -164,9 +159,7 @@ void DNAParser::Parse() {
j = stream.GetI2(); j = stream.GetI2();
if (j >= names.size()) { if (j >= names.size()) {
throw DeadlyImportError((format(), throw DeadlyImportError("BlenderDNA: Invalid name index in structure field ", j, " (there are only ", names.size(), " entries)");
"BlenderDNA: Invalid name index in structure field ", j,
" (there are only ", names.size(), " entries)"));
} }
f.name = names[j]; f.name = names[j];
@ -188,9 +181,7 @@ void DNAParser::Parse() {
if (*f.name.rbegin() == ']') { if (*f.name.rbegin() == ']') {
const std::string::size_type rb = f.name.find('['); const std::string::size_type rb = f.name.find('[');
if (rb == std::string::npos) { if (rb == std::string::npos) {
throw DeadlyImportError((format(), throw DeadlyImportError("BlenderDNA: Encountered invalid array declaration ", f.name);
"BlenderDNA: Encountered invalid array declaration ",
f.name));
} }
f.flags |= FieldFlag_Array; f.flags |= FieldFlag_Array;
@ -207,9 +198,9 @@ void DNAParser::Parse() {
s.size = offset; s.size = offset;
} }
ASSIMP_LOG_DEBUG_F("BlenderDNA: Got ", dna.structures.size(), " structures with totally ", fields, " fields"); ASSIMP_LOG_DEBUG("BlenderDNA: Got ", dna.structures.size(), " structures with totally ", fields, " fields");
#ifdef ASSIMP_BUILD_BLENDER_DEBUG #if ASSIMP_BUILD_BLENDER_DEBUG_DNA
dna.DumpToFile(); dna.DumpToFile();
#endif #endif
@ -217,7 +208,7 @@ void DNAParser::Parse() {
dna.RegisterConverters(); dna.RegisterConverters();
} }
#ifdef ASSIMP_BUILD_BLENDER_DEBUG #if ASSIMP_BUILD_BLENDER_DEBUG_DNA
#include <fstream> #include <fstream>
// ------------------------------------------------------------------------------------------------ // ------------------------------------------------------------------------------------------------
@ -246,7 +237,7 @@ void DNA ::DumpToFile() {
ASSIMP_LOG_INFO("BlenderDNA: Dumped dna to dna.txt"); ASSIMP_LOG_INFO("BlenderDNA: Dumped dna to dna.txt");
} }
#endif #endif // ASSIMP_BUILD_BLENDER_DEBUG_DNA
// ------------------------------------------------------------------------------------------------ // ------------------------------------------------------------------------------------------------
/*static*/ void DNA ::ExtractArraySize( /*static*/ void DNA ::ExtractArraySize(
@ -334,10 +325,10 @@ void SectionParser ::Next() {
stream.SetCurrentPos(current.start + current.size); stream.SetCurrentPos(current.start + current.size);
const char tmp[] = { const char tmp[] = {
(const char)stream.GetI1(), (char)stream.GetI1(),
(const char)stream.GetI1(), (char)stream.GetI1(),
(const char)stream.GetI1(), (char)stream.GetI1(),
(const char)stream.GetI1() (char)stream.GetI1()
}; };
current.id = std::string(tmp, tmp[3] ? 4 : tmp[2] ? 3 : tmp[1] ? 2 : 1); current.id = std::string(tmp, tmp[3] ? 4 : tmp[2] ? 3 : tmp[1] ? 2 : 1);

View File

@ -2,7 +2,7 @@
Open Asset Import Library (assimp) Open Asset Import Library (assimp)
---------------------------------------------------------------------- ----------------------------------------------------------------------
Copyright (c) 2006-2020, assimp team Copyright (c) 2006-2024, assimp team
All rights reserved. All rights reserved.
@ -59,6 +59,13 @@ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
#define ASSIMP_BUILD_BLENDER_DEBUG #define ASSIMP_BUILD_BLENDER_DEBUG
#endif #endif
// set this to non-zero to dump BlenderDNA stuff to dna.txt.
// you could set it on the assimp build command line too without touching it here.
// !!! please make sure this is set to 0 in the repo !!!
#ifndef ASSIMP_BUILD_BLENDER_DEBUG_DNA
#define ASSIMP_BUILD_BLENDER_DEBUG_DNA 0
#endif
// #define ASSIMP_BUILD_BLENDER_NO_STATS // #define ASSIMP_BUILD_BLENDER_NO_STATS
namespace Assimp { namespace Assimp {
@ -83,9 +90,9 @@ class ObjectCache;
* ancestry. */ * ancestry. */
// ------------------------------------------------------------------------------- // -------------------------------------------------------------------------------
struct Error : DeadlyImportError { struct Error : DeadlyImportError {
Error(const std::string &s) : template <typename... T>
DeadlyImportError(s) { explicit Error(T &&...args) :
// empty DeadlyImportError(args...) {
} }
}; };
@ -99,9 +106,7 @@ struct ElemBase {
// empty // empty
} }
virtual ~ElemBase() { virtual ~ElemBase() = default;
// empty
}
/** Type name of the element. The type /** Type name of the element. The type
* string points is the `c_str` of the `name` attribute of the * string points is the `c_str` of the `name` attribute of the
@ -186,7 +191,7 @@ struct Field {
}; };
// ------------------------------------------------------------------------------- // -------------------------------------------------------------------------------
/** Range of possible behaviours for fields absend in the input file. Some are /** Range of possible behaviors for fields absence in the input file. Some are
* mission critical so we need them, while others can silently be default * mission critical so we need them, while others can silently be default
* initialized and no animations are harmed. */ * initialized and no animations are harmed. */
// ------------------------------------------------------------------------------- // -------------------------------------------------------------------------------
@ -230,7 +235,7 @@ public:
// -------------------------------------------------------- // --------------------------------------------------------
/** Access a field of the structure by its canonical name. The pointer version /** Access a field of the structure by its canonical name. The pointer version
* returns NULL on failure while the reference version raises an import error. */ * returns nullptr on failure while the reference version raises an import error. */
inline const Field &operator[](const std::string &ss) const; inline const Field &operator[](const std::string &ss) const;
inline const Field *Get(const std::string &ss) const; inline const Field *Get(const std::string &ss) const;
@ -359,7 +364,7 @@ private:
template <typename T> template <typename T>
T *_allocate(vector<T> &out, size_t &s) const { T *_allocate(vector<T> &out, size_t &s) const {
out.resize(s); out.resize(s);
return s ? &out.front() : NULL; return s ? &out.front() : nullptr;
} }
// -------------------------------------------------------- // --------------------------------------------------------
@ -367,14 +372,14 @@ private:
struct _defaultInitializer { struct _defaultInitializer {
template <typename T, unsigned int N> template <typename T, unsigned int N>
void operator()(T (&out)[N], const char * = NULL) { void operator()(T (&out)[N], const char * = nullptr) {
for (unsigned int i = 0; i < N; ++i) { for (unsigned int i = 0; i < N; ++i) {
out[i] = T(); out[i] = T();
} }
} }
template <typename T, unsigned int N, unsigned int M> template <typename T, unsigned int N, unsigned int M>
void operator()(T (&out)[N][M], const char * = NULL) { void operator()(T (&out)[N][M], const char * = nullptr) {
for (unsigned int i = 0; i < N; ++i) { for (unsigned int i = 0; i < N; ++i) {
for (unsigned int j = 0; j < M; ++j) { for (unsigned int j = 0; j < M; ++j) {
out[i][j] = T(); out[i][j] = T();
@ -383,7 +388,7 @@ private:
} }
template <typename T> template <typename T>
void operator()(T &out, const char * = NULL) { void operator()(T &out, const char * = nullptr) {
out = T(); out = T();
} }
}; };
@ -394,7 +399,7 @@ private:
// -------------------------------------------------------- // --------------------------------------------------------
template <> template <>
struct Structure ::_defaultInitializer<ErrorPolicy_Warn> { struct Structure::_defaultInitializer<ErrorPolicy_Warn> {
template <typename T> template <typename T>
void operator()(T &out, const char *reason = "<add reason>") { void operator()(T &out, const char *reason = "<add reason>") {
@ -406,13 +411,13 @@ struct Structure ::_defaultInitializer<ErrorPolicy_Warn> {
}; };
template <> template <>
struct Structure ::_defaultInitializer<ErrorPolicy_Fail> { struct Structure::_defaultInitializer<ErrorPolicy_Fail> {
template <typename T> template <typename T>
void operator()(T & /*out*/, const char * = "") { void operator()(T & /*out*/, const char *message = "") {
// obviously, it is crucial that _DefaultInitializer is used // obviously, it is crucial that _DefaultInitializer is used
// only from within a catch clause. // only from within a catch clause.
throw DeadlyImportError("Constructing BlenderDNA Structure encountered an error"); throw DeadlyImportError("Constructing BlenderDNA Structure encountered an error: ", message);
} }
}; };
@ -424,6 +429,17 @@ inline bool Structure ::ResolvePointer<std::shared_ptr, ElemBase>(std::shared_pt
const Field &f, const Field &f,
bool) const; bool) const;
template <> bool Structure :: ResolvePointer<std::shared_ptr,ElemBase>(
std::shared_ptr<ElemBase>& out, const Pointer & ptrval,
const FileDatabase& db, const Field&, bool) const;
template <> inline void Structure :: Convert<int> (int& dest,const FileDatabase& db) const;
template<> inline void Structure :: Convert<short> (short& dest,const FileDatabase& db) const;
template <> inline void Structure :: Convert<char> (char& dest,const FileDatabase& db) const;
template <> inline void Structure::Convert<unsigned char>(unsigned char& dest, const FileDatabase& db) const;
template <> inline void Structure :: Convert<float> (float& dest,const FileDatabase& db) const;
template <> inline void Structure :: Convert<double> (double& dest,const FileDatabase& db) const;
template <> inline void Structure :: Convert<Pointer> (Pointer& dest,const FileDatabase& db) const;
// ------------------------------------------------------------------------------- // -------------------------------------------------------------------------------
/** Represents the full data structure information for a single BLEND file. /** Represents the full data structure information for a single BLEND file.
* This data is extracted from the DNA1 chunk in the file. * This data is extracted from the DNA1 chunk in the file.
@ -448,7 +464,7 @@ public:
public: public:
// -------------------------------------------------------- // --------------------------------------------------------
/** Access a structure by its canonical name, the pointer version returns NULL on failure /** Access a structure by its canonical name, the pointer version returns nullptr on failure
* while the reference version raises an error. */ * while the reference version raises an error. */
inline const Structure &operator[](const std::string &ss) const; inline const Structure &operator[](const std::string &ss) const;
inline const Structure *Get(const std::string &ss) const; inline const Structure *Get(const std::string &ss) const;
@ -469,7 +485,7 @@ public:
* in BlenderScene.cpp and is machine-generated. * in BlenderScene.cpp and is machine-generated.
* Converters are used to quickly handle objects whose * Converters are used to quickly handle objects whose
* exact data type is a runtime-property and not yet * exact data type is a runtime-property and not yet
* known at compile time (consier Object::data).*/ * known at compile time (consider Object::data).*/
void RegisterConverters(); void RegisterConverters();
// -------------------------------------------------------- // --------------------------------------------------------
@ -495,7 +511,7 @@ public:
const Structure &structure, const Structure &structure,
const FileDatabase &db) const; const FileDatabase &db) const;
#ifdef ASSIMP_BUILD_BLENDER_DEBUG #if ASSIMP_BUILD_BLENDER_DEBUG_DNA
// -------------------------------------------------------- // --------------------------------------------------------
/** Dump the DNA to a text file. This is for debugging purposes. /** Dump the DNA to a text file. This is for debugging purposes.
* The output file is `dna.txt` in the current working folder*/ * The output file is `dna.txt` in the current working folder*/

View File

@ -2,7 +2,7 @@
Open Asset Import Library (assimp) Open Asset Import Library (assimp)
---------------------------------------------------------------------- ----------------------------------------------------------------------
Copyright (c) 2006-2020, assimp team Copyright (c) 2006-2024, assimp team
All rights reserved. All rights reserved.
@ -57,9 +57,7 @@ const Field& Structure :: operator [] (const std::string& ss) const
{ {
std::map<std::string, size_t>::const_iterator it = indices.find(ss); std::map<std::string, size_t>::const_iterator it = indices.find(ss);
if (it == indices.end()) { if (it == indices.end()) {
throw Error((Formatter::format(), throw Error("BlendDNA: Did not find a field named `",ss,"` in structure `",name,"`");
"BlendDNA: Did not find a field named `",ss,"` in structure `",name,"`"
));
} }
return fields[(*it).second]; return fields[(*it).second];
@ -69,16 +67,14 @@ const Field& Structure :: operator [] (const std::string& ss) const
const Field* Structure :: Get (const std::string& ss) const const Field* Structure :: Get (const std::string& ss) const
{ {
std::map<std::string, size_t>::const_iterator it = indices.find(ss); std::map<std::string, size_t>::const_iterator it = indices.find(ss);
return it == indices.end() ? NULL : &fields[(*it).second]; return it == indices.end() ? nullptr : &fields[(*it).second];
} }
//-------------------------------------------------------------------------------- //--------------------------------------------------------------------------------
const Field& Structure :: operator [] (const size_t i) const const Field& Structure :: operator [] (const size_t i) const
{ {
if (i >= fields.size()) { if (i >= fields.size()) {
throw Error((Formatter::format(), throw Error("BlendDNA: There is no field with index `",i,"` in structure `",name,"`");
"BlendDNA: There is no field with index `",i,"` in structure `",name,"`"
));
} }
return fields[i]; return fields[i];
@ -109,9 +105,7 @@ void Structure :: ReadFieldArray(T (& out)[M], const char* name, const FileDatab
// is the input actually an array? // is the input actually an array?
if (!(f.flags & FieldFlag_Array)) { if (!(f.flags & FieldFlag_Array)) {
throw Error((Formatter::format(),"Field `",name,"` of structure `", throw Error("Field `",name,"` of structure `",this->name,"` ought to be an array of size ",M);
this->name,"` ought to be an array of size ",M
));
} }
db.reader->IncPtr(f.offset); db.reader->IncPtr(f.offset);
@ -148,9 +142,9 @@ void Structure :: ReadFieldArray2(T (& out)[M][N], const char* name, const FileD
// is the input actually an array? // is the input actually an array?
if (!(f.flags & FieldFlag_Array)) { if (!(f.flags & FieldFlag_Array)) {
throw Error((Formatter::format(),"Field `",name,"` of structure `", throw Error("Field `",name,"` of structure `",
this->name,"` ought to be an array of size ",M,"*",N this->name,"` ought to be an array of size ",M,"*",N
)); );
} }
db.reader->IncPtr(f.offset); db.reader->IncPtr(f.offset);
@ -195,8 +189,8 @@ bool Structure :: ReadFieldPtr(TOUT<T>& out, const char* name, const FileDatabas
// sanity check, should never happen if the genblenddna script is right // sanity check, should never happen if the genblenddna script is right
if (!(f->flags & FieldFlag_Pointer)) { if (!(f->flags & FieldFlag_Pointer)) {
throw Error((Formatter::format(),"Field `",name,"` of structure `", throw Error("Field `",name,"` of structure `",
this->name,"` ought to be a pointer")); this->name,"` ought to be a pointer");
} }
db.reader->IncPtr(f->offset); db.reader->IncPtr(f->offset);
@ -241,8 +235,8 @@ bool Structure :: ReadFieldPtr(TOUT<T> (&out)[N], const char* name,
#ifdef _DEBUG #ifdef _DEBUG
// sanity check, should never happen if the genblenddna script is right // sanity check, should never happen if the genblenddna script is right
if ((FieldFlag_Pointer|FieldFlag_Pointer) != (f->flags & (FieldFlag_Pointer|FieldFlag_Pointer))) { if ((FieldFlag_Pointer|FieldFlag_Pointer) != (f->flags & (FieldFlag_Pointer|FieldFlag_Pointer))) {
throw Error((Formatter::format(),"Field `",name,"` of structure `", throw Error("Field `",name,"` of structure `",
this->name,"` ought to be a pointer AND an array")); this->name,"` ought to be a pointer AND an array");
} }
#endif // _DEBUG #endif // _DEBUG
@ -322,8 +316,8 @@ bool Structure::ReadCustomDataPtr(std::shared_ptr<ElemBase>&out, int cdtype, con
// sanity check, should never happen if the genblenddna script is right // sanity check, should never happen if the genblenddna script is right
if (!(f->flags & FieldFlag_Pointer)) { if (!(f->flags & FieldFlag_Pointer)) {
throw Error((Formatter::format(), "Field `", name, "` of structure `", throw Error("Field `", name, "` of structure `",
this->name, "` ought to be a pointer")); this->name, "` ought to be a pointer");
} }
db.reader->IncPtr(f->offset); db.reader->IncPtr(f->offset);
@ -369,8 +363,8 @@ bool Structure::ReadFieldPtrVector(vector<TOUT<T>>&out, const char* name, const
// sanity check, should never happen if the genblenddna script is right // sanity check, should never happen if the genblenddna script is right
if (!(f->flags & FieldFlag_Pointer)) { if (!(f->flags & FieldFlag_Pointer)) {
throw Error((Formatter::format(), "Field `", name, "` of structure `", throw Error("Field `", name, "` of structure `",
this->name, "` ought to be a pointer")); this->name, "` ought to be a pointer");
} }
db.reader->IncPtr(f->offset); db.reader->IncPtr(f->offset);
@ -428,9 +422,9 @@ bool Structure :: ResolvePointer(TOUT<T>& out, const Pointer & ptrval, const Fil
// and check if it matches the type which we expect. // and check if it matches the type which we expect.
const Structure& ss = db.dna[block->dna_index]; const Structure& ss = db.dna[block->dna_index];
if (ss != s) { if (ss != s) {
throw Error((Formatter::format(),"Expected target to be of type `",s.name, throw Error("Expected target to be of type `",s.name,
"` but seemingly it is a `",ss.name,"` instead" "` but seemingly it is a `",ss.name,"` instead"
)); );
} }
// try to retrieve the object from the cache // try to retrieve the object from the cache
@ -571,7 +565,7 @@ template <> bool Structure :: ResolvePointer<std::shared_ptr,ElemBase>(std::shar
// this might happen if DNA::RegisterConverters hasn't been called so far // this might happen if DNA::RegisterConverters hasn't been called so far
// or if the target type is not contained in `our` DNA. // or if the target type is not contained in `our` DNA.
out.reset(); out.reset();
ASSIMP_LOG_WARN_F( "Failed to find a converter for the `",s.name,"` structure" ); ASSIMP_LOG_WARN( "Failed to find a converter for the `",s.name,"` structure" );
return false; return false;
} }
@ -614,16 +608,14 @@ const FileBlockHead* Structure :: LocateFileBlockForAddress(const Pointer & ptrv
if (it == db.entries.end()) { if (it == db.entries.end()) {
// this is crucial, pointers may not be invalid. // this is crucial, pointers may not be invalid.
// this is either a corrupted file or an attempted attack. // this is either a corrupted file or an attempted attack.
throw DeadlyImportError((Formatter::format(),"Failure resolving pointer 0x", throw DeadlyImportError("Failure resolving pointer 0x",
std::hex,ptrval.val,", no file block falls into this address range" std::hex,ptrval.val,", no file block falls into this address range");
));
} }
if (ptrval.val >= (*it).address.val + (*it).size) { if (ptrval.val >= (*it).address.val + (*it).size) {
throw DeadlyImportError((Formatter::format(),"Failure resolving pointer 0x", throw DeadlyImportError("Failure resolving pointer 0x",
std::hex,ptrval.val,", nearest file block starting at 0x", std::hex,ptrval.val,", nearest file block starting at 0x",
(*it).address.val," ends at 0x", (*it).address.val," ends at 0x",
(*it).address.val + (*it).size (*it).address.val + (*it).size);
));
} }
return &*it; return &*it;
} }
@ -676,7 +668,7 @@ template <typename T> inline void ConvertDispatcher(T& out, const Structure& in,
out = static_cast<T>(db.reader->GetF8()); out = static_cast<T>(db.reader->GetF8());
} }
else { else {
throw DeadlyImportError("Unknown source for conversion to primitive data type: "+in.name); throw DeadlyImportError("Unknown source for conversion to primitive data type: ", in.name);
} }
} }
@ -784,9 +776,7 @@ const Structure& DNA :: operator [] (const std::string& ss) const
{ {
std::map<std::string, size_t>::const_iterator it = indices.find(ss); std::map<std::string, size_t>::const_iterator it = indices.find(ss);
if (it == indices.end()) { if (it == indices.end()) {
throw Error((Formatter::format(), throw Error("BlendDNA: Did not find a structure named `",ss,"`");
"BlendDNA: Did not find a structure named `",ss,"`"
));
} }
return structures[(*it).second]; return structures[(*it).second];
@ -803,9 +793,7 @@ const Structure* DNA :: Get (const std::string& ss) const
const Structure& DNA :: operator [] (const size_t i) const const Structure& DNA :: operator [] (const size_t i) const
{ {
if (i >= structures.size()) { if (i >= structures.size()) {
throw Error((Formatter::format(), throw Error("BlendDNA: There is no structure with index `",i,"`");
"BlendDNA: There is no structure with index `",i,"`"
));
} }
return structures[i]; return structures[i];

View File

@ -2,7 +2,7 @@
Open Asset Import Library (assimp) Open Asset Import Library (assimp)
---------------------------------------------------------------------- ----------------------------------------------------------------------
Copyright (c) 2006-2020, assimp team Copyright (c) 2006-2024, assimp team
All rights reserved. All rights reserved.
@ -65,8 +65,7 @@ namespace Blender {
struct TempArray { struct TempArray {
typedef TCLASS< T*,std::allocator<T*> > mywrap; typedef TCLASS< T*,std::allocator<T*> > mywrap;
TempArray() { TempArray() = default;
}
~TempArray () { ~TempArray () {
for(T* elem : arr) { for(T* elem : arr) {

File diff suppressed because it is too large Load Diff

View File

@ -2,8 +2,7 @@
Open Asset Import Library (assimp) Open Asset Import Library (assimp)
---------------------------------------------------------------------- ----------------------------------------------------------------------
Copyright (c) 2006-2020, assimp team Copyright (c) 2006-2024, assimp team
All rights reserved. All rights reserved.
@ -43,6 +42,7 @@ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
/** @file BlenderLoader.h /** @file BlenderLoader.h
* @brief Declaration of the Blender 3D (*.blend) importer class. * @brief Declaration of the Blender 3D (*.blend) importer class.
*/ */
#pragma once
#ifndef INCLUDED_AI_BLEND_LOADER_H #ifndef INCLUDED_AI_BLEND_LOADER_H
#define INCLUDED_AI_BLEND_LOADER_H #define INCLUDED_AI_BLEND_LOADER_H
@ -56,183 +56,154 @@ struct aiLight;
struct aiCamera; struct aiCamera;
struct aiMaterial; struct aiMaterial;
namespace Assimp { namespace Assimp {
// TinyFormatter.h // TinyFormatter.h
namespace Formatter { namespace Formatter {
template <typename T,typename TR, typename A> class basic_formatter;
typedef class basic_formatter< char, std::char_traits<char>, std::allocator<char> > format;
}
// BlenderDNA.h template <typename T, typename TR, typename A>
namespace Blender { class basic_formatter;
class FileDatabase;
struct ElemBase;
}
// BlenderScene.h typedef class basic_formatter<char, std::char_traits<char>, std::allocator<char>> format;
namespace Blender {
struct Scene;
struct Object;
struct Mesh;
struct Camera;
struct Lamp;
struct MTex;
struct Image;
struct Material;
}
// BlenderIntermediate.h } // namespace Formatter
namespace Blender {
struct ConversionData;
template <template <typename,typename> class TCLASS, typename T> struct TempArray;
}
// BlenderModifier.h // BlenderDNA.h
namespace Blender { namespace Blender {
class BlenderModifierShowcase; class FileDatabase;
class BlenderModifier; struct ElemBase;
} } // namespace Blender
// BlenderScene.h
namespace Blender {
struct Scene;
struct Object;
struct Collection;
struct Mesh;
struct Camera;
struct Lamp;
struct MTex;
struct Image;
struct Material;
} // namespace Blender
// BlenderIntermediate.h
namespace Blender {
struct ConversionData;
template <template <typename, typename> class TCLASS, typename T>
struct TempArray;
} // namespace Blender
// BlenderModifier.h
namespace Blender {
class BlenderModifierShowcase;
class BlenderModifier;
} // namespace Blender
// ------------------------------------------------------------------------------------------- // -------------------------------------------------------------------------------------------
/** Load blenders official binary format. The actual file structure (the `DNA` how they /** Load blenders official binary format. The actual file structure (the `DNA` how they
* call it is outsourced to BlenderDNA.cpp/BlenderDNA.h. This class only performs the * call it is outsourced to BlenderDNA.cpp/BlenderDNA.h. This class only performs the
* conversion from intermediate format to aiScene. */ * conversion from intermediate format to aiScene. */
// ------------------------------------------------------------------------------------------- // -------------------------------------------------------------------------------------------
class BlenderImporter : public BaseImporter, public LogFunctions<BlenderImporter> class BlenderImporter : public BaseImporter, public LogFunctions<BlenderImporter> {
{
public: public:
BlenderImporter(); BlenderImporter();
~BlenderImporter(); ~BlenderImporter() override;
bool CanRead(const std::string &pFile, IOSystem *pIOHandler, bool checkSig) const override;
public:
// --------------------
bool CanRead( const std::string& pFile,
IOSystem* pIOHandler,
bool checkSig
) const;
protected: protected:
const aiImporterDesc *GetInfo() const override;
// -------------------- void SetupProperties(const Importer *pImp) override;
const aiImporterDesc* GetInfo () const; void InternReadFile(const std::string &pFile, aiScene *pScene, IOSystem *pIOHandler) override;
void ParseBlendFile(Blender::FileDatabase &out, std::shared_ptr<IOStream> stream);
// -------------------- void ExtractScene(Blender::Scene &out, const Blender::FileDatabase &file);
void GetExtensionList(std::set<std::string>& app); void ParseSubCollection(const Blender::Scene &in, aiNode *root, const std::shared_ptr<Blender::Collection>& collection, Blender::ConversionData &conv_data);
void ConvertBlendFile(aiScene *out, const Blender::Scene &in, const Blender::FileDatabase &file);
// --------------------
void SetupProperties(const Importer* pImp);
// --------------------
void InternReadFile( const std::string& pFile,
aiScene* pScene,
IOSystem* pIOHandler
);
// --------------------
void ParseBlendFile(Blender::FileDatabase& out,
std::shared_ptr<IOStream> stream
);
// --------------------
void ExtractScene(Blender::Scene& out,
const Blender::FileDatabase& file
);
// --------------------
void ConvertBlendFile(aiScene* out,
const Blender::Scene& in,
const Blender::FileDatabase& file
);
private: private:
aiNode *ConvertNode(const Blender::Scene &in,
const Blender::Object *obj,
Blender::ConversionData &conv_info,
const aiMatrix4x4 &parentTransform);
// -------------------- // --------------------
aiNode* ConvertNode(const Blender::Scene& in, void ConvertMesh(const Blender::Scene &in,
const Blender::Object* obj, const Blender::Object *obj,
Blender::ConversionData& conv_info, const Blender::Mesh *mesh,
const aiMatrix4x4& parentTransform Blender::ConversionData &conv_data,
); Blender::TempArray<std::vector, aiMesh> &temp);
// -------------------- // --------------------
void ConvertMesh(const Blender::Scene& in, aiLight *ConvertLight(const Blender::Scene &in,
const Blender::Object* obj, const Blender::Object *obj,
const Blender::Mesh* mesh, const Blender::Lamp *mesh,
Blender::ConversionData& conv_data, Blender::ConversionData &conv_data);
Blender::TempArray<std::vector,aiMesh>& temp
);
// -------------------- // --------------------
aiLight* ConvertLight(const Blender::Scene& in, aiCamera *ConvertCamera(const Blender::Scene &in,
const Blender::Object* obj, const Blender::Object *obj,
const Blender::Lamp* mesh, const Blender::Camera *mesh,
Blender::ConversionData& conv_data Blender::ConversionData &conv_data);
);
// --------------------
aiCamera* ConvertCamera(const Blender::Scene& in,
const Blender::Object* obj,
const Blender::Camera* mesh,
Blender::ConversionData& conv_data
);
// -------------------- // --------------------
void BuildDefaultMaterial( void BuildDefaultMaterial(
Blender::ConversionData& conv_data Blender::ConversionData &conv_data);
);
// --------------------
void AddBlendParams( void AddBlendParams(
aiMaterial* result, aiMaterial *result,
const Blender::Material* source const Blender::Material *source);
);
// --------------------
void BuildMaterials( void BuildMaterials(
Blender::ConversionData& conv_data Blender::ConversionData &conv_data);
);
// -------------------- // --------------------
void ResolveTexture( void ResolveTexture(
aiMaterial* out, aiMaterial *out,
const Blender::Material* mat, const Blender::Material *mat,
const Blender::MTex* tex, const Blender::MTex *tex,
Blender::ConversionData& conv_data Blender::ConversionData &conv_data);
);
// -------------------- // --------------------
void ResolveImage( void ResolveImage(
aiMaterial* out, aiMaterial *out,
const Blender::Material* mat, const Blender::Material *mat,
const Blender::MTex* tex, const Blender::MTex *tex,
const Blender::Image* img, const Blender::Image *img,
Blender::ConversionData& conv_data Blender::ConversionData &conv_data);
);
// --------------------
void AddSentinelTexture( void AddSentinelTexture(
aiMaterial* out, aiMaterial *out,
const Blender::Material* mat, const Blender::Material *mat,
const Blender::MTex* tex, const Blender::MTex *tex,
Blender::ConversionData& conv_data Blender::ConversionData &conv_data);
);
// TODO: Move to a std::variant, once c++17 is supported.
struct StreamOrError {
std::shared_ptr<IOStream> stream;
std::shared_ptr<std::vector<char>> input;
std::string error;
};
// Returns either a stream (and optional input data for the stream) or
// an error if it can't parse the magic token.
StreamOrError ParseMagicToken(
const std::string &pFile,
IOSystem *pIOHandler) const;
private: // static stuff, mostly logging and error reporting. private: // static stuff, mostly logging and error reporting.
// --------------------
static void CheckActualType(const Blender::ElemBase *dt,
const char *check);
// -------------------- // --------------------
static void CheckActualType(const Blender::ElemBase* dt, static void NotSupportedObjectType(const Blender::Object *obj,
const char* check const char *type);
);
// --------------------
static void NotSupportedObjectType(const Blender::Object* obj,
const char* type
);
private: private:
Blender::BlenderModifierShowcase *modifier_cache;
Blender::BlenderModifierShowcase* modifier_cache;
}; // !class BlenderImporter }; // !class BlenderImporter

View File

@ -2,7 +2,7 @@
Open Asset Import Library (assimp) Open Asset Import Library (assimp)
---------------------------------------------------------------------- ----------------------------------------------------------------------
Copyright (c) 2006-2020, assimp team Copyright (c) 2006-2024, assimp team
All rights reserved. All rights reserved.
@ -71,10 +71,6 @@ static const fpCreateModifier creators[] = {
nullptr // sentinel nullptr // sentinel
}; };
// ------------------------------------------------------------------------------------------------
struct SharedModifierData : ElemBase {
ModifierData modifier;
};
// ------------------------------------------------------------------------------------------------ // ------------------------------------------------------------------------------------------------
void BlenderModifierShowcase::ApplyModifiers(aiNode &out, ConversionData &conv_data, const Scene &in, const Object &orig_object) { void BlenderModifierShowcase::ApplyModifiers(aiNode &out, ConversionData &conv_data, const Scene &in, const Object &orig_object) {
@ -90,7 +86,7 @@ void BlenderModifierShowcase::ApplyModifiers(aiNode &out, ConversionData &conv_d
const Structure *s = conv_data.db.dna.Get(cur->dna_type); const Structure *s = conv_data.db.dna.Get(cur->dna_type);
if (!s) { if (!s) {
ASSIMP_LOG_WARN_F("BlendModifier: could not resolve DNA name: ", cur->dna_type); ASSIMP_LOG_WARN("BlendModifier: could not resolve DNA name: ", cur->dna_type);
continue; continue;
} }
@ -132,7 +128,7 @@ void BlenderModifierShowcase::ApplyModifiers(aiNode &out, ConversionData &conv_d
} }
} }
if (curgod) { if (curgod) {
ASSIMP_LOG_WARN_F("Couldn't find a handler for modifier: ", dat.name); ASSIMP_LOG_WARN("Couldn't find a handler for modifier: ", dat.name);
} }
} }
@ -140,7 +136,7 @@ void BlenderModifierShowcase::ApplyModifiers(aiNode &out, ConversionData &conv_d
// object, we still can't say whether our modifier implementations were // object, we still can't say whether our modifier implementations were
// able to fully do their job. // able to fully do their job.
if (ful) { if (ful) {
ASSIMP_LOG_DEBUG_F("BlendModifier: found handlers for ", cnt, " of ", ful, " modifiers on `", orig_object.id.name, ASSIMP_LOG_DEBUG("BlendModifier: found handlers for ", cnt, " of ", ful, " modifiers on `", orig_object.id.name,
"`, check log messages above for errors"); "`, check log messages above for errors");
} }
} }
@ -157,6 +153,7 @@ void BlenderModifier_Mirror ::DoIt(aiNode &out, ConversionData &conv_data, const
// hijacking the ABI, see the big note in BlenderModifierShowcase::ApplyModifiers() // hijacking the ABI, see the big note in BlenderModifierShowcase::ApplyModifiers()
const MirrorModifierData &mir = static_cast<const MirrorModifierData &>(orig_modifier); const MirrorModifierData &mir = static_cast<const MirrorModifierData &>(orig_modifier);
ai_assert(mir.modifier.type == ModifierData::eModifierType_Mirror); ai_assert(mir.modifier.type == ModifierData::eModifierType_Mirror);
std::shared_ptr<Object> mirror_ob = mir.mirror_ob.lock();
conv_data.meshes->reserve(conv_data.meshes->size() + out.mNumMeshes); conv_data.meshes->reserve(conv_data.meshes->size() + out.mNumMeshes);
@ -171,8 +168,8 @@ void BlenderModifier_Mirror ::DoIt(aiNode &out, ConversionData &conv_data, const
const float ys = mir.flag & MirrorModifierData::Flags_AXIS_Y ? -1.f : 1.f; const float ys = mir.flag & MirrorModifierData::Flags_AXIS_Y ? -1.f : 1.f;
const float zs = mir.flag & MirrorModifierData::Flags_AXIS_Z ? -1.f : 1.f; const float zs = mir.flag & MirrorModifierData::Flags_AXIS_Z ? -1.f : 1.f;
if (mir.mirror_ob) { if (mirror_ob) {
const aiVector3D center(mir.mirror_ob->obmat[3][0], mir.mirror_ob->obmat[3][1], mir.mirror_ob->obmat[3][2]); const aiVector3D center(mirror_ob->obmat[3][0], mirror_ob->obmat[3][1], mirror_ob->obmat[3][2]);
for (unsigned int j = 0; j < mesh->mNumVertices; ++j) { for (unsigned int j = 0; j < mesh->mNumVertices; ++j) {
aiVector3D &v = mesh->mVertices[j]; aiVector3D &v = mesh->mVertices[j];
@ -248,7 +245,7 @@ void BlenderModifier_Mirror ::DoIt(aiNode &out, ConversionData &conv_data, const
out.mMeshes = nind; out.mMeshes = nind;
out.mNumMeshes *= 2; out.mNumMeshes *= 2;
ASSIMP_LOG_INFO_F("BlendModifier: Applied the `Mirror` modifier to `", ASSIMP_LOG_INFO("BlendModifier: Applied the `Mirror` modifier to `",
orig_object.id.name, "`"); orig_object.id.name, "`");
} }
@ -277,7 +274,7 @@ void BlenderModifier_Subdivision ::DoIt(aiNode &out, ConversionData &conv_data,
break; break;
default: default:
ASSIMP_LOG_WARN_F("BlendModifier: Unrecognized subdivision algorithm: ", mir.subdivType); ASSIMP_LOG_WARN("BlendModifier: Unrecognized subdivision algorithm: ", mir.subdivType);
return; return;
}; };
@ -286,13 +283,18 @@ void BlenderModifier_Subdivision ::DoIt(aiNode &out, ConversionData &conv_data,
if (conv_data.meshes->empty()) { if (conv_data.meshes->empty()) {
return; return;
} }
const size_t meshIndex = conv_data.meshes->size() - out.mNumMeshes;
if (meshIndex >= conv_data.meshes->size()) {
ASSIMP_LOG_ERROR("Invalid index detected.");
return;
}
aiMesh **const meshes = &conv_data.meshes[conv_data.meshes->size() - out.mNumMeshes]; aiMesh **const meshes = &conv_data.meshes[conv_data.meshes->size() - out.mNumMeshes];
std::unique_ptr<aiMesh *[]> tempmeshes(new aiMesh *[out.mNumMeshes]()); std::unique_ptr<aiMesh *[]> tempmeshes(new aiMesh *[out.mNumMeshes]());
subd->Subdivide(meshes, out.mNumMeshes, tempmeshes.get(), std::max(mir.renderLevels, mir.levels), true); subd->Subdivide(meshes, out.mNumMeshes, tempmeshes.get(), std::max(mir.renderLevels, mir.levels), true);
std::copy(tempmeshes.get(), tempmeshes.get() + out.mNumMeshes, meshes); std::copy(tempmeshes.get(), tempmeshes.get() + out.mNumMeshes, meshes);
ASSIMP_LOG_INFO_F("BlendModifier: Applied the `Subdivision` modifier to `", ASSIMP_LOG_INFO("BlendModifier: Applied the `Subdivision` modifier to `",
orig_object.id.name, "`"); orig_object.id.name, "`");
} }

View File

@ -2,7 +2,7 @@
Open Asset Import Library (assimp) Open Asset Import Library (assimp)
---------------------------------------------------------------------- ----------------------------------------------------------------------
Copyright (c) 2006-2020, assimp team Copyright (c) 2006-2024, assimp team
All rights reserved. All rights reserved.
@ -62,9 +62,7 @@ public:
/** /**
* The class destructor, virtual. * The class destructor, virtual.
*/ */
virtual ~BlenderModifier() { virtual ~BlenderModifier() = default;
// empty
}
// -------------------- // --------------------
/** /**
@ -86,7 +84,7 @@ public:
const Scene& /*in*/, const Scene& /*in*/,
const Object& /*orig_object*/ const Object& /*orig_object*/
) { ) {
ASSIMP_LOG_INFO_F("This modifier is not supported, skipping: ",orig_modifier.dna_type ); ASSIMP_LOG_INFO("This modifier is not supported, skipping: ",orig_modifier.dna_type );
return; return;
} }
}; };

View File

@ -49,8 +49,8 @@ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
#include "BlenderDNA.h" #include "BlenderDNA.h"
#include "BlenderSceneGen.h" #include "BlenderSceneGen.h"
using namespace Assimp; namespace Assimp {
using namespace Assimp::Blender; namespace Blender {
//-------------------------------------------------------------------------------- //--------------------------------------------------------------------------------
template <> template <>
@ -94,6 +94,48 @@ void Structure ::Convert<Group>(
db.reader->IncPtr(size); db.reader->IncPtr(size);
} }
//--------------------------------------------------------------------------------
template <>
void Structure::Convert<CollectionObject>(
CollectionObject &dest,
const FileDatabase &db) const {
ReadFieldPtr<ErrorPolicy_Fail>(dest.next, "*next", db);
{
std::shared_ptr<Object> ob;
ReadFieldPtr<ErrorPolicy_Igno>(ob, "*ob", db);
dest.ob = ob.get();
}
db.reader->IncPtr(size);
}
//--------------------------------------------------------------------------------
template <>
void Structure::Convert<CollectionChild>(
CollectionChild &dest,
const FileDatabase &db) const {
ReadFieldPtr<ErrorPolicy_Fail>(dest.prev, "*prev", db);
ReadFieldPtr<ErrorPolicy_Fail>(dest.next, "*next", db);
ReadFieldPtr<ErrorPolicy_Igno>(dest.collection, "*collection", db);
db.reader->IncPtr(size);
}
//--------------------------------------------------------------------------------
template <>
void Structure::Convert<Collection>(
Collection &dest,
const FileDatabase &db) const {
ReadField<ErrorPolicy_Fail>(dest.id, "id", db);
ReadField<ErrorPolicy_Fail>(dest.gobject, "gobject", db);
ReadField<ErrorPolicy_Fail>(dest.children, "children", db);
db.reader->IncPtr(size);
}
//-------------------------------------------------------------------------------- //--------------------------------------------------------------------------------
template <> template <>
void Structure ::Convert<MTex>( void Structure ::Convert<MTex>(
@ -255,7 +297,7 @@ void Structure ::Convert<Base>(
const FileDatabase &db) const { const FileDatabase &db) const {
// note: as per https://github.com/assimp/assimp/issues/128, // note: as per https://github.com/assimp/assimp/issues/128,
// reading the Object linked list recursively is prone to stack overflow. // reading the Object linked list recursively is prone to stack overflow.
// This structure converter is therefore an hand-written exception that // This structure converter is therefore a hand-written exception that
// does it iteratively. // does it iteratively.
const int initial_pos = db.reader->GetCurrentPos(); const int initial_pos = db.reader->GetCurrentPos();
@ -523,7 +565,7 @@ void Structure ::Convert<MVert>(
const FileDatabase &db) const { const FileDatabase &db) const {
ReadFieldArray<ErrorPolicy_Fail>(dest.co, "co", db); ReadFieldArray<ErrorPolicy_Fail>(dest.co, "co", db);
ReadFieldArray<ErrorPolicy_Fail>(dest.no, "no", db); ReadFieldArray<ErrorPolicy_Warn>(dest.no, "no", db);
ReadField<ErrorPolicy_Igno>(dest.flag, "flag", db); ReadField<ErrorPolicy_Igno>(dest.flag, "flag", db);
//ReadField<ErrorPolicy_Warn>(dest.mat_nr,"mat_nr",db); //ReadField<ErrorPolicy_Warn>(dest.mat_nr,"mat_nr",db);
ReadField<ErrorPolicy_Igno>(dest.bweight, "bweight", db); ReadField<ErrorPolicy_Igno>(dest.bweight, "bweight", db);
@ -578,7 +620,9 @@ void Structure ::Convert<ListBase>(
const FileDatabase &db) const { const FileDatabase &db) const {
ReadFieldPtr<ErrorPolicy_Igno>(dest.first, "*first", db); ReadFieldPtr<ErrorPolicy_Igno>(dest.first, "*first", db);
ReadFieldPtr<ErrorPolicy_Igno>(dest.last, "*last", db); std::shared_ptr<ElemBase> last;
ReadFieldPtr<ErrorPolicy_Igno>(last, "*last", db);
dest.last = last;
db.reader->IncPtr(size); db.reader->IncPtr(size);
} }
@ -602,7 +646,9 @@ void Structure ::Convert<ModifierData>(
const FileDatabase &db) const { const FileDatabase &db) const {
ReadFieldPtr<ErrorPolicy_Warn>(dest.next, "*next", db); ReadFieldPtr<ErrorPolicy_Warn>(dest.next, "*next", db);
ReadFieldPtr<ErrorPolicy_Warn>(dest.prev, "*prev", db); std::shared_ptr<ElemBase> prev;
ReadFieldPtr<ErrorPolicy_Warn>(prev, "*prev", db);
dest.prev = prev;
ReadField<ErrorPolicy_Igno>(dest.type, "type", db); ReadField<ErrorPolicy_Igno>(dest.type, "type", db);
ReadField<ErrorPolicy_Igno>(dest.mode, "mode", db); ReadField<ErrorPolicy_Igno>(dest.mode, "mode", db);
ReadFieldArray<ErrorPolicy_Igno>(dest.name, "name", db); ReadFieldArray<ErrorPolicy_Igno>(dest.name, "name", db);
@ -660,6 +706,7 @@ void Structure ::Convert<Scene>(
ReadFieldPtr<ErrorPolicy_Warn>(dest.camera, "*camera", db); ReadFieldPtr<ErrorPolicy_Warn>(dest.camera, "*camera", db);
ReadFieldPtr<ErrorPolicy_Warn>(dest.world, "*world", db); ReadFieldPtr<ErrorPolicy_Warn>(dest.world, "*world", db);
ReadFieldPtr<ErrorPolicy_Warn>(dest.basact, "*basact", db); ReadFieldPtr<ErrorPolicy_Warn>(dest.basact, "*basact", db);
ReadFieldPtr<ErrorPolicy_Warn>(dest.master_collection, "*master_collection", db);
ReadField<ErrorPolicy_Igno>(dest.base, "base", db); ReadField<ErrorPolicy_Igno>(dest.base, "base", db);
db.reader->IncPtr(size); db.reader->IncPtr(size);
@ -725,7 +772,9 @@ void Structure ::Convert<MirrorModifierData>(
ReadField<ErrorPolicy_Igno>(dest.axis, "axis", db); ReadField<ErrorPolicy_Igno>(dest.axis, "axis", db);
ReadField<ErrorPolicy_Igno>(dest.flag, "flag", db); ReadField<ErrorPolicy_Igno>(dest.flag, "flag", db);
ReadField<ErrorPolicy_Igno>(dest.tolerance, "tolerance", db); ReadField<ErrorPolicy_Igno>(dest.tolerance, "tolerance", db);
ReadFieldPtr<ErrorPolicy_Igno>(dest.mirror_ob, "*mirror_ob", db); std::shared_ptr<Object> mirror_ob;
ReadFieldPtr<ErrorPolicy_Igno>(mirror_ob, "*mirror_ob", db);
dest.mirror_ob = mirror_ob;
db.reader->IncPtr(size); db.reader->IncPtr(size);
} }
@ -786,9 +835,9 @@ void Structure::Convert<CustomDataLayer>(
ReadField<ErrorPolicy_Fail>(dest.flag, "flag", db); ReadField<ErrorPolicy_Fail>(dest.flag, "flag", db);
ReadField<ErrorPolicy_Fail>(dest.active, "active", db); ReadField<ErrorPolicy_Fail>(dest.active, "active", db);
ReadField<ErrorPolicy_Fail>(dest.active_rnd, "active_rnd", db); ReadField<ErrorPolicy_Fail>(dest.active_rnd, "active_rnd", db);
ReadField<ErrorPolicy_Fail>(dest.active_clone, "active_clone", db); ReadField<ErrorPolicy_Warn>(dest.active_clone, "active_clone", db);
ReadField<ErrorPolicy_Fail>(dest.active_mask, "active_mask", db); ReadField<ErrorPolicy_Warn>(dest.active_mask, "active_mask", db);
ReadField<ErrorPolicy_Fail>(dest.uid, "uid", db); ReadField<ErrorPolicy_Warn>(dest.uid, "uid", db);
ReadFieldArray<ErrorPolicy_Warn>(dest.name, "name", db); ReadFieldArray<ErrorPolicy_Warn>(dest.name, "name", db);
ReadCustomDataPtr<ErrorPolicy_Fail>(dest.data, dest.type, "*data", db); ReadCustomDataPtr<ErrorPolicy_Fail>(dest.data, dest.type, "*data", db);
@ -833,6 +882,12 @@ void DNA::RegisterConverters() {
converters["Image"] = DNA::FactoryPair(&Structure::Allocate<Image>, &Structure::Convert<Image>); converters["Image"] = DNA::FactoryPair(&Structure::Allocate<Image>, &Structure::Convert<Image>);
converters["CustomData"] = DNA::FactoryPair(&Structure::Allocate<CustomData>, &Structure::Convert<CustomData>); converters["CustomData"] = DNA::FactoryPair(&Structure::Allocate<CustomData>, &Structure::Convert<CustomData>);
converters["CustomDataLayer"] = DNA::FactoryPair(&Structure::Allocate<CustomDataLayer>, &Structure::Convert<CustomDataLayer>); converters["CustomDataLayer"] = DNA::FactoryPair(&Structure::Allocate<CustomDataLayer>, &Structure::Convert<CustomDataLayer>);
converters["Collection"] = DNA::FactoryPair(&Structure::Allocate<Collection>, &Structure::Convert<Collection>);
converters["CollectionChild"] = DNA::FactoryPair(&Structure::Allocate<CollectionChild>, &Structure::Convert<CollectionChild>);
converters["CollectionObject"] = DNA::FactoryPair(&Structure::Allocate<CollectionObject>, &Structure::Convert<CollectionObject>);
} }
} // namespace Blender
} //namespace Assimp
#endif // ASSIMP_BUILD_NO_BLEND_IMPORTER #endif // ASSIMP_BUILD_NO_BLEND_IMPORTER

View File

@ -2,7 +2,7 @@
Open Asset Import Library (assimp) Open Asset Import Library (assimp)
---------------------------------------------------------------------- ----------------------------------------------------------------------
Copyright (c) 2006-2020, assimp team Copyright (c) 2006-2024, assimp team
All rights reserved. All rights reserved.
@ -107,6 +107,7 @@ namespace Blender {
struct Object; struct Object;
struct MTex; struct MTex;
struct Image; struct Image;
struct Collection;
#include <memory> #include <memory>
@ -123,7 +124,7 @@ struct ID : ElemBase {
// ------------------------------------------------------------------------------- // -------------------------------------------------------------------------------
struct ListBase : ElemBase { struct ListBase : ElemBase {
std::shared_ptr<ElemBase> first; std::shared_ptr<ElemBase> first;
std::shared_ptr<ElemBase> last; std::weak_ptr<ElemBase> last;
}; };
// ------------------------------------------------------------------------------- // -------------------------------------------------------------------------------
@ -147,6 +148,26 @@ struct Group : ElemBase {
std::shared_ptr<GroupObject> gobject; std::shared_ptr<GroupObject> gobject;
}; };
// -------------------------------------------------------------------------------
struct CollectionObject : ElemBase {
//CollectionObject* prev;
std::shared_ptr<CollectionObject> next;
Object *ob;
};
// -------------------------------------------------------------------------------
struct CollectionChild : ElemBase {
std::shared_ptr<CollectionChild> next, prev;
std::shared_ptr<Collection> collection;
};
// -------------------------------------------------------------------------------
struct Collection : ElemBase {
ID id FAIL;
ListBase gobject; // CollectionObject
ListBase children; // CollectionChild
};
// ------------------------------------------------------------------------------- // -------------------------------------------------------------------------------
struct World : ElemBase { struct World : ElemBase {
ID id FAIL; ID id FAIL;
@ -155,13 +176,13 @@ struct World : ElemBase {
// ------------------------------------------------------------------------------- // -------------------------------------------------------------------------------
struct MVert : ElemBase { struct MVert : ElemBase {
float co[3] FAIL; float co[3] FAIL;
float no[3] FAIL; // readed as short and divided through / 32767.f float no[3] FAIL; // read as short and divided through / 32767.f
char flag; char flag;
int mat_nr WARN; int mat_nr WARN;
int bweight; int bweight;
MVert() : MVert() :
ElemBase(), flag(0), mat_nr(0), bweight(0) {} flag(0), mat_nr(0), bweight(0) {}
}; };
// ------------------------------------------------------------------------------- // -------------------------------------------------------------------------------
@ -228,7 +249,10 @@ struct TFace : ElemBase {
// ------------------------------------------------------------------------------- // -------------------------------------------------------------------------------
struct MTFace : ElemBase { struct MTFace : ElemBase {
MTFace() : MTFace() :
flag(0), mode(0), tile(0), unwrap(0) { flag(0),
mode(0),
tile(0),
unwrap(0) {
} }
float uv[4][2] FAIL; float uv[4][2] FAIL;
@ -393,7 +417,6 @@ struct CustomDataLayer : ElemBase {
std::shared_ptr<ElemBase> data; // must be converted to real type according type member std::shared_ptr<ElemBase> data; // must be converted to real type according type member
CustomDataLayer() : CustomDataLayer() :
ElemBase(),
type(0), type(0),
offset(0), offset(0),
flag(0), flag(0),
@ -618,14 +641,21 @@ struct ModifierData : ElemBase {
}; };
std::shared_ptr<ElemBase> next WARN; std::shared_ptr<ElemBase> next WARN;
std::shared_ptr<ElemBase> prev WARN; std::weak_ptr<ElemBase> prev WARN;
int type, mode; int type, mode;
char name[32]; char name[32];
}; };
// ------------------------------------------------------------------------------------------------
struct SharedModifierData : ElemBase {
ModifierData modifier;
};
// ------------------------------------------------------------------------------- // -------------------------------------------------------------------------------
struct SubsurfModifierData : ElemBase { struct SubsurfModifierData : SharedModifierData {
enum Type { enum Type {
@ -638,7 +668,6 @@ struct SubsurfModifierData : ElemBase {
FLAGS_SubsurfUV = 1 << 3 FLAGS_SubsurfUV = 1 << 3
}; };
ModifierData modifier FAIL;
short subdivType WARN; short subdivType WARN;
short levels FAIL; short levels FAIL;
short renderLevels; short renderLevels;
@ -646,7 +675,7 @@ struct SubsurfModifierData : ElemBase {
}; };
// ------------------------------------------------------------------------------- // -------------------------------------------------------------------------------
struct MirrorModifierData : ElemBase { struct MirrorModifierData : SharedModifierData {
enum Flags { enum Flags {
Flags_CLIPPING = 1 << 0, Flags_CLIPPING = 1 << 0,
@ -658,11 +687,9 @@ struct MirrorModifierData : ElemBase {
Flags_VGROUP = 1 << 6 Flags_VGROUP = 1 << 6
}; };
ModifierData modifier FAIL;
short axis, flag; short axis, flag;
float tolerance; float tolerance;
std::shared_ptr<Object> mirror_ob; std::weak_ptr<Object> mirror_ob;
}; };
// ------------------------------------------------------------------------------- // -------------------------------------------------------------------------------
@ -701,7 +728,7 @@ struct Object : ElemBase {
ListBase modifiers; ListBase modifiers;
Object() : Object() :
ElemBase(), type(Type_EMPTY), parent(nullptr), track(), proxy(), proxy_from(), data() { type(Type_EMPTY), parent(nullptr) {
// empty // empty
} }
}; };
@ -713,8 +740,7 @@ struct Base : ElemBase {
std::shared_ptr<Object> object WARN; std::shared_ptr<Object> object WARN;
Base() : Base() :
ElemBase(), prev(nullptr), next(), object() { prev(nullptr) {
// empty
// empty // empty
} }
}; };
@ -726,13 +752,11 @@ struct Scene : ElemBase {
std::shared_ptr<Object> camera WARN; std::shared_ptr<Object> camera WARN;
std::shared_ptr<World> world WARN; std::shared_ptr<World> world WARN;
std::shared_ptr<Base> basact WARN; std::shared_ptr<Base> basact WARN;
std::shared_ptr<Collection> master_collection WARN;
ListBase base; ListBase base;
Scene() : Scene() = default;
ElemBase(), camera(), world(), basact() {
// empty
}
}; };
// ------------------------------------------------------------------------------- // -------------------------------------------------------------------------------
@ -762,10 +786,7 @@ struct Image : ElemBase {
short gen_x, gen_y, gen_type; short gen_x, gen_y, gen_type;
Image() : Image() = default;
ElemBase() {
// empty
}
}; };
// ------------------------------------------------------------------------------- // -------------------------------------------------------------------------------
@ -855,7 +876,7 @@ struct Tex : ElemBase {
//char use_nodes; //char use_nodes;
Tex() : Tex() :
ElemBase(), imaflag(ImageFlags_INTERPOL), type(Type_CLOUDS), ima() { imaflag(ImageFlags_INTERPOL), type(Type_CLOUDS) {
// empty // empty
} }
}; };
@ -947,10 +968,7 @@ struct MTex : ElemBase {
//float shadowfac; //float shadowfac;
//float zenupfac, zendownfac, blendfac; //float zenupfac, zendownfac, blendfac;
MTex() : MTex() = default;
ElemBase() {
// empty
}
}; };
} // namespace Blender } // namespace Blender

Some files were not shown because too many files have changed in this diff Show More