Compare commits

...
Sign in to create a new pull request.

67 commits

Author SHA1 Message Date
Fedora Release Engineering
9f9f1c36f2 Rebuilt for https://fedoraproject.org/wiki/Fedora_44_Mass_Rebuild 2026-01-16 04:03:06 +00:00
Sandro Mani
d70b66d8fe PyAssimp: Re-add 'aiProcess_Triangulate' (#2423174) 2025-12-27 19:11:41 +01:00
Sandro Mani
5cacab3fd7 Backport fix for CVE-2025-11277 2025-12-14 20:03:32 +01:00
Python Maint
3a13f18407 Rebuilt for Python 3.14.0rc3 bytecode 2025-09-19 12:09:52 +02:00
Sandro Mani
068be93c1c Fix pugixml::pugixml dependency ending up in link interface of assimp::assimp 2025-08-18 20:33:28 +02:00
Sandro Mani
4469c3c65b Update to 6.0.2 2025-08-18 11:06:53 +02:00
Python Maint
c9a5f7310c Rebuilt for Python 3.14.0rc2 bytecode 2025-08-15 12:38:44 +02:00
Fedora Release Engineering
4aa7296a0a Rebuilt for https://fedoraproject.org/wiki/Fedora_43_Mass_Rebuild 2025-07-23 17:21:27 +00:00
Python Maint
e99d3401b5 Rebuilt for Python 3.14 2025-06-03 14:28:26 +02:00
Rich Mattes
12cc8a4445 Add new patches 2025-03-15 21:27:34 -04:00
Rich Mattes
80fe326abc Update to release 5.4.3
Resolves: #2274012
2025-03-15 21:27:27 -04:00
Fedora Release Engineering
3a42df86a2 Rebuilt for https://fedoraproject.org/wiki/Fedora_42_Mass_Rebuild 2025-01-16 11:48:12 +00:00
Miroslav Suchý
b3fa9c1d57 convert license to SPDX
This is part of https://fedoraproject.org/wiki/Changes/SPDX_Licenses_Phase_4
2024-08-28 08:01:17 +02:00
Fedora Release Engineering
49901f8079 Rebuilt for https://fedoraproject.org/wiki/Fedora_41_Mass_Rebuild 2024-07-17 17:39:51 +00:00
Python Maint
8cd41a5618 Rebuilt for Python 3.13 2024-06-09 01:38:30 +02:00
Rich Mattes
5ef27d009c Update to release 5.3.1 2024-03-31 21:08:11 -04:00
Fedora Release Engineering
e5e96945e2 Rebuilt for https://fedoraproject.org/wiki/Fedora_40_Mass_Rebuild 2024-01-22 23:40:56 +00:00
Fedora Release Engineering
a47b41f26d Rebuilt for https://fedoraproject.org/wiki/Fedora_40_Mass_Rebuild 2024-01-19 13:45:25 +00:00
Scott K Logan
98ede03e7c Add pugixml and poly2tri devel dependencies to assimp-devel 2024-01-03 13:00:49 -06:00
Rich Mattes
41c8bc20b9 Update changelog for latest changes 2023-11-24 10:45:53 -05:00
Rich Mattes
c6758b2144 Fix versions
Fix library version and filter installed libraries by package version
and soversion.
2023-11-23 23:55:31 -05:00
Rich Mattes
814f62525c Enable unit tests
Enable unit tests and exclude unit tests that rely on non-free models.

Disable -Werror during build.

Incorporate stb_image minimum versions.
2023-11-23 23:43:10 -05:00
Scott K Logan
1170228628 Update to release 5.2.5 2023-07-28 15:00:08 -05:00
Fedora Release Engineering
1ac0cb353d Rebuilt for https://fedoraproject.org/wiki/Fedora_39_Mass_Rebuild
Signed-off-by: Fedora Release Engineering <releng@fedoraproject.org>
2023-07-19 13:58:22 +00:00
Python Maint
30ad66683b Rebuilt for Python 3.12 2023-06-13 23:27:02 +02:00
Fedora Release Engineering
760d443dae Rebuilt for https://fedoraproject.org/wiki/Fedora_38_Mass_Rebuild
Signed-off-by: Fedora Release Engineering <releng@fedoraproject.org>
2023-01-18 22:19:14 +00:00
Fedora Release Engineering
a119cb971f Rebuilt for https://fedoraproject.org/wiki/Fedora_37_Mass_Rebuild
Signed-off-by: Fedora Release Engineering <releng@fedoraproject.org>
2022-07-20 21:24:24 +00:00
Python Maint
0b9c80100d Rebuilt for Python 3.11 2022-06-13 19:53:07 +02:00
Benjamin A. Beasley
603f5dbba8 Drop BR on pkgconfig(zzip-zlib-config)
Dropped upstream in zziplib, and no longer available in F37+.

https://github.com/gdraheim/zziplib/issues/86#issuecomment-612961815
2022-04-23 13:43:38 -04:00
Benjamin A. Beasley
2fbf9e06a9 Security fix for CVE-2022-28041 2022-04-23 13:27:09 -04:00
Fedora Release Engineering
b25065f086 - Rebuilt for https://fedoraproject.org/wiki/Fedora_36_Mass_Rebuild
Signed-off-by: Fedora Release Engineering <releng@fedoraproject.org>
2022-01-19 21:48:10 +00:00
Rich Mattes
20482f2b12 Correct Unlicense shortname (rhbz#2036000) 2021-12-29 23:16:18 -05:00
Benjamin A. Beasley
33f0991ae3 Add -static BR’s for header-only libraries utf8cpp and rapidjson 2021-09-11 12:49:37 -04:00
Benjamin A. Beasley
b9d3cbace5 Unbundle stb_image 2021-09-11 12:37:12 -04:00
Benjamin A. Beasley
ef89f0abc0 Fix “error: changelog not in descending chronological order” 2021-09-11 12:37:12 -04:00
Rich Mattes
ea12704921 Merge branch 'epel8' into rawhide 2021-07-31 21:42:01 -04:00
Fedora Release Engineering
066ef04fce - Rebuilt for https://fedoraproject.org/wiki/Fedora_35_Mass_Rebuild
Signed-off-by: Fedora Release Engineering <releng@fedoraproject.org>
2021-07-21 18:05:19 +00:00
Fedora Release Engineering
11d75200c8 - Rebuilt for https://fedoraproject.org/wiki/Fedora_35_Mass_Rebuild
Signed-off-by: Fedora Release Engineering <releng@fedoraproject.org>
2021-07-21 13:09:21 +00:00
Python Maint
cb2670101d Rebuilt for Python 3.10 2021-06-04 19:59:35 +02:00
Rich Mattes
2a4a70ecb9 Fix library install dir specification (rhbz#1943862)
Remove un-needed build dependency on ILUT
2021-03-29 16:47:32 -04:00
Scott K Logan
7d2214ecba Add an upstream patch to fix imported library locations 2021-03-23 12:55:42 -07:00
Rich Mattes
951ad340be EPEL8 fixes
Remove build dep on unavailable pkgconfig(ILUT)

Update paths to utf8cpp utf8.h for older version in EPEL8
2021-03-07 20:43:46 -05:00
Rich Mattes
33de26c23b Add assimp-5.0.1 sources 2021-02-27 18:57:14 -05:00
Rich Mattes
04fd9a1170 Update to release 5.0 2021-02-27 18:55:13 -05:00
Fedora Release Engineering
37df57e17a - Rebuilt for https://fedoraproject.org/wiki/Fedora_34_Mass_Rebuild
Signed-off-by: Fedora Release Engineering <releng@fedoraproject.org>
2021-01-26 00:37:03 +00:00
Jeff Law
42edbb53f5 Fix minor C++17 issues 2020-08-18 15:42:13 -06:00
Rich Mattes
028704e098 Add patch to exclude build dir from doxygen 2020-08-08 17:52:14 -04:00
Rich Mattes
463ff348a4 Fix CMake macro FTBFS (rhbz#1863231) 2020-08-08 17:28:02 -04:00
Fedora Release Engineering
21b4583462 - Second attempt - Rebuilt for https://fedoraproject.org/wiki/Fedora_33_Mass_Rebuild
Signed-off-by: Fedora Release Engineering <releng@fedoraproject.org>
2020-08-01 00:04:07 +00:00
Fedora Release Engineering
e88e96e5d1 - Rebuilt for https://fedoraproject.org/wiki/Fedora_33_Mass_Rebuild
Signed-off-by: Fedora Release Engineering <releng@fedoraproject.org>
2020-07-27 12:35:06 +00:00
Miro Hrončok
4322cd006a Rebuilt for Python 3.9 2020-05-26 02:40:50 +02:00
Fedora Release Engineering
5c23ca982d - Rebuilt for https://fedoraproject.org/wiki/Fedora_32_Mass_Rebuild
Signed-off-by: Fedora Release Engineering <releng@fedoraproject.org>
2020-01-28 12:17:22 +00:00
Miro Hrončok
b6946fb354 Rebuilt for Python 3.8.0rc1 (#1748018) 2019-10-03 13:50:33 +02:00
Miro Hrončok
a1149c24bf Rebuilt for Python 3.8 2019-08-19 10:01:26 +02:00
Fedora Release Engineering
3f799c9906 - Rebuilt for https://fedoraproject.org/wiki/Fedora_31_Mass_Rebuild
Signed-off-by: Fedora Release Engineering <releng@fedoraproject.org>
2019-07-24 18:37:41 +00:00
Fedora Release Engineering
79a1733fe7 - Rebuilt for https://fedoraproject.org/wiki/Fedora_30_Mass_Rebuild
Signed-off-by: Fedora Release Engineering <releng@fedoraproject.org>
2019-01-31 13:59:01 +00:00
Igor Gnatenko
1f1b718371 Remove obsolete Group tag
References: https://fedoraproject.org/wiki/Changes/Remove_Group_Tag
2019-01-28 20:23:56 +01:00
Igor Gnatenko
7d43d0a5fc
Remove obsolete ldconfig scriptlets
References: https://fedoraproject.org/wiki/Changes/RemoveObsoleteScriptlets
Signed-off-by: Igor Gnatenko <ignatenkobrain@fedoraproject.org>
2019-01-22 18:38:32 +01:00
Miro Hrončok
ddec090613 Subpackage python2-assimp has been removed 2019-01-14 15:51:27 +01:00
Patrik Novotný
fb414da238 Update dependency to minizip-compat(-devel)
Related: rhbz#1609830, rhbz#1615381
2018-08-30 10:02:25 +02:00
Rich Mattes
aefa6cfa8d Update python macros 2018-07-19 14:29:43 -04:00
Rich Mattes
56fdc2c37d Add python requirements 2018-07-19 13:54:33 -04:00
Fedora Release Engineering
d52aa21924 - Rebuilt for https://fedoraproject.org/wiki/Fedora_29_Mass_Rebuild
Signed-off-by: Fedora Release Engineering <releng@fedoraproject.org>
2018-07-12 20:40:18 +00:00
Igor Gnatenko
3e62a91b4c add BuildRequires: gcc-c++
Reference: https://fedoraproject.org/wiki/Changes/Remove_GCC_from_BuildRoot
2018-07-09 19:06:42 +02:00
Miro Hrončok
6e3109cbaf Rebuilt for Python 3.7 2018-07-02 21:26:27 +02:00
Fedora Release Engineering
9f5dcf048d - Rebuilt for https://fedoraproject.org/wiki/Fedora_28_Mass_Rebuild
Signed-off-by: Fedora Release Engineering <releng@fedoraproject.org>
2018-02-07 03:06:14 +00:00
Troy Dawson
8482203cf0 Cleanup spec file conditionals 2017-10-02 15:12:22 -07:00
19 changed files with 691 additions and 1883 deletions

5
.gitignore vendored
View file

@ -4,3 +4,8 @@
/assimp-f849f6d9bd21efe802fa456184b1c3173e74a050-free.tar.bz2
/assimp-3.1.1_no_test_models.zip
/assimp-c318d648ff73aa2e32b783709d69740ac3e8c072-free.tar.bz2
/assimp-5.0.1-free.tar.xz
/assimp-5.2.5-free.tar.xz
/assimp-5.3.1-free.tar.xz
/assimp-5.4.3-free.tar.xz
/assimp-6.0.2-free.tar.xz

View file

@ -1,286 +0,0 @@
From a52bb1d9b030ee888ab44b8ad9a2a2b8ebb909a3 Mon Sep 17 00:00:00 2001
From: Helio Chissini de Castro <helio@kde.org>
Date: Thu, 27 Apr 2017 17:19:51 +0200
Subject: [PATCH] - Apply mechanism to decide use for IrrXML external or
internal
Several distributions usually decide for shared external libraries
instead of an usual embedded, for security reasons, duplicatiion issues.
This change enable the possibility to set SYSTEM_IRRXML=ON for detect
and build against a system installed irrxml.
By default, the internal copy is compiled.
Changes on build:
- Added a FindIrrXML cmake module.
- Moved the source recipe for proper CMakeLists inside contrib directory
- Includes aren't path based anymore, using the provided INCLUDE_DIR
- Compiler option are grouped in a singled entry on main CMakeLists
---
CMakeLists.txt | 88 +++++++++++++++++++++++++++++++++++-------
cmake-modules/FindIrrXML.cmake | 17 ++++++++
code/CMakeLists.txt | 20 +++-------
code/irrXMLWrapper.h | 6 +--
contrib/CMakeLists.txt | 4 ++
contrib/irrXML/CMakeLists.txt | 13 +++++++
6 files changed, 116 insertions(+), 32 deletions(-)
create mode 100644 cmake-modules/FindIrrXML.cmake
create mode 100644 contrib/CMakeLists.txt
create mode 100644 contrib/irrXML/CMakeLists.txt
diff --git a/CMakeLists.txt b/CMakeLists.txt
index 6989510..c2b3faa 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -39,7 +39,65 @@ SET(CMAKE_LEGACY_CYGWIN_WIN32 0) # Remove when CMake >= 2.8.4 is required
cmake_minimum_required( VERSION 2.8 )
PROJECT( Assimp )
-OPTION(BUILD_SHARED_LIBS "Build package with shared libraries." ON)
+# All supported options ###############################################
+OPTION( BUILD_SHARED_LIBS
+ "Build package with shared libraries."
+ ON
+)
+OPTION( ASSIMP_DOUBLE_PRECISION
+ "Set to ON to enable double precision processing"
+ OFF
+)
+OPTION( ASSIMP_OPT_BUILD_PACKAGES
+ "Set to ON to generate CPack configuration files and packaging targets"
+ OFF
+)
+OPTION( ASSIMP_ANDROID_JNIIOSYSTEM
+ "Android JNI IOSystem support is active"
+ OFF
+)
+OPTION( ASSIMP_NO_EXPORT
+ "Disable Assimp's export functionality."
+ OFF
+)
+OPTION( ASSIMP_BUILD_ZLIB
+ "Build your own zlib"
+ OFF
+)
+option( ASSIMP_BUILD_ASSIMP_TOOLS
+ "If the supplementary tools for Assimp are built in addition to the library."
+ ON
+)
+option ( ASSIMP_BUILD_SAMPLES
+ "If the official samples are built as well (needs Glut)."
+ OFF
+)
+OPTION ( ASSIMP_BUILD_TESTS
+ "If the test suite for Assimp is built in addition to the library."
+ ON
+)
+OPTION ( ASSIMP_COVERALLS
+ "Eańable this to measure test coverage."
+ OFF
+)
+
+option ( SYSTEM_IRRXML
+ "Use system installed Irrlicht/IrrXML library."
+ OFF
+)
+
+#OPTION ( BUILD_DOCS
+# "Build documentation using Doxygen."
+# OFF
+#)
+
+IF(MSVC)
+ set (CMAKE_PREFIX_PATH "D:\\libs\\devil")
+ OPTION( ASSIMP_INSTALL_PDB
+ "Install MSVC debug files."
+ ON
+ )
+ENDIF(MSVC)
IF(NOT BUILD_SHARED_LIBS)
SET(LINK_SEARCH_START_STATIC TRUE)
@@ -116,17 +174,17 @@ IF( UNIX )
include(GNUInstallDirs)
ENDIF( UNIX )
-IF((CMAKE_COMPILER_IS_GNUCC OR CMAKE_COMPILER_IS_GNUCXX) AND NOT CMAKE_COMPILER_IS_MINGW)
- IF (BUILD_SHARED_LIBS AND CMAKE_SIZEOF_VOID_P EQUAL 8) # -fPIC is only required for shared libs on 64 bit
- SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fPIC")
- ENDIF()
+# Grouped compiler settings
+IF ((CMAKE_C_COMPILER_ID MATCHES "GNU") AND NOT CMAKE_COMPILER_IS_MINGW)
# hide all not-exported symbols
- SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fvisibility=hidden -Wall -std=c++0x" )
+ SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -g -fvisibility=hidden -fPIC -Wall -std=c++0x" )
+ SET(LIBSTDC++_LIBRARIES -lstdc++)
+ SET(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -fPIC" )
ELSEIF(MSVC)
# enable multi-core compilation with MSVC
add_compile_options(/MP)
-ELSEIF ( "${CMAKE_CXX_COMPILER_ID}" STREQUAL "Clang" )
- set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fvisibility=hidden -Wall -Wno-long-long -pedantic -std=c++11" )
+ELSEIF ( "${CMAKE_CXX_COMPILER_ID}" MATCHES "Clang" )
+ set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -g -fvisibility=hidden -fPIC -Wall -Wno-long-long -pedantic -std=c++11" )
ELSEIF( CMAKE_COMPILER_IS_MINGW )
SET( CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fvisibility=hidden -Wall -Wno-long-long -pedantic -std=c++11" )
ENDIF()
@@ -176,14 +233,14 @@ install(FILES "${CMAKE_CURRENT_BINARY_DIR}/assimp-config.cmake" "${C
FIND_PACKAGE( DirectX )
-OPTION ( ASSIMP_NO_EXPORT
- "Disable Assimp's export functionality."
- OFF
-)
+#IF( BUILD_DOCS )
+# add_subdirectory(doc)
+#ENDIF( BUILD_DOCS )
-IF( CMAKE_COMPILER_IS_GNUCXX )
- SET(LIBSTDC++_LIBRARIES -lstdc++)
-ENDIF( CMAKE_COMPILER_IS_GNUCXX )
+# Look for system installed irrXML
+IF ( SYSTEM_IRRXML )
+ find_package( IrrXML REQUIRED )
+ENDIF( SYSTEM_IRRXML )
# Search for external dependencies, and build them from source if not found
# Search for zlib
@@ -287,6 +344,7 @@ ELSE (ASSIMP_BUILD_NONFREE_C4D_IMPORTER)
ADD_DEFINITIONS( -DASSIMP_BUILD_NO_C4D_IMPORTER )
ENDIF (ASSIMP_BUILD_NONFREE_C4D_IMPORTER)
+ADD_SUBDIRECTORY(contrib)
ADD_SUBDIRECTORY( code/ )
option ( ASSIMP_BUILD_ASSIMP_TOOLS
diff --git a/cmake-modules/FindIrrXML.cmake b/cmake-modules/FindIrrXML.cmake
new file mode 100644
index 0000000..5434e0b
--- /dev/null
+++ b/cmake-modules/FindIrrXML.cmake
@@ -0,0 +1,17 @@
+# 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)
diff --git a/code/CMakeLists.txt b/code/CMakeLists.txt
index 35ecf50..52073d1 100644
--- a/code/CMakeLists.txt
+++ b/code/CMakeLists.txt
@@ -542,6 +542,9 @@ SET( PostProcessing_SRCS
)
SOURCE_GROUP( PostProcessing FILES ${PostProcessing_SRCS})
+SET( IrrXML_SRCS irrXMLWrapper.h )
+SOURCE_GROUP( IrrXML FILES ${IrrXML_SRCS})
+
ADD_ASSIMP_IMPORTER( Q3D
Q3DLoader.cpp
Q3DLoader.h
@@ -637,18 +640,6 @@ SET( Extra_SRCS
)
SOURCE_GROUP( Extra FILES ${Extra_SRCS})
-SET( IrrXML_SRCS
- irrXMLWrapper.h
- ../contrib/irrXML/CXMLReaderImpl.h
- ../contrib/irrXML/heapsort.h
- ../contrib/irrXML/irrArray.h
- ../contrib/irrXML/irrString.h
- ../contrib/irrXML/irrTypes.h
- ../contrib/irrXML/irrXML.cpp
- ../contrib/irrXML/irrXML.h
-)
-SOURCE_GROUP( IrrXML FILES ${IrrXML_SRCS})
-
SET( ConvertUTF_SRCS
../contrib/ConvertUTF/ConvertUTF.h
../contrib/ConvertUTF/ConvertUTF.c
@@ -756,7 +747,8 @@ SET( assimp_src
ADD_DEFINITIONS( -DOPENDDLPARSER_BUILD )
INCLUDE_DIRECTORIES(
- ../contrib/openddlparser/include
+ ${IRRXML_INCLUDE_DIR}
+ ../contrib/openddlparser/include
)
IF (ASSIMP_BUILD_NONFREE_C4D_IMPORTER)
@@ -766,7 +758,7 @@ ENDIF (ASSIMP_BUILD_NONFREE_C4D_IMPORTER)
ADD_LIBRARY( assimp ${assimp_src} )
-TARGET_LINK_LIBRARIES(assimp ${ZLIB_LIBRARIES} ${OPENDDL_PARSER_LIBRARIES} )
+TARGET_LINK_LIBRARIES(assimp ${ZLIB_LIBRARIES} ${OPENDDL_PARSER_LIBRARIES} ${IRRXML_LIBRARY} )
if(ANDROID AND ASSIMP_ANDROID_JNIIOSYSTEM)
set(ASSIMP_ANDROID_JNIIOSYSTEM_PATH port/AndroidJNI)
diff --git a/code/irrXMLWrapper.h b/code/irrXMLWrapper.h
index 41e4188..9d96456 100644
--- a/code/irrXMLWrapper.h
+++ b/code/irrXMLWrapper.h
@@ -42,7 +42,7 @@ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
#define INCLUDED_AI_IRRXML_WRAPPER
// some long includes ....
-#include "./../contrib/irrXML/irrXML.h"
+#include <irrXML.h>
#include "./../include/assimp/IOStream.hpp"
#include "BaseImporter.h"
#include <vector>
@@ -128,8 +128,8 @@ public:
// ----------------------------------------------------------------------------------
//! Returns size of file in bytes
- virtual int getSize() {
- return (int)data.size();
+ virtual long getSize() const {
+ return (long)data.size();
}
private:
diff --git a/contrib/CMakeLists.txt b/contrib/CMakeLists.txt
new file mode 100644
index 0000000..362f165
--- /dev/null
+++ b/contrib/CMakeLists.txt
@@ -0,0 +1,4 @@
+# Compile internal irrXML only if system is not requested
+if( NOT SYSTEM_IRRXML )
+ add_subdirectory(irrXML)
+endif( NOT SYSTEM_IRRXML )
diff --git a/contrib/irrXML/CMakeLists.txt b/contrib/irrXML/CMakeLists.txt
new file mode 100644
index 0000000..82ede3a
--- /dev/null
+++ b/contrib/irrXML/CMakeLists.txt
@@ -0,0 +1,13 @@
+set( IrrXML_SRCS
+ CXMLReaderImpl.h
+ heapsort.h
+ irrArray.h
+ irrString.h
+ irrTypes.h
+ irrXML.cpp
+ irrXML.h
+)
+
+add_library(IrrXML STATIC ${IrrXML_SRCS})
+set(IRRXML_INCLUDE_DIR "${CMAKE_CURRENT_SOURCE_DIR}" CACHE INTERNAL "IrrXML_Include" )
+set(IRRXML_LIBRARY "IrrXML" CACHE INTERNAL "IrrXML" )
--
2.9.3

View file

@ -1,39 +0,0 @@
From 584a0923a3c78304974eb05930fbb908edbc8c8c Mon Sep 17 00:00:00 2001
From: Helio Chissini de Castro <helio@kde.org>
Date: Tue, 18 Apr 2017 19:21:30 +0200
Subject: [PATCH] Assimp cmake provider fix
---
assimp-config.cmake.in | 9 +++------
1 file changed, 3 insertions(+), 6 deletions(-)
diff --git a/assimp-config.cmake.in b/assimp-config.cmake.in
index e06cc10..9224b9b 100644
--- a/assimp-config.cmake.in
+++ b/assimp-config.cmake.in
@@ -10,10 +10,7 @@
# ASSIMP_LIBRARY_DIRS - link directories
# ASSIMP_LIBRARIES - libraries to link plugins with
# ASSIMP_Boost_VERSION - the boost version assimp was compiled with
-get_filename_component(_PREFIX "${CMAKE_CURRENT_LIST_FILE}" PATH)
-get_filename_component(_PREFIX "${_PREFIX}" PATH)
-get_filename_component(_PREFIX "${_PREFIX}" PATH)
-get_filename_component(ASSIMP_ROOT_DIR "${_PREFIX}" PATH)
+set(ASSIMP_ROOT_DIR "@CMAKE_INSTALL_PREFIX@")
if( MSVC )
# in order to prevent DLL hell, each of the DLLs have to be suffixed with the major version and msvc prefix
@@ -45,8 +42,8 @@ if( WIN32 )
set( ASSIMP_CXX_FLAGS " -DBOOST_ALL_DYN_LINK -DBOOST_ALL_NO_LIB")
endif()
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@")
+set( ASSIMP_LIBRARY_DIRS "@ASSIMP_LIB_INSTALL_DIR@")
+set( ASSIMP_INCLUDE_DIRS "@ASSIMP_INCLUDE_INSTALL_DIR@")
set( ASSIMP_LIBRARIES assimp${ASSIMP_LIBRARY_SUFFIX})
set( ASSIMP_LIBRARIES ${ASSIMP_LIBRARIES}@CMAKE_DEBUG_POSTFIX@)
--
2.9.3

View file

@ -1,221 +0,0 @@
From c63f886c9d12b88fc65afcd379bb086984dd44c2 Mon Sep 17 00:00:00 2001
From: Helio Chissini de Castro <helio@kde.org>
Date: Tue, 18 Apr 2017 14:51:17 +0200
Subject: [PATCH] Enable doxygen been properly used from cmake build and
install.
Current documentation lacks a proper directory handling and switch for
Unix like systems.
The option BUILD_DOCS are added as disable by default, even so the
Doxyfile file is generated for a manual build.
Option HTML_OUTPUT are made cached to be properly replaced, as usually
done by some Linux distributions
Microsoft CHM option is enabled if MSVC is detected.
---
CMakeLists.txt | 11 ++++++++++
doc/CMakeLists.txt | 47 +++++++++++++++++++++++++++++++++++++++++++
doc/{Doxyfile => Doxyfile.in} | 46 ++++++++++--------------------------------
3 files changed, 69 insertions(+), 35 deletions(-)
create mode 100644 doc/CMakeLists.txt
rename doc/{Doxyfile => Doxyfile.in} (98%)
diff --git a/CMakeLists.txt b/CMakeLists.txt
index 8455bb8..6989510 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -40,6 +40,7 @@ cmake_minimum_required( VERSION 2.8 )
PROJECT( Assimp )
OPTION(BUILD_SHARED_LIBS "Build package with shared libraries." ON)
+
IF(NOT BUILD_SHARED_LIBS)
SET(LINK_SEARCH_START_STATIC TRUE)
ENDIF(NOT BUILD_SHARED_LIBS)
@@ -58,6 +59,12 @@ SET(ASSIMP_PACKAGE_VERSION "0" CACHE STRING "the package-specific version used f
add_definitions( -DOPENDDL_NO_USE_CPP11 )
set_property( GLOBAL PROPERTY CXX_STANDARD 11 )
+OPTION ( BUILD_DOCS
+ "Build documentation using Doxygen."
+ OFF
+)
+add_subdirectory(doc)
+
# Get the current working branch
EXECUTE_PROCESS(
COMMAND git rev-parse --abbrev-ref HEAD
@@ -105,6 +112,10 @@ IF( CMAKE_COMPILER_IS_MINGW )
ADD_DEFINITIONS(-DASSIMP_BUILD_NO_IFC_IMPORTER )
ENDIF()
+IF( UNIX )
+ include(GNUInstallDirs)
+ENDIF( UNIX )
+
IF((CMAKE_COMPILER_IS_GNUCC OR CMAKE_COMPILER_IS_GNUCXX) AND NOT CMAKE_COMPILER_IS_MINGW)
IF (BUILD_SHARED_LIBS AND CMAKE_SIZEOF_VOID_P EQUAL 8) # -fPIC is only required for shared libs on 64 bit
SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fPIC")
diff --git a/doc/CMakeLists.txt b/doc/CMakeLists.txt
new file mode 100644
index 0000000..0ad04cf
--- /dev/null
+++ b/doc/CMakeLists.txt
@@ -0,0 +1,51 @@
+# Only test for Doxygent if BUILD_DOCS are ON
+# We will configure Doxygen output anyway in case
+# of manual generation
+if( BUILD_DOCS )
+ find_package( Doxygen REQUIRED )
+endif( BUILD_DOCS )
+
+set( HTML_OUTPUT "AssimpDoc_Html" CACHE STRING "Output directory for generated HTML documentation. Defaults to AssimpDoc_Html." )
+
+# Enable Microsoft CHM help style only on Windows
+set( MICROSOFT_HELP_WORKSHOP "NO")
+if( MSVC )
+ set( MICROSOFT_HELP_WORKSHOP "YES" )
+endif( MSVC )
+
+configure_file(
+ ${CMAKE_CURRENT_SOURCE_DIR}/Doxyfile.in
+ ${CMAKE_CURRENT_BINARY_DIR}/Doxyfile
+ @ONLY
+)
+
+add_custom_target(
+ docs ALL
+ DEPENDS docs.done
+)
+
+add_custom_command(
+ OUTPUT docs.done
+ COMMAND ${DOXYGEN_EXECUTABLE}
+ COMMAND ${CMAKE_COMMAND} -E touch docs.done
+ COMMENT "Generating assimp documentation"
+ VERBATIM
+ )
+
+IF( UNIX )
+ include(GNUInstallDirs)
+ENDIF( UNIX )
+
+if( DEFINED CMAKE_INSTALL_DOCDIR )
+ install(
+ DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/${HTML_OUTPUT}
+ DESTINATION ${CMAKE_INSTALL_DOCDIR}
+ )
+ install(FILES
+ ${CMAKE_CURRENT_SOURCE_DIR}/AssimpDoc_Html/AnimationOverview.png
+ ${CMAKE_CURRENT_SOURCE_DIR}/AssimpDoc_Html/AnimationOverview.svg
+ ${CMAKE_CURRENT_SOURCE_DIR}/AssimpDoc_Html/dragonsplash.png
+ DESTINATION ${CMAKE_INSTALL_DOCDIR}/${HTML_OUTPUT}
+ )
+endif( DEFINED CMAKE_INSTALL_DOCDIR )
+
diff --git a/doc/Doxyfile b/doc/Doxyfile.in
similarity index 98%
rename from doc/Doxyfile
rename to doc/Doxyfile.in
index 64dd5d2..ebb6b72 100644
--- a/doc/Doxyfile
+++ b/doc/Doxyfile.in
@@ -140,7 +140,8 @@ FULL_PATH_NAMES = NO
# relative paths, which will be relative from the directory where doxygen is
# started.
-STRIP_FROM_PATH =
+STRIP_FROM_PATH = @PROJECT_SOURCE_DIR@ \
+ @PROJECT_BINARY_DIR@
# The STRIP_FROM_INC_PATH tag can be used to strip a user-defined part of
# the path mentioned in the documentation of a class, which tells
@@ -339,22 +340,6 @@ INLINE_SIMPLE_STRUCTS = NO
TYPEDEF_HIDES_STRUCT = YES
-# The SYMBOL_CACHE_SIZE determines the size of the internal cache use to
-# determine which symbols to keep in memory and which to flush to disk.
-# When the cache is full, less often used symbols will be written to disk.
-# For small to medium size projects (<1000 input files) the default value is
-# probably good enough. For larger projects a too small cache size can cause
-# doxygen to be busy swapping symbols to and from disk most of the time
-# causing a significant performance penalty.
-# If the system has enough physical memory increasing the cache will improve the
-# performance by keeping more symbols in memory. Note that the value works on
-# a logarithmic scale so increasing the size by one will roughly double the
-# memory usage. The cache size is given by this formula:
-# 2^(16+SYMBOL_CACHE_SIZE). The valid range is 0..9, the default is 0,
-# corresponding to a cache size of 2^16 = 65536 symbols.
-
-SYMBOL_CACHE_SIZE = 0
-
# Similar to the SYMBOL_CACHE_SIZE the size of the symbol lookup cache can be
# set using LOOKUP_CACHE_SIZE. This cache is used to resolve symbols given
# their name and scope. Since this can be an expensive process and often the
@@ -677,9 +662,12 @@ WARN_LOGFILE =
# directories like "/usr/src/myproject". Separate the files or directories
# with spaces.
-INPUT = ../include/ \
- ../doc/dox.h \
- ../code/BaseImporter.h
+INPUT = @doxy_main_page@ \
+ @PROJECT_SOURCE_DIR@ \
+ @PROJECT_BINARY_DIR@ \
+ @PROJECT_SOURCE_DIR@/include/ \
+ @PROJECT_SOURCE_DIR@/doc/dox.h \
+ @PROJECT_SOURCE_DIR@/code/BaseImporter.h
# This tag can be used to specify the character encoding of the source files
# that doxygen parses. Internally doxygen uses the UTF-8 encoding, which is
@@ -919,7 +907,7 @@ GENERATE_HTML = YES
# If a relative path is entered the value of OUTPUT_DIRECTORY will be
# put in front of it. If left blank `html' will be used as the default path.
-HTML_OUTPUT = AssimpDoc_Html
+HTML_OUTPUT = @HTML_OUTPUT@
# The HTML_FILE_EXTENSION tag can be used to specify the file extension for
# each generated HTML page (for example: .htm,.php,.asp). If it is left blank
@@ -953,7 +941,7 @@ HTML_FOOTER =
# HTML_EXTRA_STYLESHEET instead of this one, as it is more robust and this
# tag will in the future become obsolete.
-HTML_STYLESHEET = style.css
+# HTML_STYLESHEET = @CMAKE_CURRENT_SOURCE_DIR@/style.css
# The HTML_EXTRA_STYLESHEET tag can be used to specify an additional
# user-defined cascading style sheet that is included after the standard
@@ -1064,7 +1052,7 @@ DOCSET_PUBLISHER_NAME = Publisher
# Microsoft HTML help workshop to generate a compiled HTML help file (.chm)
# of the generated HTML documentation.
-GENERATE_HTMLHELP = YES
+GENERATE_HTMLHELP = @MICROSOFT_HELP_WORKSHOP@
# If the GENERATE_HTMLHELP tag is set to YES, the CHM_FILE tag can
# be used to specify the file name of the resulting .chm file. You
@@ -1504,18 +1492,6 @@ GENERATE_XML = NO
XML_OUTPUT = xml
-# The XML_SCHEMA tag can be used to specify an XML schema,
-# which can be used by a validating XML parser to check the
-# syntax of the XML files.
-
-XML_SCHEMA =
-
-# The XML_DTD tag can be used to specify an XML DTD,
-# which can be used by a validating XML parser to check the
-# syntax of the XML files.
-
-XML_DTD =
-
# If the XML_PROGRAMLISTING tag is set to YES Doxygen will
# dump the program listings (including syntax highlighting
# and cross-referencing information) to the XML output. Note that
--
2.9.3

View file

@ -1,966 +0,0 @@
From 42e353f2a672baed485c03acf30529c77092ece9 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Antti=20M=C3=A4=C3=A4tt=C3=A4?= <antti.maatta@qt.io>
Date: Thu, 12 Jan 2017 13:41:32 +0200
Subject: [PATCH] Morph animation support for collada
---
code/CMakeLists.txt | 2 +
code/ColladaHelper.h | 31 +++++
code/ColladaLoader.cpp | 310 ++++++++++++++++++++++++++++++++++++++++++------
code/ColladaLoader.h | 5 +
code/ColladaParser.cpp | 48 +++++++-
code/CreateAnimMesh.cpp | 92 ++++++++++++++
code/CreateAnimMesh.h | 56 +++++++++
include/assimp/anim.h | 95 +++++++++++++--
include/assimp/mesh.h | 36 +++++-
9 files changed, 623 insertions(+), 52 deletions(-)
create mode 100644 code/CreateAnimMesh.cpp
create mode 100644 code/CreateAnimMesh.h
diff --git a/code/CMakeLists.txt b/code/CMakeLists.txt
index 35ecf50..e0747d6 100644
--- a/code/CMakeLists.txt
+++ b/code/CMakeLists.txt
@@ -171,6 +171,8 @@ SET( Common_SRCS
Bitmap.h
XMLTools.h
Version.cpp
+ CreateAnimMesh.h
+ CreateAnimMesh.cpp
)
SOURCE_GROUP(Common FILES ${Common_SRCS})
diff --git a/code/ColladaHelper.h b/code/ColladaHelper.h
index 5a51642..5ff4904 100644
--- a/code/ColladaHelper.h
+++ b/code/ColladaHelper.h
@@ -89,6 +89,21 @@ enum InputType
IT_Bitangent
};
+/** Supported controller types */
+enum ControllerType
+{
+ Skin,
+ Morph
+};
+
+/** Supported morph methods */
+enum MorphMethod
+{
+ Normalized,
+ Relative
+};
+
+
/** Contains all data for one of the different transformation types */
struct Transform
{
@@ -380,6 +395,12 @@ enum PrimitiveType
/** A skeleton controller to deform a mesh with the use of joints */
struct Controller
{
+ // controller type
+ ControllerType mType;
+
+ // Morphing method if type is Morph
+ MorphMethod mMethod;
+
// the URL of the mesh deformed by the controller.
std::string mMeshId;
@@ -402,6 +423,9 @@ struct Controller
// JointIndex-WeightIndex pairs for all vertices
std::vector< std::pair<size_t, size_t> > mWeights;
+
+ std::string mMorphTarget;
+ std::string mMorphWeight;
};
/** A collada material. Pretty much the only member is a reference to an effect. */
@@ -577,6 +601,12 @@ struct AnimationChannel
std::string mSourceTimes;
/** Source URL of the value values. Collada calls them "output". */
std::string mSourceValues;
+ /** Source URL of the IN_TANGENT semantic values. */
+ std::string mInTanValues;
+ /** Source URL of the OUT_TANGENT semantic values. */
+ std::string mOutTanValues;
+ /** Source URL of the INTERPOLATION semantic values. */
+ std::string mInterpolationValues;
};
/** An animation. Container for 0-x animation channels or 0-x animations */
@@ -645,6 +675,7 @@ struct Animation
struct ChannelEntry
{
const Collada::AnimationChannel* mChannel; ///> the source channel
+ std::string mTargetId;
std::string mTransformId; // the ID of the transformation step of the node which is influenced
size_t mTransformIndex; // Index into the node's transform chain to apply the channel to
size_t mSubElement; // starting index inside the transform data
diff --git a/code/ColladaLoader.cpp b/code/ColladaLoader.cpp
index 6cc0f85..a3b6d6e 100644
--- a/code/ColladaLoader.cpp
+++ b/code/ColladaLoader.cpp
@@ -55,6 +55,7 @@ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
#include "ParsingUtils.h"
#include "SkeletonMeshBuilder.h"
#include "Defines.h"
+#include "CreateAnimMesh.h"
#include "time.h"
#include "math.h"
@@ -148,6 +149,7 @@ void ColladaLoader::InternReadFile( const std::string& pFile, aiScene* pScene, I
mMeshIndexByID.clear();
mMaterialIndexByName.clear();
mMeshes.clear();
+ mTargetMeshes.clear();
newMats.clear();
mLights.clear();
mCameras.clear();
@@ -562,6 +564,21 @@ void ColladaLoader::BuildMeshesForNode( const ColladaParser& pParser, const Coll
}
// ------------------------------------------------------------------------------------------------
+// Find mesh from either meshes or morph target meshes
+aiMesh *ColladaLoader::findMesh(std::string meshid)
+{
+ for (unsigned int i = 0; i < mMeshes.size(); i++)
+ if (std::string(mMeshes[i]->mName.data) == meshid)
+ return mMeshes[i];
+
+ for (unsigned int i = 0; i < mTargetMeshes.size(); i++)
+ if (std::string(mTargetMeshes[i]->mName.data) == meshid)
+ return mTargetMeshes[i];
+
+ return NULL;
+}
+
+// ------------------------------------------------------------------------------------------------
// Creates a mesh for the given ColladaMesh face subset and returns the newly created mesh
aiMesh* ColladaLoader::CreateMesh( const ColladaParser& pParser, const Collada::Mesh* pSrcMesh, const Collada::SubMesh& pSubMesh,
const Collada::Controller* pSrcController, size_t pStartVertex, size_t pStartFace)
@@ -646,8 +663,70 @@ aiMesh* ColladaLoader::CreateMesh( const ColladaParser& pParser, const Collada::
face.mIndices[b] = vertex++;
}
+ // create morph target meshes if any
+ std::vector<aiMesh*> targetMeshes;
+ std::vector<float> targetWeights;
+ Collada::MorphMethod method;
+
+ for(std::map<std::string, Collada::Controller>::const_iterator it = pParser.mControllerLibrary.begin();
+ it != pParser.mControllerLibrary.end(); it++)
+ {
+ const Collada::Controller &c = it->second;
+ const Collada::Mesh* baseMesh = pParser.ResolveLibraryReference( pParser.mMeshLibrary, c.mMeshId);
+
+ if (c.mType == Collada::Morph && baseMesh->mName == pSrcMesh->mName)
+ {
+ const Collada::Accessor& targetAccessor = pParser.ResolveLibraryReference( pParser.mAccessorLibrary, c.mMorphTarget);
+ const Collada::Accessor& weightAccessor = pParser.ResolveLibraryReference( pParser.mAccessorLibrary, c.mMorphWeight);
+ const Collada::Data& targetData = pParser.ResolveLibraryReference( pParser.mDataLibrary, targetAccessor.mSource);
+ const Collada::Data& weightData = pParser.ResolveLibraryReference( pParser.mDataLibrary, weightAccessor.mSource);
+
+ // take method
+ method = c.mMethod;
+
+ if (!targetData.mIsStringArray)
+ throw DeadlyImportError( "target data must contain id. ");
+ if (weightData.mIsStringArray)
+ throw DeadlyImportError( "target weight data must not be textual ");
+
+ for (unsigned int i = 0; i < targetData.mStrings.size(); ++i)
+ {
+ const Collada::Mesh* targetMesh = pParser.ResolveLibraryReference(pParser.mMeshLibrary, targetData.mStrings.at(i));
+
+ aiMesh *aimesh = findMesh(targetMesh->mName);
+ if (!aimesh)
+ {
+ if (targetMesh->mSubMeshes.size() > 1)
+ throw DeadlyImportError( "Morhing target mesh must be a single");
+ aimesh = CreateMesh(pParser, targetMesh, targetMesh->mSubMeshes.at(0), NULL, 0, 0);
+ mTargetMeshes.push_back(aimesh);
+ }
+ targetMeshes.push_back(aimesh);
+ }
+ for (unsigned int i = 0; i < weightData.mValues.size(); ++i)
+ targetWeights.push_back(weightData.mValues.at(i));
+ }
+ }
+ if (targetMeshes.size() > 0 && targetWeights.size() == targetMeshes.size())
+ {
+ std::vector<aiAnimMesh*> animMeshes;
+ for (unsigned int i = 0; i < targetMeshes.size(); i++)
+ {
+ aiAnimMesh *animMesh = aiCreateAnimMesh(targetMeshes.at(i));
+ animMesh->mWeight = targetWeights[i];
+ animMeshes.push_back(animMesh);
+ }
+ dstMesh->mMethod = (method == Collada::Relative)
+ ? aiMorphingMethod_MORPH_RELATIVE
+ : aiMorphingMethod_MORPH_NORMALIZED;
+ dstMesh->mAnimMeshes = new aiAnimMesh*[animMeshes.size()];
+ dstMesh->mNumAnimMeshes = animMeshes.size();
+ for (unsigned int i = 0; i < animMeshes.size(); i++)
+ dstMesh->mAnimMeshes[i] = animMeshes.at(i);
+ }
+
// create bones if given
- if( pSrcController)
+ if( pSrcController && pSrcController->mType == Collada::Skin)
{
// refuse if the vertex count does not match
// if( pSrcController->mWeightCounts.size() != dstMesh->mNumVertices)
@@ -946,6 +1025,68 @@ void ColladaLoader::StoreAnimations( aiScene* pScene, const ColladaParser& pPars
CreateAnimation( pScene, pParser, pSrcAnim, animName);
}
+struct MorphTimeValues
+{
+ float mTime;
+ struct key
+ {
+ float mWeight;
+ unsigned int mValue;
+ };
+ std::vector<key> mKeys;
+};
+
+void insertMorphTimeValue(std::vector<MorphTimeValues> &values, float time, float weight, unsigned int value)
+{
+ MorphTimeValues::key k;
+ k.mValue = value;
+ k.mWeight = weight;
+ if (values.size() == 0 || time < values[0].mTime)
+ {
+ MorphTimeValues val;
+ val.mTime = time;
+ val.mKeys.push_back(k);
+ values.insert(values.begin(), val);
+ return;
+ }
+ if (time > values.back().mTime)
+ {
+ MorphTimeValues val;
+ val.mTime = time;
+ val.mKeys.push_back(k);
+ values.insert(values.end(), val);
+ return;
+ }
+ for (unsigned int i = 0; i < values.size(); i++)
+ {
+ if (std::abs(time - values[i].mTime) < 1e-6f)
+ {
+ values[i].mKeys.push_back(k);
+ return;
+ } else if (time > values[i].mTime && time < values[i+1].mTime)
+ {
+ MorphTimeValues val;
+ val.mTime = time;
+ val.mKeys.push_back(k);
+ values.insert(values.begin() + i, val);
+ return;
+ }
+ }
+ // should not get here
+}
+
+float getWeightAtKey(const std::vector<MorphTimeValues> &values, int key, unsigned int value)
+{
+ for (unsigned int i = 0; i < values[key].mKeys.size(); i++)
+ {
+ if (values[key].mKeys[i].mValue == value)
+ return values[key].mKeys[i].mWeight;
+ }
+ // no value at key found, try to interpolate if present at other keys. if not, return zero
+ // TODO: interpolation
+ return 0.0f;
+}
+
// ------------------------------------------------------------------------------------------------
// Constructs the animation for the given source anim
void ColladaLoader::CreateAnimation( aiScene* pScene, const ColladaParser& pParser, const Collada::Animation* pSrcAnim, const std::string& pName)
@@ -955,6 +1096,8 @@ void ColladaLoader::CreateAnimation( aiScene* pScene, const ColladaParser& pPars
CollectNodes( pScene->mRootNode, nodes);
std::vector<aiNodeAnim*> anims;
+ std::vector<aiMeshMorphAnim*> morphAnims;
+
for( std::vector<const aiNode*>::const_iterator nit = nodes.begin(); nit != nodes.end(); ++nit)
{
// find all the collada anim channels which refer to the current node
@@ -978,7 +1121,20 @@ void ColladaLoader::CreateAnimation( aiScene* pScene, const ColladaParser& pPars
// find the slash that separates the node name - there should be only one
std::string::size_type slashPos = srcChannel.mTarget.find( '/');
if( slashPos == std::string::npos)
+ {
+ std::string::size_type targetPos = srcChannel.mTarget.find(srcNode->mID);
+ if (targetPos == std::string::npos)
+ continue;
+
+ // not node transform, but something else. store as unknown animation channel for now
+ entry.mChannel = &(*cit);
+ entry.mTargetId = srcChannel.mTarget.substr(targetPos + pSrcAnim->mName.length(),
+ srcChannel.mTarget.length() - targetPos - pSrcAnim->mName.length());
+ if (entry.mTargetId.front() == '-')
+ entry.mTargetId = entry.mTargetId.substr(1);
+ entries.push_back(entry);
continue;
+ }
if( srcChannel.mTarget.find( '/', slashPos+1) != std::string::npos)
continue;
std::string targetID = srcChannel.mTarget.substr( 0, slashPos);
@@ -1058,8 +1214,14 @@ void ColladaLoader::CreateAnimation( aiScene* pScene, const ColladaParser& pPars
if( srcNode->mTransforms[a].mID == entry.mTransformId)
entry.mTransformIndex = a;
- if( entry.mTransformIndex == SIZE_MAX) {
- continue;
+ if( entry.mTransformIndex == SIZE_MAX)
+ {
+ if (entry.mTransformId.find("morph-weights") != std::string::npos)
+ {
+ entry.mTargetId = entry.mTransformId;
+ entry.mTransformId = "";
+ } else
+ continue;
}
entry.mChannel = &(*cit);
@@ -1203,49 +1365,125 @@ void ColladaLoader::CreateAnimation( aiScene* pScene, const ColladaParser& pPars
// ai_assert( resultTrafos.size() > 0);
// build an animation channel for the given node out of these trafo keys
- if( !resultTrafos.empty() )
- {
- aiNodeAnim* dstAnim = new aiNodeAnim;
- dstAnim->mNodeName = nodeName;
- dstAnim->mNumPositionKeys = resultTrafos.size();
- dstAnim->mNumRotationKeys= resultTrafos.size();
- dstAnim->mNumScalingKeys = resultTrafos.size();
- dstAnim->mPositionKeys = new aiVectorKey[resultTrafos.size()];
- dstAnim->mRotationKeys = new aiQuatKey[resultTrafos.size()];
- dstAnim->mScalingKeys = new aiVectorKey[resultTrafos.size()];
-
- for( size_t a = 0; a < resultTrafos.size(); ++a)
- {
- aiMatrix4x4 mat = resultTrafos[a];
- double time = double( mat.d4); // remember? time is stored in mat.d4
- mat.d4 = 1.0f;
-
- dstAnim->mPositionKeys[a].mTime = time;
- dstAnim->mRotationKeys[a].mTime = time;
- dstAnim->mScalingKeys[a].mTime = time;
- mat.Decompose( dstAnim->mScalingKeys[a].mValue, dstAnim->mRotationKeys[a].mValue, dstAnim->mPositionKeys[a].mValue);
- }
+ if( !resultTrafos.empty() )
+ {
+ aiNodeAnim* dstAnim = new aiNodeAnim;
+ dstAnim->mNodeName = nodeName;
+ dstAnim->mNumPositionKeys = resultTrafos.size();
+ dstAnim->mNumRotationKeys= resultTrafos.size();
+ dstAnim->mNumScalingKeys = resultTrafos.size();
+ dstAnim->mPositionKeys = new aiVectorKey[resultTrafos.size()];
+ dstAnim->mRotationKeys = new aiQuatKey[resultTrafos.size()];
+ dstAnim->mScalingKeys = new aiVectorKey[resultTrafos.size()];
+
+ for( size_t a = 0; a < resultTrafos.size(); ++a)
+ {
+ aiMatrix4x4 mat = resultTrafos[a];
+ double time = double( mat.d4); // remember? time is stored in mat.d4
+ mat.d4 = 1.0f;
+
+ dstAnim->mPositionKeys[a].mTime = time;
+ dstAnim->mRotationKeys[a].mTime = time;
+ dstAnim->mScalingKeys[a].mTime = time;
+ mat.Decompose( dstAnim->mScalingKeys[a].mValue, dstAnim->mRotationKeys[a].mValue, dstAnim->mPositionKeys[a].mValue);
+ }
- anims.push_back( dstAnim);
- } else
- {
- DefaultLogger::get()->warn( "Collada loader: found empty animation channel, ignored. Please check your exporter.");
- }
+ anims.push_back( dstAnim);
+ } else
+ {
+ DefaultLogger::get()->warn( "Collada loader: found empty animation channel, ignored. Please check your exporter.");
+ }
+
+ if( !entries.empty() && entries.front().mTimeAccessor->mCount > 0 )
+ {
+ std::vector<Collada::ChannelEntry> morphChannels;
+ for( std::vector<Collada::ChannelEntry>::iterator it = entries.begin(); it != entries.end(); ++it)
+ {
+ Collada::ChannelEntry& e = *it;
+
+ // skip non-transform types
+ if (e.mTargetId.empty())
+ continue;
+
+ if (e.mTargetId.find("morph-weights") != std::string::npos)
+ morphChannels.push_back(e);
+ }
+ if (morphChannels.size() > 0)
+ {
+ // either 1) morph weight animation count should contain morph target count channels
+ // or 2) one channel with morph target count arrays
+ // assume first
+
+ aiMeshMorphAnim *morphAnim = new aiMeshMorphAnim;
+ morphAnim->mName.Set(nodeName);
+
+ std::vector<MorphTimeValues> morphTimeValues;
+
+ int morphAnimChannelIndex = 0;
+ for( std::vector<Collada::ChannelEntry>::iterator it = morphChannels.begin(); it != morphChannels.end(); ++it)
+ {
+ Collada::ChannelEntry& e = *it;
+ std::string::size_type apos = e.mTargetId.find('(');
+ std::string::size_type bpos = e.mTargetId.find(')');
+ if (apos == std::string::npos || bpos == std::string::npos)
+ // unknown way to specify weight -> ignore this animation
+ continue;
+
+ // weight target can be in format Weight_M_N, Weight_N, WeightN, or some other way
+ // we ignore the name and just assume the channels are in the right order
+ for (unsigned int i = 0; i < e.mTimeData->mValues.size(); i++)
+ insertMorphTimeValue(morphTimeValues, e.mTimeData->mValues.at(i), e.mValueData->mValues.at(i), morphAnimChannelIndex);
+
+ ++morphAnimChannelIndex;
+ }
+
+ morphAnim->mNumKeys = morphTimeValues.size();
+ morphAnim->mKeys = new aiMeshMorphKey[morphAnim->mNumKeys];
+ for (unsigned int key = 0; key < morphAnim->mNumKeys; key++)
+ {
+ morphAnim->mKeys[key].mNumValuesAndWeights = morphChannels.size();
+ morphAnim->mKeys[key].mValues = new unsigned int [morphChannels.size()];
+ morphAnim->mKeys[key].mWeights = new double [morphChannels.size()];
+
+ morphAnim->mKeys[key].mTime = morphTimeValues[key].mTime;
+ for (unsigned int valueIndex = 0; valueIndex < morphChannels.size(); valueIndex++)
+ {
+ morphAnim->mKeys[key].mValues[valueIndex] = valueIndex;
+ morphAnim->mKeys[key].mWeights[valueIndex] = getWeightAtKey(morphTimeValues, key, valueIndex);
+ }
+ }
+
+ morphAnims.push_back(morphAnim);
+ }
+ }
}
- if( !anims.empty())
+ if( !anims.empty() || !morphAnims.empty())
{
aiAnimation* anim = new aiAnimation;
anim->mName.Set( pName);
anim->mNumChannels = anims.size();
- anim->mChannels = new aiNodeAnim*[anims.size()];
- std::copy( anims.begin(), anims.end(), anim->mChannels);
+ if (anim->mNumChannels > 0)
+ {
+ anim->mChannels = new aiNodeAnim*[anims.size()];
+ std::copy( anims.begin(), anims.end(), anim->mChannels);
+ }
+ anim->mNumMorphMeshChannels = morphAnims.size();
+ if (anim->mNumMorphMeshChannels > 0)
+ {
+ anim->mMorphMeshChannels = new aiMeshMorphAnim*[anim->mNumMorphMeshChannels];
+ std::copy( morphAnims.begin(), morphAnims.end(), anim->mMorphMeshChannels);
+ }
anim->mDuration = 0.0f;
for( size_t a = 0; a < anims.size(); ++a)
{
- anim->mDuration = std::max( anim->mDuration, anims[a]->mPositionKeys[anims[a]->mNumPositionKeys-1].mTime);
- anim->mDuration = std::max( anim->mDuration, anims[a]->mRotationKeys[anims[a]->mNumRotationKeys-1].mTime);
- anim->mDuration = std::max( anim->mDuration, anims[a]->mScalingKeys[anims[a]->mNumScalingKeys-1].mTime);
+ anim->mDuration = std::max( anim->mDuration, anims[a]->mPositionKeys[anims[a]->mNumPositionKeys-1].mTime);
+ anim->mDuration = std::max( anim->mDuration, anims[a]->mRotationKeys[anims[a]->mNumRotationKeys-1].mTime);
+ anim->mDuration = std::max( anim->mDuration, anims[a]->mScalingKeys[anims[a]->mNumScalingKeys-1].mTime);
+ }
+ for (size_t a = 0; a < morphAnims.size(); ++a)
+ {
+ anim->mDuration = std::max(anim->mDuration, morphAnims[a]->mKeys[morphAnims[a]->mNumKeys-1].mTime);
}
anim->mTicksPerSecond = 1;
mAnims.push_back( anim);
diff --git a/code/ColladaLoader.h b/code/ColladaLoader.h
index 313608c..fc26532 100644
--- a/code/ColladaLoader.h
+++ b/code/ColladaLoader.h
@@ -117,6 +117,8 @@ protected:
/** Builds meshes for the given node and references them */
void BuildMeshesForNode( const ColladaParser& pParser, const Collada::Node* pNode,
aiNode* pTarget);
+
+ aiMesh *findMesh(std::string meshid);
/** Creates a mesh for the given ColladaMesh face subset and returns the newly created mesh */
aiMesh* CreateMesh( const ColladaParser& pParser, const Collada::Mesh* pSrcMesh, const Collada::SubMesh& pSubMesh,
@@ -223,6 +225,9 @@ protected:
/** Accumulated meshes for the target scene */
std::vector<aiMesh*> mMeshes;
+
+ /** Accumulated morph target meshes */
+ std::vector<aiMesh*> mTargetMeshes;
/** Temporary material list */
std::vector<std::pair<Collada::Effect*, aiMaterial*> > newMats;
diff --git a/code/ColladaParser.cpp b/code/ColladaParser.cpp
index 527e2ed..ce87476 100644
--- a/code/ColladaParser.cpp
+++ b/code/ColladaParser.cpp
@@ -586,6 +586,12 @@ void ColladaParser::ReadAnimationSampler( Collada::AnimationChannel& pChannel)
pChannel.mSourceTimes = source;
else if( strcmp( semantic, "OUTPUT") == 0)
pChannel.mSourceValues = source;
+ else if( strcmp( semantic, "IN_TANGENT") == 0)
+ pChannel.mInTanValues = source;
+ else if( strcmp( semantic, "OUT_TANGENT") == 0)
+ pChannel.mOutTanValues = source;
+ else if( strcmp( semantic, "INTERPOLATION") == 0)
+ pChannel.mInterpolationValues = source;
if( !mReader->isEmptyElement())
SkipElement();
@@ -648,6 +654,9 @@ void ColladaParser::ReadControllerLibrary()
// Reads a controller into the given mesh structure
void ColladaParser::ReadController( Collada::Controller& pController)
{
+ // initial values
+ pController.mType = Skin;
+ pController.mMethod = Normalized;
while( mReader->read())
{
if( mReader->getNodeType() == irr::io::EXN_ELEMENT)
@@ -655,8 +664,15 @@ void ColladaParser::ReadController( Collada::Controller& pController)
// two types of controllers: "skin" and "morph". Only the first one is relevant, we skip the other
if( IsElement( "morph"))
{
- // should skip everything inside, so there's no danger of catching elements inbetween
- SkipElement();
+ pController.mType = Morph;
+ int baseIndex = GetAttribute("source");
+ pController.mMeshId = mReader->getAttributeValue(baseIndex) + 1;
+ int methodIndex = GetAttribute("method");
+ if (methodIndex > 0) {
+ const char *method = mReader->getAttributeValue(methodIndex);
+ if (strcmp(method, "RELATIVE") == 0)
+ pController.mMethod = Relative;
+ }
}
else if( IsElement( "skin"))
{
@@ -694,6 +710,32 @@ void ColladaParser::ReadController( Collada::Controller& pController)
{
ReadControllerWeights( pController);
}
+ else if ( IsElement( "targets" ))
+ {
+ while (mReader->read()) {
+ if( mReader->getNodeType() == irr::io::EXN_ELEMENT) {
+ if ( IsElement( "input")) {
+ int semanticsIndex = GetAttribute("semantic");
+ int sourceIndex = GetAttribute("source");
+
+ const char *semantics = mReader->getAttributeValue(semanticsIndex);
+ const char *source = mReader->getAttributeValue(sourceIndex);
+ if (strcmp(semantics, "MORPH_TARGET") == 0) {
+ pController.mMorphTarget = source + 1;
+ }
+ else if (strcmp(semantics, "MORPH_WEIGHT") == 0)
+ {
+ pController.mMorphWeight = source + 1;
+ }
+ }
+ } else if( mReader->getNodeType() == irr::io::EXN_ELEMENT_END) {
+ if( strcmp( mReader->getNodeName(), "targets") == 0)
+ break;
+ else
+ ThrowException( "Expected end of <targets> element.");
+ }
+ }
+ }
else
{
// ignore the rest
@@ -704,7 +746,7 @@ void ColladaParser::ReadController( Collada::Controller& pController)
{
if( strcmp( mReader->getNodeName(), "controller") == 0)
break;
- else if( strcmp( mReader->getNodeName(), "skin") != 0)
+ else if( strcmp( mReader->getNodeName(), "skin") != 0 && strcmp( mReader->getNodeName(), "morph") != 0)
ThrowException( "Expected end of <controller> element.");
}
}
diff --git a/code/CreateAnimMesh.cpp b/code/CreateAnimMesh.cpp
new file mode 100644
index 0000000..094a414
--- /dev/null
+++ b/code/CreateAnimMesh.cpp
@@ -0,0 +1,92 @@
+/*
+---------------------------------------------------------------------------
+Open Asset Import Library (assimp)
+---------------------------------------------------------------------------
+
+Copyright (C) 2016 The Qt Company Ltd.
+Copyright (c) 2006-2012, 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 "CreateAnimMesh.h"
+
+namespace Assimp {
+
+aiAnimMesh *aiCreateAnimMesh(const aiMesh *mesh)
+{
+ aiAnimMesh *animesh = new aiAnimMesh;
+ animesh->mVertices = NULL;
+ animesh->mNormals = NULL;
+ animesh->mTangents = NULL;
+ animesh->mBitangents = NULL;
+ animesh->mNumVertices = mesh->mNumVertices;
+ if (mesh->mVertices) {
+ animesh->mVertices = new aiVector3D[animesh->mNumVertices];
+ std::memcpy(animesh->mVertices, mesh->mVertices, mesh->mNumVertices * sizeof(aiVector3D));
+ }
+ if (mesh->mNormals) {
+ animesh->mNormals = new aiVector3D[animesh->mNumVertices];
+ std::memcpy(animesh->mNormals, mesh->mNormals, mesh->mNumVertices * sizeof(aiVector3D));
+ }
+ if (mesh->mTangents) {
+ animesh->mTangents = new aiVector3D[animesh->mNumVertices];
+ std::memcpy(animesh->mTangents, mesh->mTangents, mesh->mNumVertices * sizeof(aiVector3D));
+ }
+ if (mesh->mBitangents) {
+ animesh->mBitangents = new aiVector3D[animesh->mNumVertices];
+ std::memcpy(animesh->mBitangents, mesh->mBitangents, mesh->mNumVertices * sizeof(aiVector3D));
+ }
+
+ for (int i = 0; i < AI_MAX_NUMBER_OF_COLOR_SETS; ++i) {
+ if (mesh->mColors[i]) {
+ animesh->mColors[i] = new aiColor4D[animesh->mNumVertices];
+ std::memcpy(animesh->mColors[i], mesh->mColors[i], mesh->mNumVertices * sizeof(aiColor4D));
+ } else {
+ animesh->mColors[i] = NULL;
+ }
+ }
+
+ for (int i = 0; i < AI_MAX_NUMBER_OF_TEXTURECOORDS; ++i) {
+ if (mesh->mTextureCoords[i]) {
+ animesh->mTextureCoords[i] = new aiVector3D[animesh->mNumVertices];
+ std::memcpy(animesh->mTextureCoords[i], mesh->mTextureCoords[i], mesh->mNumVertices * sizeof(aiVector3D));
+ } else {
+ animesh->mTextureCoords[i] = NULL;
+ }
+ }
+ return animesh;
+}
+
+} // end of namespace Assimp
diff --git a/code/CreateAnimMesh.h b/code/CreateAnimMesh.h
new file mode 100644
index 0000000..c5ceb40
--- /dev/null
+++ b/code/CreateAnimMesh.h
@@ -0,0 +1,56 @@
+/*
+Open Asset Import Library (assimp)
+----------------------------------------------------------------------
+
+Copyright (c) 2006-2016, assimp team
+All rights reserved.
+
+Redistribution and use of this software in source and binary forms,
+with or without modification, are permitted provided that the
+following conditions are met:
+
+* Redistributions of source code must retain the above
+ copyright notice, this list of conditions and the
+ following disclaimer.
+
+* Redistributions in binary form must reproduce the above
+ copyright notice, this list of conditions and the
+ following disclaimer in the documentation and/or other
+ materials provided with the distribution.
+
+* Neither the name of the assimp team, nor the names of its
+ contributors may be used to endorse or promote products
+ derived from this software without specific prior
+ written permission of the assimp team.
+
+THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+----------------------------------------------------------------------
+*/
+
+/** @file CreateAnimMesh.h
+ * Create AnimMesh from Mesh
+ */
+#ifndef INCLUDED_AI_CREATE_ANIM_MESH_H
+#define INCLUDED_AI_CREATE_ANIM_MESH_H
+
+#include <assimp/mesh.h>
+
+namespace Assimp {
+
+/** Create aiAnimMesh from aiMesh. */
+aiAnimMesh *aiCreateAnimMesh(const aiMesh *mesh);
+
+} // end of namespace Assimp
+#endif // INCLUDED_AI_CREATE_ANIM_MESH_H
+
diff --git a/include/assimp/anim.h b/include/assimp/anim.h
index af59417..7b4dff8 100644
--- a/include/assimp/anim.h
+++ b/include/assimp/anim.h
@@ -182,6 +182,39 @@ struct aiMeshKey
};
// ---------------------------------------------------------------------------
+/** Binds a morph anim mesh to a specific point in time. */
+struct aiMeshMorphKey
+{
+ /** The time of this key */
+ double mTime;
+
+ /** The values and weights at the time of this key */
+ unsigned int *mValues;
+ double *mWeights;
+
+ /** The number of values and weights */
+ unsigned int mNumValuesAndWeights;
+#ifdef __cplusplus
+ aiMeshMorphKey()
+ : mTime(0.0)
+ , mValues(NULL)
+ , mWeights(NULL)
+ , mNumValuesAndWeights(0)
+ {
+
+ }
+
+ ~aiMeshMorphKey()
+ {
+ if (mNumValuesAndWeights && mValues && mWeights) {
+ delete [] mValues;
+ delete [] mWeights;
+ }
+ }
+#endif
+};
+
+// ---------------------------------------------------------------------------
/** Defines how an animation channel behaves outside the defined time
* range. This corresponds to aiNodeAnim::mPreState and
* aiNodeAnim::mPostState.*/
@@ -335,7 +368,38 @@ struct aiMeshAnim
};
// ---------------------------------------------------------------------------
-/** An animation consists of keyframe data for a number of nodes. For
+/** Describes a morphing animation of a given mesh. */
+struct aiMeshMorphAnim
+{
+ /** Name of the mesh to be animated. An empty string is not allowed,
+ * animated meshes need to be named (not necessarily uniquely,
+ * the name can basically serve as wildcard to select a group
+ * of meshes with similar animation setup)*/
+ C_STRUCT aiString mName;
+
+ /** Size of the #mKeys array. Must be 1, at least. */
+ unsigned int mNumKeys;
+
+ /** Key frames of the animation. May not be NULL. */
+ C_STRUCT aiMeshMorphKey* mKeys;
+
+#ifdef __cplusplus
+
+ aiMeshMorphAnim()
+ : mNumKeys()
+ , mKeys()
+ {}
+
+ ~aiMeshMorphAnim()
+ {
+ delete[] mKeys;
+ }
+
+#endif
+};
+
+// ---------------------------------------------------------------------------
+/** An animation consists of key-frame data for a number of nodes. For
* each node affected by the animation a separate series of data is given.*/
struct aiAnimation
{
@@ -367,15 +431,25 @@ struct aiAnimation
* The array is mNumMeshChannels in size. */
C_STRUCT aiMeshAnim** mMeshChannels;
+ /** The number of mesh animation channels. Each channel affects
+ * a single mesh and defines morphing animation. */
+ unsigned int mNumMorphMeshChannels;
+
+ /** The morph mesh animation channels. Each channel affects a single mesh.
+ * The array is mNumMorphMeshChannels in size. */
+ C_STRUCT aiMeshMorphAnim **mMorphMeshChannels;
+
#ifdef __cplusplus
aiAnimation()
- : mDuration(-1.)
- , mTicksPerSecond()
- , mNumChannels()
- , mChannels()
- , mNumMeshChannels()
- , mMeshChannels()
- {
+ : mDuration(-1.)
+ , mTicksPerSecond(0.)
+ , mNumChannels(0)
+ , mChannels(NULL)
+ , mNumMeshChannels(0)
+ , mMeshChannels(NULL)
+ , mNumMorphMeshChannels(0)
+ , mMorphMeshChannels(NULL) {
+ // empty
}
~aiAnimation()
@@ -395,6 +469,11 @@ struct aiAnimation
delete [] mMeshChannels;
}
+ if (mNumMorphMeshChannels && mMorphMeshChannels) {
+ for( unsigned int a = 0; a < mNumMorphMeshChannels; a++) {
+ delete mMorphMeshChannels[a];
+ }
+ }
}
#endif // __cplusplus
};
diff --git a/include/assimp/mesh.h b/include/assimp/mesh.h
index a76a2d7..2ebc14d 100644
--- a/include/assimp/mesh.h
+++ b/include/assimp/mesh.h
@@ -377,6 +377,9 @@ struct aiAnimMesh
*/
unsigned int mNumVertices;
+/** Weight of the AnimMesh. */
+ float mWeight;
+
#ifdef __cplusplus
aiAnimMesh()
@@ -445,6 +448,27 @@ struct aiAnimMesh
#endif
};
+// ---------------------------------------------------------------------------
+/** @brief Enumerates the methods of mesh morphing supported by Assimp.
+ */
+enum aiMorphingMethod
+{
+ /** Interpolation between morph targets */
+ aiMorphingMethod_VERTEX_BLEND = 0x1,
+
+ /** Normalized morphing between morph targets */
+ aiMorphingMethod_MORPH_NORMALIZED = 0x2,
+
+ /** Relative morphing between morph targets */
+ aiMorphingMethod_MORPH_RELATIVE = 0x3,
+
+ /** This value is not used. It is just here to force the
+ * compiler to map this enum to a 32 Bit integer.
+ */
+#ifndef SWIG
+ _aiMorphingMethod_Force32Bit = INT_MAX
+#endif
+}; //! enum aiMorphingMethod
// ---------------------------------------------------------------------------
/** @brief A mesh represents a geometry or model with a single material.
@@ -599,15 +623,18 @@ struct aiMesh
C_STRUCT aiString mName;
- /** NOT CURRENTLY IN USE. The number of attachment meshes */
+ /** The number of attachment meshes. Note! Currently only works with Collada loader. */
unsigned int mNumAnimMeshes;
- /** NOT CURRENTLY IN USE. Attachment meshes for this mesh, for vertex-based animation.
+ /** Attachment meshes for this mesh, for vertex-based animation.
* Attachment meshes carry replacement data for some of the
- * mesh'es vertex components (usually positions, normals). */
+ * mesh'es vertex components (usually positions, normals).
+ * Note! Currently only works with Collada loader.*/
C_STRUCT aiAnimMesh** mAnimMeshes;
-
+ /** Method of morphing when animeshes are specified. */
+ unsigned int mMethod;
+
#ifdef __cplusplus
//! Default constructor. Initializes all members to 0
@@ -732,7 +759,6 @@ struct aiMesh
#endif // __cplusplus
};
-
#ifdef __cplusplus
}
#endif //! extern "C"
--
2.9.3

View file

@ -0,0 +1,24 @@
diff -rupN --no-dereference assimp-6.0.2/code/AssetLib/Q3D/Q3DLoader.cpp assimp-6.0.2-new/code/AssetLib/Q3D/Q3DLoader.cpp
--- assimp-6.0.2/code/AssetLib/Q3D/Q3DLoader.cpp 2025-06-08 21:50:39.000000000 +0200
+++ assimp-6.0.2-new/code/AssetLib/Q3D/Q3DLoader.cpp 2025-12-14 20:02:55.733930684 +0100
@@ -55,6 +55,8 @@ OF THIS SOFTWARE, EVEN IF ADVISED OF THE
#include <assimp/DefaultLogger.hpp>
#include <assimp/IOSystem.hpp>
+#include <limits>
+
namespace Assimp {
static constexpr aiImporterDesc desc = {
@@ -309,6 +311,11 @@ void Q3DImporter::InternReadFile(const s
throw DeadlyImportError("Quick3D: Invalid texture. Width or height is zero");
}
+ const unsigned int uint_max = std::numeric_limits<unsigned int>::max();
+ if (tex->mWidth > (uint_max / tex->mHeight)) {
+ throw DeadlyImportError("Quick3D: Texture dimensions are too large, resulting in overflow.");
+ }
+
unsigned int mul = tex->mWidth * tex->mHeight;
aiTexel *begin = tex->pcData = new aiTexel[mul];
aiTexel *const end = &begin[mul - 1] + 1;

View file

@ -1,19 +0,0 @@
diff -up ./port/PyAssimp/pyassimp/helper.py.pythonpath ./port/PyAssimp/pyassimp/helper.py
--- ./port/PyAssimp/pyassimp/helper.py.pythonpath 2016-05-21 19:54:37.152745935 -0400
+++ ./port/PyAssimp/pyassimp/helper.py 2016-05-21 19:57:28.578516453 -0400
@@ -22,6 +22,7 @@ additional_dirs, ext_whitelist = [],[]
# depending on the platform we're running on.
if os.name=='posix':
additional_dirs.append('./')
+ additional_dirs.append('/usr/lib64/')
additional_dirs.append('/usr/lib/')
additional_dirs.append('/usr/local/lib/')
@@ -29,6 +30,7 @@ if os.name=='posix':
# currently there's always a symlink called
# libassimp.so in /usr/local/lib.
ext_whitelist.append('.so')
+ ext_whitelist.append('.3')
# libassimp.dylib in /usr/local/lib
ext_whitelist.append('.dylib')

View file

@ -1,13 +0,0 @@
--- assimp-3.3.1/assimp.pc.in.fedora 2017-05-18 07:19:36.251314963 +0200
+++ assimp-3.3.1/assimp.pc.in 2017-05-18 07:20:26.038525493 +0200
@@ -1,7 +1,7 @@
prefix=@CMAKE_INSTALL_PREFIX@
-exec_prefix=@CMAKE_INSTALL_PREFIX@/@ASSIMP_BIN_INSTALL_DIR@
-libdir=@CMAKE_INSTALL_PREFIX@/@ASSIMP_LIB_INSTALL_DIR@
-includedir=@CMAKE_INSTALL_PREFIX@/@ASSIMP_INCLUDE_INSTALL_DIR@/assimp
+exec_prefix=@ASSIMP_BIN_INSTALL_DIR@
+libdir=@ASSIMP_LIB_INSTALL_DIR@
+includedir=@ASSIMP_INCLUDE_INSTALL_DIR@/assimp
Name: @CMAKE_PROJECT_NAME@
Description: Import various well-known 3D model formats in an uniform manner.

View file

@ -1,12 +0,0 @@
diff -up assimp-3.3.1/code/ByteSwapper.h.than assimp-3.3.1/code/ByteSwapper.h
diff -up assimp-3.3.1/code/glTFAsset.inl.than assimp-3.3.1/code/glTFAsset.inl
--- assimp-3.3.1/code/glTFAsset.inl.than 2017-05-05 17:28:29.754976483 -0400
+++ assimp-3.3.1/code/glTFAsset.inl 2017-05-05 17:28:52.995404721 -0400
@@ -40,6 +40,7 @@ OF THIS SOFTWARE, EVEN IF ADVISED OF THE
#include "StringUtils.h"
+using namespace Assimp;
namespace glTF {
namespace {

View file

@ -1,201 +0,0 @@
diff --git a/CMakeLists.txt b/CMakeLists.txt
index 8455bb8..c8e0d88 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -211,6 +211,26 @@ IF ( ASSIMP_NO_EXPORT )
MESSAGE( STATUS "Build an import-only version of Assimp." )
ENDIF( ASSIMP_NO_EXPORT )
+# Search for poly2tri
+FIND_LIBRARY(POLY2TRI_LIB poly2tri HINTS ${POLY2TRI_LIB_PATH})
+FIND_FILE(POLY2TRI_H poly2tri.h PATHS ${POLY2TRI_INCLUDE_PATH})
+IF (POLY2TRI_LIB AND POLY2TRI_H)
+ message(status "Found External poly2tri")
+ SET(HAVE_POLY2TRI true)
+ELSE(POLY2TRI_LIB AND POLY2TRI_H)
+ SET(HAVE_POLY2TRI false)
+ENDIF(POLY2TRI_LIB AND POLY2TRI_H)
+
+# Search for clipper
+FIND_LIBRARY(CLIPPER_LIB polyclipping HINTS ${CLIPPER_LIB_PATH})
+FIND_FILE(CLIPPER_H clipper.hpp PATHS ${CLIPPER_INCLUDE_PATH})
+IF (CLIPPER_LIB AND CLIPPER_H)
+ message(status "Found External clipper")
+ SET(HAVE_CLIPPER true)
+ELSE(CLIPPER_LIB AND CLIPPER_H)
+ SET(HAVE_CLIPPER false)
+ENDIF(CLIPPER_LIB AND CLIPPER_H)
+
SET ( ASSIMP_BUILD_ARCHITECTURE "" CACHE STRING
"describe the current architecture."
)
diff --git a/code/BlenderTessellator.h b/code/BlenderTessellator.h
index 530bd2c..a6c9d9e 100644
--- a/code/BlenderTessellator.h
+++ b/code/BlenderTessellator.h
@@ -142,7 +142,7 @@ namespace Assimp
#if ASSIMP_BLEND_WITH_POLY_2_TRI
-#include "../contrib/poly2tri/poly2tri/poly2tri.h"
+#include "poly2tri/poly2tri.h"
namespace Assimp
{
diff --git a/code/CMakeLists.txt b/code/CMakeLists.txt
index 35ecf50..d549c89 100644
--- a/code/CMakeLists.txt
+++ b/code/CMakeLists.txt
@@ -655,12 +655,15 @@ SET( ConvertUTF_SRCS
)
SOURCE_GROUP( ConvertUTF FILES ${ConvertUTF_SRCS})
+if (NOT HAVE_CLIPPER)
SET( Clipper_SRCS
../contrib/clipper/clipper.hpp
../contrib/clipper/clipper.cpp
)
SOURCE_GROUP( Clipper FILES ${Clipper_SRCS})
-
+else (NOT HAVE_CLIPPER)
+SET( Clipper_SRCS "")
+endif(NOT HAVE_CLIPPER)
SET( Poly2Tri_SRCS
../contrib/poly2tri/poly2tri/common/shapes.cc
@@ -743,8 +746,6 @@ SET( assimp_src
# Third-party libraries
${IrrXML_SRCS}
${ConvertUTF_SRCS}
- ${unzip_compile_SRCS}
- ${Poly2Tri_SRCS}
${Clipper_SRCS}
${openddl_parser_SRCS}
# Necessary to show the headers in the project when using the VC++ generator:
@@ -753,6 +754,8 @@ SET( assimp_src
${COMPILER_HEADERS}
)
+
+
ADD_DEFINITIONS( -DOPENDDLPARSER_BUILD )
INCLUDE_DIRECTORIES(
@@ -821,6 +824,19 @@ else (UNZIP_FOUND)
INCLUDE_DIRECTORIES("../")
endif (UNZIP_FOUND)
+if (HAVE_POLY2TRI)
+ INCLUDE_DIRECTORIES(${POLY2TRI_INCLUDE_PATH})
+ TARGET_LINK_LIBRARIES(assimp ${POLY2TRI_LIB})
+endif(HAVE_POLY2TRI)
+
+if (HAVE_CLIPPER)
+ INCLUDE_DIRECTORIES(${CLIPPER_INCLUDE_PATH})
+ TARGET_LINK_LIBRARIES(assimp ${CLIPPER_LIB})
+else (HAVE_CLIPPER)
+ INCLUDE_DIRECTORIES(../contrib/clipper)
+endif(HAVE_CLIPPER)
+
+
INSTALL( TARGETS assimp
LIBRARY DESTINATION ${ASSIMP_LIB_INSTALL_DIR}
ARCHIVE DESTINATION ${ASSIMP_LIB_INSTALL_DIR}
diff --git a/code/D3MFImporter.cpp b/code/D3MFImporter.cpp
index 1a97168..7377eb4 100644
--- a/code/D3MFImporter.cpp
+++ b/code/D3MFImporter.cpp
@@ -44,7 +44,7 @@ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
#include <assimp/IOStream.hpp>
#include <assimp/IOSystem.hpp>
#include <assimp/DefaultLogger.hpp>
-#include <contrib/unzip/unzip.h>
+#include <minizip/unzip.h>
#include "irrXMLWrapper.h"
#include "StringComparison.h"
#include "StringUtils.h"
diff --git a/code/D3MFOpcPackage.cpp b/code/D3MFOpcPackage.cpp
index 7cc1dd5..2b007db 100644
--- a/code/D3MFOpcPackage.cpp
+++ b/code/D3MFOpcPackage.cpp
@@ -42,7 +42,7 @@ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
#include "D3MFOpcPackage.h"
#include "Exceptional.h"
-#include <contrib/unzip/unzip.h>
+#include <minizip/unzip.h>
#include <assimp/IOStream.hpp>
#include <assimp/IOSystem.hpp>
#include <assimp/DefaultLogger.hpp>
diff --git a/code/IFCGeometry.cpp b/code/IFCGeometry.cpp
index 5a2e4a0..0926498 100644
--- a/code/IFCGeometry.cpp
+++ b/code/IFCGeometry.cpp
@@ -49,8 +49,8 @@ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
#include "PolyTools.h"
#include "ProcessHelper.h"
-#include "../contrib/poly2tri/poly2tri/poly2tri.h"
-#include "../contrib/clipper/clipper.hpp"
+#include "poly2tri/poly2tri.h"
+#include "clipper.hpp"
#include <memory>
#include <iterator>
diff --git a/code/IFCLoader.cpp b/code/IFCLoader.cpp
index 34977f5..bc655c0 100644
--- a/code/IFCLoader.cpp
+++ b/code/IFCLoader.cpp
@@ -50,7 +50,7 @@ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
#include <tuple>
#ifndef ASSIMP_BUILD_NO_COMPRESSED_IFC
-# include <contrib/unzip/unzip.h>
+# include <minizip/unzip.h>
#endif
#include "IFCLoader.h"
diff --git a/code/IFCOpenings.cpp b/code/IFCOpenings.cpp
index 51ea143..f0915fb 100644
--- a/code/IFCOpenings.cpp
+++ b/code/IFCOpenings.cpp
@@ -49,8 +49,8 @@ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
#include "PolyTools.h"
#include "ProcessHelper.h"
-#include "../contrib/poly2tri/poly2tri/poly2tri.h"
-#include "../contrib/clipper/clipper.hpp"
+#include "poly2tri/poly2tri.h"
+#include "clipper.hpp"
#include <iterator>
diff --git a/code/Q3BSPZipArchive.h b/code/Q3BSPZipArchive.h
index e46a11b..da93e5c 100644
--- a/code/Q3BSPZipArchive.h
+++ b/code/Q3BSPZipArchive.h
@@ -40,7 +40,7 @@ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
#ifndef AI_Q3BSP_ZIPARCHIVE_H_INC
#define AI_Q3BSP_ZIPARCHIVE_H_INC
-#include <contrib/unzip/unzip.h>
+#include <minizip/unzip.h>
#include <assimp/IOStream.hpp>
#include <assimp/IOSystem.hpp>
#include <string>
diff --git a/test/CMakeLists.txt b/test/CMakeLists.txt
index df0139d..8b26f22 100644
--- a/test/CMakeLists.txt
+++ b/test/CMakeLists.txt
@@ -37,7 +37,8 @@
#----------------------------------------------------------------------
cmake_minimum_required( VERSION 2.6 )
-INCLUDE( AddGTest )
+# Search for Google Test
+FIND_PACKAGE(GTest)
INCLUDE_DIRECTORIES(
${Assimp_SOURCE_DIR}/include
diff --git a/tools/assimp_cmd/CMakeLists.txt b/tools/assimp_cmd/CMakeLists.txt
index f8af93a..3f9a902 100644

37
assimp-docs.patch Normal file
View file

@ -0,0 +1,37 @@
diff -rupN --no-dereference assimp-6.0.2/doc/CMakeLists.txt assimp-6.0.2-new/doc/CMakeLists.txt
--- assimp-6.0.2/doc/CMakeLists.txt 2025-06-08 21:50:39.000000000 +0200
+++ assimp-6.0.2-new/doc/CMakeLists.txt 2025-08-17 10:36:53.475374100 +0200
@@ -33,9 +33,9 @@ if( DEFINED CMAKE_INSTALL_DOCDIR )
DESTINATION ${CMAKE_INSTALL_DOCDIR}
)
install(FILES
- ${CMAKE_CURRENT_SOURCE_DIR}/AssimpDoc_Html/AnimationOverview.png
- ${CMAKE_CURRENT_SOURCE_DIR}/AssimpDoc_Html/AnimationOverview.svg
- ${CMAKE_CURRENT_SOURCE_DIR}/AssimpDoc_Html/dragonsplash.png
+ ${CMAKE_CURRENT_SOURCE_DIR}/architecture/AnimationOverview.png
+ ${CMAKE_CURRENT_SOURCE_DIR}/architecture/AnimationOverview.svg
+ ${CMAKE_CURRENT_SOURCE_DIR}/images/dragonsplash.png
DESTINATION ${CMAKE_INSTALL_DOCDIR}/${HTML_OUTPUT}
)
endif()
diff -rupN --no-dereference assimp-6.0.2/doc/Doxyfile.in assimp-6.0.2-new/doc/Doxyfile.in
--- assimp-6.0.2/doc/Doxyfile.in 2025-06-08 21:50:39.000000000 +0200
+++ assimp-6.0.2-new/doc/Doxyfile.in 2025-08-17 10:36:53.474954432 +0200
@@ -952,7 +952,7 @@ RECURSIVE = NO
# Note that relative paths are relative to the directory from which doxygen is
# run.
-EXCLUDE =
+EXCLUDE = @PROJECT_BINARY_DIR@
# The EXCLUDE_SYMLINKS tag can be used to select whether or not files or
# directories that are symbolic links (a Unix file system feature) are excluded
@@ -1221,7 +1221,7 @@ GENERATE_HTML = YES
# The default directory is: html.
# This tag requires that the tag GENERATE_HTML is set to YES.
-HTML_OUTPUT = html
+HTML_OUTPUT = AssimpDoc_Html
# The HTML_FILE_EXTENSION tag can be used to specify the file extension for each
# generated HTML page (for example: .htm, .php, .asp).

12
assimp-nozlib.patch Normal file
View file

@ -0,0 +1,12 @@
diff -rupN --no-dereference assimp-6.0.2/contrib/zlib/CMakeLists.txt assimp-6.0.2-new/contrib/zlib/CMakeLists.txt
--- assimp-6.0.2/contrib/zlib/CMakeLists.txt 2025-06-08 21:50:39.000000000 +0200
+++ assimp-6.0.2-new/contrib/zlib/CMakeLists.txt 2025-08-17 10:36:53.187611066 +0200
@@ -196,7 +196,7 @@ if(MINGW)
set(ZLIB_DLL_SRCS ${CMAKE_CURRENT_BINARY_DIR}/zlib1rc.obj)
endif(MINGW)
-add_library(zlibstatic STATIC ${ZLIB_SRCS} ${ZLIB_ASMS} ${ZLIB_PUBLIC_HDRS} ${ZLIB_PRIVATE_HDRS})
+add_library(zlibstatic OBJECT ${ZLIB_SRCS} ${ZLIB_ASMS} ${ZLIB_PUBLIC_HDRS} ${ZLIB_PRIVATE_HDRS})
IF(ASSIMP_INSTALL)
INSTALL( TARGETS zlibstatic

19
assimp-pythonpath.patch Normal file
View file

@ -0,0 +1,19 @@
diff -rupN --no-dereference assimp-6.0.2/port/PyAssimp/pyassimp/helper.py assimp-6.0.2-new/port/PyAssimp/pyassimp/helper.py
--- assimp-6.0.2/port/PyAssimp/pyassimp/helper.py 2025-06-08 21:50:39.000000000 +0200
+++ assimp-6.0.2-new/port/PyAssimp/pyassimp/helper.py 2025-08-17 10:36:52.891631207 +0200
@@ -29,6 +29,7 @@ additional_dirs, ext_whitelist = [],[]
# depending on the platform we're running on.
if os.name=='posix':
additional_dirs.append('./')
+ additional_dirs.append('/usr/lib64/')
additional_dirs.append('/usr/lib/')
additional_dirs.append('/usr/lib/x86_64-linux-gnu/')
additional_dirs.append('/usr/lib/aarch64-linux-gnu/')
@@ -54,6 +55,7 @@ if os.name=='posix':
# currently there's always a symlink called
# libassimp.so in /usr/local/lib.
ext_whitelist.append('.so')
+ ext_whitelist.append('.3')
# libassimp.dylib in /usr/local/lib
ext_whitelist.append('.dylib')

28
assimp-tests.patch Normal file
View file

@ -0,0 +1,28 @@
diff -rupN --no-dereference assimp-6.0.2/CMakeLists.txt assimp-6.0.2-new/CMakeLists.txt
--- assimp-6.0.2/CMakeLists.txt 2025-06-08 21:50:39.000000000 +0200
+++ assimp-6.0.2-new/CMakeLists.txt 2025-08-17 10:36:53.765126531 +0200
@@ -813,6 +813,7 @@ IF ( ASSIMP_BUILD_SAMPLES )
ENDIF ()
IF ( ASSIMP_BUILD_TESTS )
+ ENABLE_TESTING()
ADD_SUBDIRECTORY( test/ )
ENDIF ()
diff -rupN --no-dereference assimp-6.0.2/test/CMakeLists.txt assimp-6.0.2-new/test/CMakeLists.txt
--- assimp-6.0.2/test/CMakeLists.txt 2025-08-17 10:36:52.887323815 +0200
+++ assimp-6.0.2-new/test/CMakeLists.txt 2025-08-17 10:36:53.765489323 +0200
@@ -36,6 +36,7 @@
#
#----------------------------------------------------------------------
cmake_minimum_required( VERSION 3.10 )
+include(GoogleTest)
INCLUDE_DIRECTORIES(
${Assimp_SOURCE_DIR}/test/unit
@@ -267,4 +268,4 @@ target_link_libraries( unit assimp ${pla
add_subdirectory(headercheck)
-add_test( unittests unit )
+gtest_discover_tests(unit)

248
assimp-unbundle.patch Normal file
View file

@ -0,0 +1,248 @@
diff -rupN --no-dereference assimp-6.0.2/code/AssetLib/Blender/BlenderTessellator.h assimp-6.0.2-new/code/AssetLib/Blender/BlenderTessellator.h
--- assimp-6.0.2/code/AssetLib/Blender/BlenderTessellator.h 2025-06-08 21:50:39.000000000 +0200
+++ assimp-6.0.2-new/code/AssetLib/Blender/BlenderTessellator.h 2025-08-18 20:15:00.250159883 +0200
@@ -143,7 +143,7 @@ namespace Assimp
#if ASSIMP_BLEND_WITH_POLY_2_TRI
-#include "contrib/poly2tri/poly2tri/poly2tri.h"
+#include <poly2tri/poly2tri.h>
namespace Assimp
{
diff -rupN --no-dereference assimp-6.0.2/code/AssetLib/IFC/IFCGeometry.cpp assimp-6.0.2-new/code/AssetLib/IFC/IFCGeometry.cpp
--- assimp-6.0.2/code/AssetLib/IFC/IFCGeometry.cpp 2025-06-08 21:50:39.000000000 +0200
+++ assimp-6.0.2-new/code/AssetLib/IFC/IFCGeometry.cpp 2025-08-18 20:15:00.250503229 +0200
@@ -45,7 +45,7 @@ OF THIS SOFTWARE, EVEN IF ADVISED OF THE
#include "IFCUtil.h"
#include "Common/PolyTools.h"
#include "PostProcessing/ProcessHelper.h"
-#include "contrib/poly2tri/poly2tri/poly2tri.h"
+#include <poly2tri/poly2tri.h>
#include "contrib/clipper/clipper.hpp"
#include <iterator>
diff -rupN --no-dereference assimp-6.0.2/code/AssetLib/IFC/IFCOpenings.cpp assimp-6.0.2-new/code/AssetLib/IFC/IFCOpenings.cpp
--- assimp-6.0.2/code/AssetLib/IFC/IFCOpenings.cpp 2025-06-08 21:50:39.000000000 +0200
+++ assimp-6.0.2-new/code/AssetLib/IFC/IFCOpenings.cpp 2025-08-18 20:15:00.250876754 +0200
@@ -47,7 +47,7 @@ OF THIS SOFTWARE, EVEN IF ADVISED OF THE
#include "IFCUtil.h"
#include "Common/PolyTools.h"
#include "PostProcessing/ProcessHelper.h"
-#include "contrib/poly2tri/poly2tri/poly2tri.h"
+#include <poly2tri/poly2tri.h>
#include "contrib/clipper/clipper.hpp"
#include <deque>
diff -rupN --no-dereference assimp-6.0.2/code/CMakeLists.txt assimp-6.0.2-new/code/CMakeLists.txt
--- assimp-6.0.2/code/CMakeLists.txt 2025-06-08 21:50:39.000000000 +0200
+++ assimp-6.0.2-new/code/CMakeLists.txt 2025-08-18 20:15:00.254124936 +0200
@@ -1120,13 +1120,7 @@ IF(ASSIMP_HUNTER_ENABLED)
hunter_add_package(pugixml)
find_package(pugixml CONFIG REQUIRED)
ELSEIF(NOT TARGET pugixml::pugixml)
- SET( Pugixml_SRCS
- ../contrib/pugixml/src/pugiconfig.hpp
- ../contrib/pugixml/src/pugixml.cpp
- ../contrib/pugixml/src/pugixml.hpp
- )
- INCLUDE_DIRECTORIES("../contrib/pugixml/src")
- SOURCE_GROUP( Contrib\\Pugixml FILES ${Pugixml_SRCS})
+ find_package(pugixml REQUIRED)
ENDIF()
# utf8
@@ -1134,7 +1128,7 @@ IF(ASSIMP_HUNTER_ENABLED)
hunter_add_package(utf8)
find_package(utf8cpp CONFIG REQUIRED)
ELSE()
- INCLUDE_DIRECTORIES("../contrib/utf8cpp/source")
+ find_package(utf8cpp CONFIG REQUIRED)
ENDIF()
# polyclipping
@@ -1150,10 +1144,10 @@ ENDIF()
#ENDIF()
# poly2tri
-#IF(ASSIMP_HUNTER_ENABLED)
-# hunter_add_package(poly2tri)
-# find_package(poly2tri CONFIG REQUIRED)
-#ELSE()
+IF(HAVE_POLY2TRI)
+ include_directories(${POLY2TRI_INCLUDE_PATH})
+ set(Poly2Tri_SRCS "")
+ELSE()
SET( Poly2Tri_SRCS
../contrib/poly2tri/poly2tri/common/shapes.cc
../contrib/poly2tri/poly2tri/common/shapes.h
@@ -1168,13 +1162,13 @@ ENDIF()
../contrib/poly2tri/poly2tri/sweep/sweep_context.h
)
SOURCE_GROUP( Contrib\\Poly2Tri FILES ${Poly2Tri_SRCS})
-#ENDIF()
+ENDIF()
# minizip/unzip
-IF(ASSIMP_HUNTER_ENABLED)
- hunter_add_package(minizip)
- find_package(minizip CONFIG REQUIRED)
-ELSE()
+#IF(ASSIMP_HUNTER_ENABLED)
+# hunter_add_package(minizip)
+# find_package(minizip CONFIG REQUIRED)
+#ELSE()
SET( unzip_SRCS
../contrib/unzip/crypt.h
../contrib/unzip/ioapi.c
@@ -1183,7 +1177,7 @@ ELSE()
../contrib/unzip/unzip.h
)
SOURCE_GROUP(Contrib\\unzip FILES ${unzip_SRCS})
-ENDIF()
+#ENDIF()
# zip (https://github.com/kuba--/zip)
separate_arguments(ASSIMP_EXPORTERS_LIST UNIX_COMMAND ${ASSIMP_EXPORTERS_ENABLED})
@@ -1279,6 +1273,7 @@ ENDIF ()
IF (NOT ASSIMP_HUNTER_ENABLED AND (RT_FOUND OR WIN32))
SET( ASSIMP_IMPORTER_GLTF_USE_OPEN3DGC 1 )
ADD_DEFINITIONS( -DASSIMP_IMPORTER_GLTF_USE_OPEN3DGC=1 )
+ INCLUDE_DIRECTORIES( "../contrib" )
ELSE ()
SET (open3dgc_SRCS "")
MESSAGE (INFO " Hunter enabled or RT-extension not found. glTF import/export will be built without Open3DGC-compression.")
@@ -1290,7 +1285,8 @@ IF(ASSIMP_HUNTER_ENABLED)
hunter_add_package(RapidJSON)
find_package(RapidJSON CONFIG REQUIRED)
ELSE()
- INCLUDE_DIRECTORIES("../contrib/rapidjson/include")
+ find_package(RapidJSON REQUIRED)
+ include_directories(${RapidJSON_INCLUDE_DIRS})
ADD_DEFINITIONS( -DRAPIDJSON_HAS_STDSTRING=1)
option( ASSIMP_RAPIDJSON_NO_MEMBER_ITERATOR "Suppress rapidjson warning on MSVC (NOTE: breaks android build)" ON )
if(ASSIMP_RAPIDJSON_NO_MEMBER_ITERATOR)
@@ -1303,11 +1299,6 @@ IF(ASSIMP_HUNTER_ENABLED)
hunter_add_package(stb)
find_package(stb CONFIG REQUIRED)
ELSE()
- SET( stb_SRCS
- ../contrib/stb/stb_image.h
- )
- INCLUDE_DIRECTORIES("../contrib")
- SOURCE_GROUP( Contrib\\stb FILES ${stb_SRCS})
ENDIF()
# VC2010 fixes
@@ -1489,7 +1480,6 @@ IF(ASSIMP_HUNTER_ENABLED)
TARGET_LINK_LIBRARIES(assimp
PUBLIC
openddlparser::openddl_parser
- minizip::minizip
ZLIB::zlib
RapidJSON::rapidjson
utf8cpp
@@ -1508,9 +1498,16 @@ ELSE()
if (ASSIMP_BUILD_DRACO)
target_link_libraries(assimp ${draco_LIBRARIES})
endif()
- if(TARGET pugixml::pugixml)
- target_link_libraries(assimp pugixml::pugixml)
- endif()
+
+ TARGET_LINK_LIBRARIES(assimp pugixml)
+
+ IF (HAVE_POLY2TRI)
+ TARGET_LINK_LIBRARIES(assimp ${POLY2TRI_LIB})
+ ENDIF()
+
+ IF (HAVE_CLIPPER)
+ TARGET_LINK_LIBRARIES(assimp ${CLIPPER_LIB})
+ ENDIF()
ENDIF()
if(ASSIMP_ANDROID_JNIIOSYSTEM)
diff -rupN --no-dereference assimp-6.0.2/code/PostProcessing/TriangulateProcess.cpp assimp-6.0.2-new/code/PostProcessing/TriangulateProcess.cpp
--- assimp-6.0.2/code/PostProcessing/TriangulateProcess.cpp 2025-06-08 21:50:39.000000000 +0200
+++ assimp-6.0.2-new/code/PostProcessing/TriangulateProcess.cpp 2025-08-18 20:15:00.251686318 +0200
@@ -62,7 +62,7 @@ OF THIS SOFTWARE, EVEN IF ADVISED OF THE
#include "PostProcessing/TriangulateProcess.h"
#include "PostProcessing/ProcessHelper.h"
#include "Common/PolyTools.h"
-#include "contrib/earcut-hpp/earcut.hpp"
+#include <mapbox/earcut.hpp>
#include <memory>
#include <cstdint>
diff -rupN --no-dereference assimp-6.0.2/samples/SimpleTexturedOpenGL/SimpleTexturedOpenGL/src/model_loading.cpp assimp-6.0.2-new/samples/SimpleTexturedOpenGL/SimpleTexturedOpenGL/src/model_loading.cpp
--- assimp-6.0.2/samples/SimpleTexturedOpenGL/SimpleTexturedOpenGL/src/model_loading.cpp 2025-06-08 21:50:39.000000000 +0200
+++ assimp-6.0.2-new/samples/SimpleTexturedOpenGL/SimpleTexturedOpenGL/src/model_loading.cpp 2025-08-18 20:15:00.252020642 +0200
@@ -24,7 +24,7 @@
#endif // _MSC_VER
#define STB_IMAGE_IMPLEMENTATION
-#include "contrib/stb/stb_image.h"
+#include "stb_image.h"
#ifdef _MSC_VER
#pragma warning(default: 4100) // Enable warning 'unreferenced formal parameter'
diff -rupN --no-dereference assimp-6.0.2/test/CMakeLists.txt assimp-6.0.2-new/test/CMakeLists.txt
--- assimp-6.0.2/test/CMakeLists.txt 2025-06-08 21:50:39.000000000 +0200
+++ assimp-6.0.2-new/test/CMakeLists.txt 2025-08-18 20:15:00.253409037 +0200
@@ -43,14 +43,6 @@ INCLUDE_DIRECTORIES(
${Assimp_SOURCE_DIR}/code
)
-if(NOT ASSIMP_HUNTER_ENABLED)
- INCLUDE_DIRECTORIES(
- ${Assimp_SOURCE_DIR}/contrib/googletest/googletest/include
- ${Assimp_SOURCE_DIR}/contrib/googletest/googletest/
- ${Assimp_SOURCE_DIR}/contrib/pugixml/src
- )
-endif()
-
if (MSVC)
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /D_SILENCE_TR1_NAMESPACE_DEPRECATION_WARNING")
endif()
@@ -234,26 +226,11 @@ add_executable( unit
${POST_PROCESSES}
)
-if(ASSIMP_HUNTER_ENABLED)
- hunter_add_package(GTest)
- find_package(GTest CONFIG REQUIRED)
- target_link_libraries(unit GTest::gtest_main GTest::gmock)
-else()
- target_sources(unit PUBLIC ${Assimp_SOURCE_DIR}/contrib/googletest/googletest/src/gtest-all.cc)
-endif()
+find_package(GTest CONFIG REQUIRED)
+target_link_libraries(unit GTest::gtest_main GTest::gmock)
# RapidJSON
-IF(ASSIMP_HUNTER_ENABLED)
- hunter_add_package(RapidJSON)
- find_package(RapidJSON CONFIG REQUIRED)
-ELSE()
- INCLUDE_DIRECTORIES("../contrib/rapidjson/include")
- ADD_DEFINITIONS( -DRAPIDJSON_HAS_STDSTRING=1)
- option( ASSIMP_RAPIDJSON_NO_MEMBER_ITERATOR "Suppress rapidjson warning on MSVC (NOTE: breaks android build)" ON )
- if(ASSIMP_RAPIDJSON_NO_MEMBER_ITERATOR)
- ADD_DEFINITIONS( -DRAPIDJSON_NOMEMBERITERATORCLASS )
- endif()
-ENDIF()
+find_package(RapidJSON CONFIG REQUIRED)
IF (ASSIMP_BUILD_DRACO)
ADD_DEFINITIONS( -DASSIMP_ENABLE_DRACO )
diff -rupN --no-dereference assimp-6.0.2/test/unit/utglTF2ImportExport.cpp assimp-6.0.2-new/test/unit/utglTF2ImportExport.cpp
--- assimp-6.0.2/test/unit/utglTF2ImportExport.cpp 2025-06-08 21:50:39.000000000 +0200
+++ assimp-6.0.2-new/test/unit/utglTF2ImportExport.cpp 2025-08-18 20:15:00.253778700 +0200
@@ -986,7 +986,7 @@ namespace {
rapidjson::Document schemaDoc;
schemaDoc.Parse(R"==({"properties":{"scene" : { "type" : "integer" }}, "required": [ "scene" ]})==");
EXPECT_FALSE(schemaDoc.HasParseError());
- m_schema.reset(new rapidjson::SchemaDocument(schemaDoc, m_schemaName.c_str(), static_cast<rapidjson::SizeType>(m_schemaName.size()), this));
+ m_schema.reset(new rapidjson::SchemaDocument(schemaDoc, 0, 0, this));
}
const rapidjson::SchemaDocument* GetRemoteDocument(const char* uri, rapidjson::SizeType) override {

View file

@ -1,57 +1,73 @@
%define soversion 6
Name: assimp
Version: 3.3.1
Release: 12%{?dist}
Version: 6.0.2
Release: 6%{?dist}
Summary: Library to import various 3D model formats into applications
Group: Development/Libraries
# Assimp is BSD, the bundled openddlparser is MIT.
License: BSD and MIT
URL: http://assimp.sourceforge.net
#Source0: https://github.com/assimp/%{name}/archive/%{commit0}.tar.gz#/%{name}-%{shortcommit0}.tar.gz
# Assimp is BSD
# Bundled contrib/clipper is Boost
# Bundled contrib/Open3DGC is MIT
# Bundled contrib/openddlparser is MIT
# Bundled contrib/stb is MIT
# Bundled contrib/unzip is zlib
# Bundled contrib/zip is unlicense
# Bundled contrib/zlib is zlib
License: BSD-3-Clause AND MIT AND BSL-1.0 AND Unlicense AND Zlib
URL: https://github.com/assimp/assimp
# Github releases include nonfree models, source tarball must be re-generated
# using assimp_generate_tarball.sh
Source0: %{name}-%{version}-free.tar.xz
Source1: assimp_generate_tarball.sh
# Current 3.3.1 not compilable under s390x and ppc64le - BigEndian issues
Patch0: %{name}-3.3.1-unbundle.patch
# Add /usr/lib64 to library lookup paths for python modules
Patch1: %{name}-3.2.0-pythonpath.patch
# Fix library and include paths in assimp-config.cmake
# Fixes rhbz#1263698, not submitted upstream
# Rehashed to 3.3.1
Patch2: 0001-Assimp-cmake-provider-fix.patch
# fix FTBFS on bigendian platform s390x/ppc64
Patch3: assimp-3.3.1-namespace-bigendian.patch
Patch10: assimp-3.3.1-install-pkgconfig.patch
#Upstream backports
# Collada morph animation
Patch100: 0001-Morph-animation-support-for-collada.patch
# Generate doc from CMakeFiles. Backported from Upstream
Patch101: 0001-Enable-doxygen-been-properly-used-from-cmake-build-a.patch
# Strips bundled irrXML out of build files, and allows project to build
# against system versions of the libraries (not yet submitted upstream)
Patch102: 0001-Apply-mechanism-to-decide-use-for-IrrXML-external-or.patch
BuildRequires: boost-devel
BuildRequires: cmake
BuildRequires: dos2unix
BuildRequires: irrlicht-devel
BuildRequires: irrXML-devel
BuildRequires: doxygen
BuildRequires: poly2tri-devel
BuildRequires: gtest-devel
BuildRequires: pkgconfig(zzip-zlib-config)
BuildRequires: pkgconfig(zlib)
BuildRequires: pkgconfig(minizip)
# Un-bundle poly2tri, pugixml, utf8cpp, RapidJSON, clipper
Patch0: %{name}-unbundle.patch
# Add /usr/lib64 to library lookup paths for python modules
Patch1: %{name}-pythonpath.patch
# Prevent export of bundled zlibstatic library
Patch2: %{name}-nozlib.patch
# Exclude the build directory from the doxygen-generated documentation
# Fix HTML_OUTPUT dir in doxyfile
# Fix installing images from doc/architecture
Patch3: %{name}-docs.patch
# Enable ctest
Patch4: %{name}-tests.patch
# Backport fix for CVE-2025-11277
Patch5: https://github.com/assimp/assimp/commit/0978918f7148fbcd3d05cc6573dae7859975a895.patch
# PyAssimp: Re-add 'aiProcess_Triangulate' (#2423174)
Patch6: https://github.com/assimp/assimp/commit/dd98d4aea3d9d2b3544540ea44eeb15c3616dbb7.patch
BuildRequires: boost-devel
BuildRequires: cmake
BuildRequires: doxygen
BuildRequires: earcut-hpp-devel
BuildRequires: gcc-c++
BuildRequires: gtest-devel
BuildRequires: make
BuildRequires: pkgconfig(python3)
BuildRequires: poly2tri-devel
BuildRequires: pugixml-devel
BuildRequires: python3-devel
BuildRequires: zlib-devel
# Need to BR -static packages for header-only libraries for tracking, per
# guidelines
BuildRequires: rapidjson-devel
BuildRequires: rapidjson-static
BuildRequires: stb_image-devel
BuildRequires: stb_image-static
BuildRequires: utf8cpp-devel
BuildRequires: utf8cpp-static
# Incompatible - https://github.com/assimp/assimp/issues/788
#BuildRequires: pkgconfig(polyclipping)
Provides: bundled(polyclipping) = 4.8.8
BuildRequires: pkgconfig(python2)
%if 0%{?fedora} > 23
BuildRequires: pkgconfig(ILUT)
BuildRequires: pkgconfig(python3)
%endif
Provides: bundled(polyclipping) = 4.8.8
Provides: bundled(open3dgc)
Provides: bundled(openddl-parser)
Provides: bundled(unzip)
Provides: bundled(minzip)
%description
Assimp, the Open Asset Import Library, is a free library to import
@ -60,41 +76,27 @@ to provide a full asset conversion pipeline for use in game
engines and real-time rendering systems, but is not limited
to these applications.
%package devel
Summary: Header files and libraries for assimp
Group: Development/Libraries
Requires: %{name}%{?_isa} = %{version}-%{release}
Requires: poly2tri-devel
Requires: pugixml-devel
%description devel
This package contains the header files and libraries
for assimp. If you would like to develop programs using assimp,
you will need to install assimp-devel.
%package -n python2-%{name}
Summary: Python bindings for assimp
Group: Development/Libraries
BuildArch: noarch
Requires: %{name} = %{version}-%{release}
Requires: python2
Provides: %{name}-python = %{version}-%{release}
Obsoletes: %{name}-python < 3.1.1
%description -n python2-%{name}
This package contains the PyAssimp python bindings
%if 0%{?fedora} > 23
%package -n python3-%{name}
Summary: Python 3 bindings for assimp
Group: Development/Libraries
BuildArch: noarch
Requires: %{name} = %{version}-%{release}
Requires: python3
Provides: %{name}-python3 = %{version}-%{release}
Obsoletes: %{name}-python3 < 3.1.1
%description -n python3-%{name}
This package contains the PyAssimp3 python bindings
%endif
%package doc
Summary: Assimp documentation
@ -103,89 +105,237 @@ BuildArch: noarch
%description doc
%{summary}.
%prep
%setup -q
# Get rid of bundled libs so we can't accidently build against them
#rm -r contrib/clipper
rm -r contrib/irrXML
rm -r contrib/zlib
rm -r contrib/unzip
rm -r contrib/poly2tri
%patch0 -p1 -b .unbundle
%patch1 -p1 -b .pythonpath
%patch2 -p1 -b .cmakefix
%patch3 -p1 -b .bigendian
# Need to be upstreamed
%patch10 -p1 -b .pkgconfig
# Backported from upstream
%patch100 -p1 -b .docfix
%patch101 -p1 -b .qt3d
%patch102 -p1 -b .systemirrxml
%autosetup -p1 -n %{name}-%{version}
# Get rid of bundled libs so we can't accidently build against them, except:
# - clipper: Unpackaged
# - Open3DGC: Unpackaged
# - openddlparser: Unpackaged
# - tinyusdz: Unpackaged
# - unzip: Modified minizip
# - zip: Modified minizip
find contrib/ -maxdepth 1 -mindepth 1 \
| grep -Ev '(clipper|Open3DGC|openddlparser|tinyusdz|unzip|zip)' \
| xargs rm -r
mv contrib/openddlparser/LICENSE contrib/openddlparser/LICENSE.openddlparser
%build
mkdir build
pushd build
%cmake .. \
-DASSIMP_LIB_INSTALL_DIR=%{_libdir} \
-DASSIMP_BIN_INSTALL_DIR=%{_bindir} \
-DASSIMP_INCLUDE_INSTALL_DIR=%{_includedir} \
%cmake \
%ifarch s390x ppc64
-DAI_BUILD_BIG_ENDIAN=TRUE \
%endif
-DBUILD_DOCS=ON \
-DHTML_OUTPUT=%{name}-%{version} \
-DCMAKE_INSTALL_DOCDIR=%{_docdir} \
-DASSIMP_WARNINGS_AS_ERRORS=OFF \
-DASSIMP_BUILD_ASSIMP_TOOLS=ON \
-DASSIMP_BUILD_DOCS=ON \
-DASSIMP_IGNORE_GIT_HASH=ON \
-DHAVE_POLY2TRI=ON \
-DPOLY2TRI_INCLUDE_PATH=%{_includedir}/poly2tri \
-DSYSTEM_IRRXML=ON
popd
# To use system polyclipping if assimp ever becomes compatible:
# -DCLIPPER_INCLUDE_PATH=%{_includedir}/polyclipping
make %{?_smp_mflags} -C build
-DPOLY2TRI_LIB=poly2tri \
-DCMAKE_INSTALL_DOCDIR=%{_defaultdocdir}/%{name}
%cmake_build
# Fix file encoding
dos2unix README LICENSE CREDITS port/PyAssimp/README.md
iconv -f iso8859-1 -t utf-8 CREDITS > CREDITS.conv && mv -f CREDITS.conv CREDITS
%install
rm -rf %{buildroot}
make -C build install DESTDIR=%{buildroot}
mkdir -p %{buildroot}%{python2_sitelib}/pyassimp/
install -m0644 port/PyAssimp/pyassimp/*.py %{buildroot}%{python2_sitelib}/pyassimp/
%if 0%{?fedora} > 23
%cmake_install
mkdir -p %{buildroot}%{python3_sitelib}/pyassimp/
install -m0644 port/PyAssimp/pyassimp/*.py %{buildroot}%{python3_sitelib}/pyassimp/
%endif
%post -p /sbin/ldconfig
%postun -p /sbin/ldconfig
%check
# Exclude tests that rely on nonbsd models
%ctest --exclude-regex "utMD5Importer.importBoarMan|utMD5Importer.importBob|utMD2Importer.importDolphin|utMD2Importer.importFlag|utMD2Importer.importHorse|utQ3BSPImportExport.importerTest|utBlenderImporter.importBob|utBlenderImporter.importFleurOptonl|utPMXImporter.importTest|utXImporter.importDwarf" || :
%files
%license LICENSE
%doc README CREDITS
%license LICENSE
%license contrib/clipper/License.txt
%license contrib/openddlparser/LICENSE.openddlparser
%license contrib/zip/UNLICENSE
%doc Readme.md CREDITS
%{_bindir}/assimp
%{_libdir}/*.so.*
%{_libdir}/libassimp.so.%{version}
%{_libdir}/libassimp.so.%{soversion}
%files devel
%{_includedir}/assimp
%{_libdir}/*.so
%{_libdir}/pkgconfig/*.pc
%{_libdir}/cmake/*
%{_includedir}/assimp/
%{_libdir}/libassimp.so
%{_libdir}/pkgconfig/assimp.pc
%{_libdir}/cmake/assimp-*/
%files doc
%{_docdir}/*
%files -n python2-%{name}
%doc port/PyAssimp/README.md
%{python_sitelib}/pyassimp
%if 0%{?fedora} > 23
%files -n python3-%{name}
%doc port/PyAssimp/README.md
%{python3_sitelib}/pyassimp
%endif
%{python3_sitelib}/pyassimp/
%changelog
* Fri Jan 16 2026 Fedora Release Engineering <releng@fedoraproject.org> - 6.0.2-6
- Rebuilt for https://fedoraproject.org/wiki/Fedora_44_Mass_Rebuild
* Sat Dec 27 2025 Sandro Mani <manisandro@gmail.com> - 6.0.2-5
- PyAssimp: Re-add 'aiProcess_Triangulate' (#2423174)
* Sun Dec 14 2025 Sandro Mani <manisandro@gmail.com> - 6.0.2-4
- Backport fix for CVE-2025-11277
* Fri Sep 19 2025 Python Maint <python-maint@redhat.com> - 6.0.2-3
- Rebuilt for Python 3.14.0rc3 bytecode
* Mon Aug 18 2025 Sandro Mani <manisandro@gmail.com> - 6.0.2-2
- Fix pugixml::pugixml dependency ending up in link interface of assimp::assimp
* Fri Aug 15 2025 Sandro Mani <manisandro@gmail.com> - 6.0.2-1
- Update to 6.0.2
* Fri Aug 15 2025 Python Maint <python-maint@redhat.com> - 5.4.3-4
- Rebuilt for Python 3.14.0rc2 bytecode
* Wed Jul 23 2025 Fedora Release Engineering <releng@fedoraproject.org> - 5.4.3-3
- Rebuilt for https://fedoraproject.org/wiki/Fedora_43_Mass_Rebuild
* Tue Jun 03 2025 Python Maint <python-maint@redhat.com> - 5.4.3-2
- Rebuilt for Python 3.14
* Sat Mar 15 2025 Rich Mattes <richmattes@gmail.com> - 5.4.3-1
- Update to release 5.4.3
- Resolves: #2274012
* Thu Jan 16 2025 Fedora Release Engineering <releng@fedoraproject.org> - 5.3.1-5
- Rebuilt for https://fedoraproject.org/wiki/Fedora_42_Mass_Rebuild
* Wed Aug 28 2024 Miroslav Suchý <msuchy@redhat.com> - 5.3.1-4
- convert license to SPDX
* Wed Jul 17 2024 Fedora Release Engineering <releng@fedoraproject.org> - 5.3.1-3
- Rebuilt for https://fedoraproject.org/wiki/Fedora_41_Mass_Rebuild
* Sat Jun 08 2024 Python Maint <python-maint@redhat.com> - 5.3.1-2
- Rebuilt for Python 3.13
* Sun Mar 31 2024 Rich Mattes <richmattes@gmail.com> - 5.3.1-1
- Update to release 5.3.1
- Resolves: rhbz#2256587
* Mon Jan 22 2024 Fedora Release Engineering <releng@fedoraproject.org> - 5.2.5-4
- Rebuilt for https://fedoraproject.org/wiki/Fedora_40_Mass_Rebuild
* Fri Jan 19 2024 Fedora Release Engineering <releng@fedoraproject.org> - 5.2.5-3
- Rebuilt for https://fedoraproject.org/wiki/Fedora_40_Mass_Rebuild
* Wed Jan 03 2024 Scott K Logan <logans@cottsay.net> - 5.2.5-2
- Add pugixml and poly2tri devel dependencies to assimp-devel
* Fri Nov 24 2023 Rich Mattes <richmattes@gmail.com> - 5.2.5-1
- Add check section and fix ctest configuration
* Thu Oct 26 2023 Benjamin A. Beasley <code@musicinmybrain.net> - 5.2.5-1
- Ensure stb_image contains the latest CVE patches
* Fri Jul 28 2023 Scott K Logan <logans@cottsay.net> - 5.2.5-1
- Update to release 5.2.5
* Wed Jul 19 2023 Fedora Release Engineering <releng@fedoraproject.org> - 5.0.1-12
- Rebuilt for https://fedoraproject.org/wiki/Fedora_39_Mass_Rebuild
* Tue Jun 13 2023 Python Maint <python-maint@redhat.com> - 5.0.1-11
- Rebuilt for Python 3.12
* Wed Jan 18 2023 Fedora Release Engineering <releng@fedoraproject.org> - 5.0.1-10
- Rebuilt for https://fedoraproject.org/wiki/Fedora_38_Mass_Rebuild
* Wed Jul 20 2022 Fedora Release Engineering <releng@fedoraproject.org> - 5.0.1-9
- Rebuilt for https://fedoraproject.org/wiki/Fedora_37_Mass_Rebuild
* Mon Jun 13 2022 Python Maint <python-maint@redhat.com> - 5.0.1-8
- Rebuilt for Python 3.11
* Sat Apr 23 2022 Benjamin A. Beasley <code@musicinmybrain.net> - 5.0.1-7
- Security fix for CVE-2022-28041
- Drop dependency on pkgconfig(zzip-zlib-config), no longer available in
zziplib; use zlib directly instead
* Wed Jan 19 2022 Fedora Release Engineering <releng@fedoraproject.org> - 5.0.1-6
- Rebuilt for https://fedoraproject.org/wiki/Fedora_36_Mass_Rebuild
* Thu Dec 30 2021 Rich Mattes <richmattes@gmail.com> - 5.0.1-5
- Correct Unlicense shortname (rhbz#2036000)
* Sat Sep 11 2021 Benjamin A. Beasley <code@musicinmybrain.net> - 5.0.1-4
- Unbundle stb_image
- Add -static BRs for header-only libraries utf8cpp and rapidjson
* Wed Jul 21 2021 Fedora Release Engineering <releng@fedoraproject.org> - 3.3.1-30
- Rebuilt for https://fedoraproject.org/wiki/Fedora_35_Mass_Rebuild
* Fri Jun 04 2021 Python Maint <python-maint@redhat.com> - 3.3.1-29
- Rebuilt for Python 3.10
* Mon Mar 29 2021 Rich Mattes <richmattes@gmail.com> - 5.0.1-3
- Fix library install dir specification (rhbz#1943862)
- Remove un-needed build dependency on ILUT
* Tue Mar 23 2021 Scott K Logan <logans@cottsay.net> - 5.0.1-2
- Add an upstream patch to fix imported library locations
* Sat Feb 27 2021 Rich Mattes <richmattes@gmail.com> - 5.0.1-1
- Update to release 5.0.1
* Tue Jan 26 2021 Fedora Release Engineering <releng@fedoraproject.org> - 3.3.1-28
- Rebuilt for https://fedoraproject.org/wiki/Fedora_34_Mass_Rebuild
* Tue Aug 18 2020 Jeff Law <law@redhat.com> - 3.3.1-27
- Fix minor C++17 issues
* Sat Aug 01 2020 Fedora Release Engineering <releng@fedoraproject.org> - 3.3.1-26
- Second attempt - Rebuilt for
https://fedoraproject.org/wiki/Fedora_33_Mass_Rebuild
* Mon Jul 27 2020 Fedora Release Engineering <releng@fedoraproject.org> - 3.3.1-25
- Rebuilt for https://fedoraproject.org/wiki/Fedora_33_Mass_Rebuild
* Tue May 26 2020 Miro Hrončok <mhroncok@redhat.com> - 3.3.1-24
- Rebuilt for Python 3.9
* Tue Jan 28 2020 Fedora Release Engineering <releng@fedoraproject.org> - 3.3.1-23
- Rebuilt for https://fedoraproject.org/wiki/Fedora_32_Mass_Rebuild
* Thu Oct 03 2019 Miro Hrončok <mhroncok@redhat.com> - 3.3.1-22
- Rebuilt for Python 3.8.0rc1 (#1748018)
* Mon Aug 19 2019 Miro Hrončok <mhroncok@redhat.com> - 3.3.1-21
- Rebuilt for Python 3.8
* Wed Jul 24 2019 Fedora Release Engineering <releng@fedoraproject.org> - 3.3.1-20
- Rebuilt for https://fedoraproject.org/wiki/Fedora_31_Mass_Rebuild
* Thu Jan 31 2019 Fedora Release Engineering <releng@fedoraproject.org> - 3.3.1-19
- Rebuilt for https://fedoraproject.org/wiki/Fedora_30_Mass_Rebuild
* Mon Jan 14 2019 Miro Hrončok <mhroncok@redhat.com> - 3.3.1-18
- Subpackage python2-assimp has been removed
See https://fedoraproject.org/wiki/Changes/Mass_Python_2_Package_Removal
* Tue Aug 28 2018 Patrik Novotný <panovotn@redhat.com> - 3.3.1-17
- update requires to minizip-compat(-devel), rhbz#1609830, rhbz#1615381
* Thu Jul 12 2018 Fedora Release Engineering <releng@fedoraproject.org> - 3.3.1-16
- Rebuilt for https://fedoraproject.org/wiki/Fedora_29_Mass_Rebuild
* Mon Jul 02 2018 Miro Hrončok <mhroncok@redhat.com> - 3.3.1-15
- Rebuilt for Python 3.7
* Wed Feb 07 2018 Fedora Release Engineering <releng@fedoraproject.org> - 3.3.1-14
- Rebuilt for https://fedoraproject.org/wiki/Fedora_28_Mass_Rebuild
* Mon Oct 02 2017 Troy Dawson <tdawson@redhat.com> - 3.3.1-13
- Cleanup spec file conditionals
* Sun Aug 06 2017 Björn Esser <besser82@fedoraproject.org> - 3.3.1-12
- Rebuilt for AutoReq cmake-filesystem

View file

@ -1,11 +1,23 @@
#!/bin/bash
RELEASE=3.3.1
git clone -b v${RELEASE} --depth=1 https://github.com/assimp/assimp.git assimp-${RELEASE}
if [ $# -lt 1 ]; then
echo "Usage: $0 version"
exit 1
fi
cd assimp-${RELEASE}
git checkout -b free
RELEASE=$1
if [ ! -f assimp-$RELEASE.tar.gz ]; then
wget https://github.com/assimp/assimp/archive/v$RELEASE/assimp-$RELEASE.tar.gz
fi
if [ -d assimp-$RELEASE ]; then
rm -fr assimp-$RELEASE
fi
tar xvf assimp-$RELEASE.tar.gz
cd assimp-$RELEASE
find ./ -name "*.dll" -exec git rm -r {} \;
git rm -rf test/models-nonbsd
git commit -m "- Remove non free bits."
git archive --prefix=assimp-${RELEASE}/ free | xz > ../assimp-${RELEASE}-free.tar.xz
rm -r test/models-nonbsd
cd ..
tar czf assimp-$RELEASE-free.tar.xz assimp-$RELEASE

View file

@ -0,0 +1,30 @@
diff -rupN --no-dereference assimp-6.0.2/port/PyAssimp/pyassimp/postprocess.py assimp-6.0.2-new/port/PyAssimp/pyassimp/postprocess.py
--- assimp-6.0.2/port/PyAssimp/pyassimp/postprocess.py 2025-06-08 21:50:39.000000000 +0200
+++ assimp-6.0.2-new/port/PyAssimp/pyassimp/postprocess.py 2025-12-27 19:11:08.846657557 +0100
@@ -36,13 +36,21 @@ aiProcess_JoinIdenticalVertices = 0x2
#
aiProcess_MakeLeftHanded = 0x4
-## <hr>Triangulates all faces of all meshes.
+## <hr>Triangulates all faces of all meshes.
#
# By default the imported mesh data might contain faces with more than 3
-# indices. For rendering you'll usually want all faces to be triangles.
-# This post processing stepaiProcess_ForceGenNormals
-## <hr>Removes some parts of the data structure (animations, materials,
-# light sources, cameras, textures, vertex components).
+# indices. For rendering you'll usually want all faces to be triangles.
+# This post processing step splits up faces with more than 3 indices into
+# triangles. Line and point primitives are *not* modified! If you want
+# 'triangles only' with no other kinds of primitives, try the following
+# solution:
+# - Specify both #aiProcess_Triangulate and #aiProcess_SortByPType
+# - Ignore all point and line meshes when you process assimp's output
+#
+aiProcess_Triangulate = 0x8
+
+# <hr>Removes some parts of the data structure (animations, materials,
+# light sources, cameras, textures, vertex components).
#
# The components to be removed are specified in a separate
# configuration option, <tt>#AI_CONFIG_PP_RVC_FLAGS<tt>. This is quite useful

View file

@ -1 +1 @@
SHA512 (assimp-3.3.1-free.tar.xz) = 249e7e35a357274d296a457ab6ffff5a06480007db7f327d72869448e5f754740487a8def5ed1e1f2324a68aa5a9c2780092cded3d56d685103974bb32e7d761
SHA512 (assimp-6.0.2-free.tar.xz) = c2895d1185d13fdbd25499e6d916d960f124892de7363e9e91db3ed1daef554ebea462e37cbfafbe5be548e5a962f18fc9f213f836579d97e725c17aae58149b