فهرست منبع

Merge branch 'master' of https://github.com/assimp/assimp

Alexander Gessler 13 سال پیش
والد
کامیت
776d8e339b

+ 6 - 6
AssimpConfigVersion.cmake.in

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

+ 31 - 3
CHANGES

@@ -3,6 +3,36 @@ CHANGELOG
 ----------------------------------------------------------------------
 ----------------------------------------------------------------------
 
 
 
 
+3.0 (2012-07-07)
+
+FEATURES:
+   - new export interface similar to the import API. 
+   - Supported export formats: Collada, OBJ, PLY and STL
+   - added new import formats: XGL/ZGL, M3 (experimental)
+   - new postprocessing steps: Debone
+   - vastly improved IFC (Industry Foundation Classes) support
+   - introduced API to query importer meta information (such as supported
+       format versions, full name, maintainer info).
+   - reworked Ogre XML import
+   - C-API now supports per-import properties
+
+FIXES/HOUSEKEEPING:
+
+   - hundreds of bugfixes in all parts of the library
+   - unified naming and cleanup of public headers
+   - improved CMake build system
+   - templatized math library
+   - reduce dependency on boost.thread, only remaining spot
+     is synchronization for the C logging API 
+
+API COMPATIBILITY:
+   - renamed headers, export interface, C API properties and meta data
+     prevent compatibility with code written for 2.0, but in 
+     most cases these can be easily resolved
+   - Note: 3.0 is not binary compatible with 2.0
+
+
+
 
 
 2.0 (2010-11-21)
 2.0 (2010-11-21)
 
 
@@ -44,8 +74,6 @@ API CHANGES:
 
 
 
 
 
 
-
-
 1.1 (2010-04-17)
 1.1 (2010-04-17)
 This is the list of relevant changes from the 1.0 (r412) release to 1.1 (r700).
 This is the list of relevant changes from the 1.0 (r412) release to 1.1 (r700).
 
 
@@ -85,4 +113,4 @@ BREAKING API CHANGES:
 
 
 MINOR API BEHAVIOUR CHANGES:
 MINOR API BEHAVIOUR CHANGES:
  - Change quaternion orientation to suit to the more common convention (-w).
  - Change quaternion orientation to suit to the more common convention (-w).
- - aiString is utf8 now. Not yet consistent, however.
+ - aiString is utf8 now. Not yet consistent, however.

+ 68 - 51
CMakeLists.txt

@@ -2,20 +2,21 @@ cmake_minimum_required( VERSION 2.6 )
 PROJECT( Assimp )
 PROJECT( Assimp )
 
 
 # Define here the needed parameters
 # Define here the needed parameters
-set (ASSIMP_SV_REVISION 1260)
-set (ASSIMP_VERSION_MAJOR 2)
+set (ASSIMP_SV_REVISION 1264)
+set (ASSIMP_VERSION_MAJOR 3)
 set (ASSIMP_VERSION_MINOR 0)
 set (ASSIMP_VERSION_MINOR 0)
 set (ASSIMP_VERSION_PATCH ${ASSIMP_SV_REVISION}) # subversion revision?
 set (ASSIMP_VERSION_PATCH ${ASSIMP_SV_REVISION}) # subversion revision?
 set (ASSIMP_VERSION ${ASSIMP_VERSION_MAJOR}.${ASSIMP_VERSION_MINOR}.${ASSIMP_VERSION_PATCH})
 set (ASSIMP_VERSION ${ASSIMP_VERSION_MAJOR}.${ASSIMP_VERSION_MINOR}.${ASSIMP_VERSION_PATCH})
-set (ASSIMP_SOVERSION 1251)
+set (ASSIMP_SOVERSION 3)
 SET ( PROJECT_VERSION "${ASSIMP_VERSION}" )
 SET ( PROJECT_VERSION "${ASSIMP_VERSION}" )
 
 
-set(PACKAGE_VERSION "0" CACHE STRING "the package-specific version used for uploading the sources")
+set(ASSIMP_PACKAGE_VERSION "0" CACHE STRING "the package-specific version used for uploading the sources")
 
 
-option(OPT_BUILD_PACKAGES "Set to ON to generate CPack configuration files and packaging targets" OFF)
+option(ASSIMP_OPT_BUILD_PACKAGES "Set to ON to generate CPack configuration files and packaging targets" OFF)
 set(CMAKE_MODULE_PATH "${CMAKE_CURRENT_SOURCE_DIR}/cmake-modules")
 set(CMAKE_MODULE_PATH "${CMAKE_CURRENT_SOURCE_DIR}/cmake-modules")
-set(LIBASSIMP_COMPONENT libassimp${ASSIMP_VERSION_MAJOR}.${ASSIMP_VERSION_MAJOR}-r${ASSIMP_SV_REVISION})
-set(CPACK_COMPONENTS_ALL assimp-bin ${LIBASSIMP_COMPONENT} assimp-dev)
+set(LIBASSIMP_COMPONENT libassimp${ASSIMP_VERSION_MAJOR}.${ASSIMP_VERSION_MINOR}-r${ASSIMP_SV_REVISION})
+set(LIBASSIMP-DEV_COMPONENT libassimp${ASSIMP_VERSION_MAJOR}.${ASSIMP_VERSION_MINOR}-r${ASSIMP_SV_REVISION}-dev)
+set(CPACK_COMPONENTS_ALL assimp-bin ${LIBASSIMP_COMPONENT} ${LIBASSIMP-DEV_COMPONENT} assimp-dev)
 
 
 if(CMAKE_COMPILER_IS_GNUCC OR CMAKE_COMPILER_IS_GNUCXX)
 if(CMAKE_COMPILER_IS_GNUCC OR CMAKE_COMPILER_IS_GNUCXX)
   add_definitions(-fPIC) # this is a very important switch and some libraries seem now to have it....
   add_definitions(-fPIC) # this is a very important switch and some libraries seem now to have it....
@@ -37,45 +38,45 @@ IF ( CMAKE_SOURCE_DIR STREQUAL CMAKE_BINARY_DIR )
 ENDIF ( CMAKE_SOURCE_DIR STREQUAL CMAKE_BINARY_DIR )
 ENDIF ( CMAKE_SOURCE_DIR STREQUAL CMAKE_BINARY_DIR )
 
 
 # Cache these to allow the user to override them manually.
 # Cache these to allow the user to override them manually.
-SET( LIB_INSTALL_DIR "lib" CACHE PATH
+SET( ASSIMP_LIB_INSTALL_DIR "lib" CACHE PATH
 	"Path the built library files are installed to." )
 	"Path the built library files are installed to." )
-SET( INCLUDE_INSTALL_DIR "include" CACHE PATH
+SET( ASSIMP_INCLUDE_INSTALL_DIR "include" CACHE PATH
 	"Path the header files are installed to." )
 	"Path the header files are installed to." )
-SET( BIN_INSTALL_DIR "bin" CACHE PATH
+SET( ASSIMP_BIN_INSTALL_DIR "bin" CACHE PATH
 	"Path the tool executables are installed to." )
 	"Path the tool executables are installed to." )
 
 
-SET(DEBUG_POSTFIX "D" CACHE STRING "Debug Postfitx for lib, samples and tools")
+SET(ASSIMP_DEBUG_POSTFIX "D" CACHE STRING "Debug Postfitx for lib, samples and tools")
+
+# Allow the user to build a static library
+SET ( ASSIMP_BUILD_STATIC_LIB OFF CACHE BOOL
+	"Build a static (.a) version of the library"
+)
 
 
 # Generate a pkg-config .pc for the Assimp library.
 # Generate a pkg-config .pc for the Assimp library.
 CONFIGURE_FILE( "${PROJECT_SOURCE_DIR}/assimp.pc.in" "${PROJECT_BINARY_DIR}/assimp.pc" @ONLY )
 CONFIGURE_FILE( "${PROJECT_SOURCE_DIR}/assimp.pc.in" "${PROJECT_BINARY_DIR}/assimp.pc" @ONLY )
-INSTALL( FILES "${PROJECT_BINARY_DIR}/assimp.pc" DESTINATION ${LIB_INSTALL_DIR}/pkgconfig/ COMPONENT assimp-dev)
+INSTALL( FILES "${PROJECT_BINARY_DIR}/assimp.pc" DESTINATION ${ASSIMP_LIB_INSTALL_DIR}/pkgconfig/ COMPONENT ${LIBASSIMP-DEV_COMPONENT})
 
 
 # cmake configuration files
 # cmake configuration files
 configure_file("${CMAKE_CURRENT_SOURCE_DIR}/assimp-config.cmake.in" "${CMAKE_CURRENT_BINARY_DIR}/assimp-config.cmake" @ONLY IMMEDIATE)
 configure_file("${CMAKE_CURRENT_SOURCE_DIR}/assimp-config.cmake.in" "${CMAKE_CURRENT_BINARY_DIR}/assimp-config.cmake" @ONLY IMMEDIATE)
 configure_file("${CMAKE_CURRENT_SOURCE_DIR}/assimp-config-version.cmake.in" "${CMAKE_CURRENT_BINARY_DIR}/assimp-config-version.cmake" @ONLY IMMEDIATE)
 configure_file("${CMAKE_CURRENT_SOURCE_DIR}/assimp-config-version.cmake.in" "${CMAKE_CURRENT_BINARY_DIR}/assimp-config-version.cmake" @ONLY IMMEDIATE)
-install(FILES "${CMAKE_CURRENT_BINARY_DIR}/assimp-config.cmake" "${CMAKE_CURRENT_BINARY_DIR}/assimp-config-version.cmake" DESTINATION "${LIB_INSTALL_DIR}/cmake/assimp-${ASSIMP_VERSION_MAJOR}.${ASSIMP_VERSION_MINOR}" COMPONENT assimp-dev)
+install(FILES "${CMAKE_CURRENT_BINARY_DIR}/assimp-config.cmake" "${CMAKE_CURRENT_BINARY_DIR}/assimp-config-version.cmake" DESTINATION "${ASSIMP_LIB_INSTALL_DIR}/cmake/assimp-${ASSIMP_VERSION_MAJOR}.${ASSIMP_VERSION_MINOR}" COMPONENT ${LIBASSIMP-DEV_COMPONENT})
 
 
 # add make uninstall capability
 # add make uninstall capability
 configure_file("${CMAKE_CURRENT_SOURCE_DIR}/cmake-modules/cmake_uninstall.cmake.in" "${CMAKE_CURRENT_BINARY_DIR}/cmake_uninstall.cmake" IMMEDIATE @ONLY)
 configure_file("${CMAKE_CURRENT_SOURCE_DIR}/cmake-modules/cmake_uninstall.cmake.in" "${CMAKE_CURRENT_BINARY_DIR}/cmake_uninstall.cmake" IMMEDIATE @ONLY)
 add_custom_target(uninstall "${CMAKE_COMMAND}" -P "${CMAKE_CURRENT_BINARY_DIR}/cmake_uninstall.cmake")
 add_custom_target(uninstall "${CMAKE_COMMAND}" -P "${CMAKE_CURRENT_BINARY_DIR}/cmake_uninstall.cmake")
 
 
-# Allow the user to build a static library
-SET ( BUILD_STATIC_LIB OFF CACHE BOOL
-	"Build a static (.a) version of the library"
-)
-
 # Globally enbale Boost resp. the Boost workaround – it is also needed by the
 # Globally enbale Boost resp. the Boost workaround – it is also needed by the
 # tools which include the Assimp headers.
 # tools which include the Assimp headers.
-SET ( ENABLE_BOOST_WORKAROUND OFF CACHE BOOL
+SET ( ASSIMP_ENABLE_BOOST_WORKAROUND OFF CACHE BOOL
 	"If a simple implementation of the used Boost functions is used. Slightly reduces functionality, but enables builds without Boost available."
 	"If a simple implementation of the used Boost functions is used. Slightly reduces functionality, but enables builds without Boost available."
 )
 )
-IF ( ENABLE_BOOST_WORKAROUND )
+IF ( ASSIMP_ENABLE_BOOST_WORKAROUND )
 	INCLUDE_DIRECTORIES( code/BoostWorkaround )
 	INCLUDE_DIRECTORIES( code/BoostWorkaround )
 	ADD_DEFINITIONS( -DASSIMP_BUILD_BOOST_WORKAROUND )
 	ADD_DEFINITIONS( -DASSIMP_BUILD_BOOST_WORKAROUND )
 	MESSAGE( STATUS "Building a non-boost version of Assimp." )
 	MESSAGE( STATUS "Building a non-boost version of Assimp." )
-ELSE ( ENABLE_BOOST_WORKAROUND )
+ELSE ( ASSIMP_ENABLE_BOOST_WORKAROUND )
 	SET( Boost_DETAILED_FAILURE_MSG ON )
 	SET( Boost_DETAILED_FAILURE_MSG ON )
-	SET( Boost_ADDITIONAL_VERSIONS "1.47" "1.47.0" "1.48.0" "1.48" "1.49" "1.49.0")	
+	SET( Boost_ADDITIONAL_VERSIONS "1.47" "1.47.0" "1.48.0" "1.48" "1.49" "1.49.0" "1.50" "1.50.0" "1.51" "1.51.0")	
 	FIND_PACKAGE( Boost )
 	FIND_PACKAGE( Boost )
 	IF ( NOT Boost_FOUND )
 	IF ( NOT Boost_FOUND )
 		MESSAGE( FATAL_ERROR
 		MESSAGE( FATAL_ERROR
@@ -86,10 +87,10 @@ ELSE ( ENABLE_BOOST_WORKAROUND )
 	ENDIF ( NOT Boost_FOUND )
 	ENDIF ( NOT Boost_FOUND )
 
 
 	INCLUDE_DIRECTORIES( ${Boost_INCLUDE_DIRS} )
 	INCLUDE_DIRECTORIES( ${Boost_INCLUDE_DIRS} )
-ENDIF ( ENABLE_BOOST_WORKAROUND )
+ENDIF ( ASSIMP_ENABLE_BOOST_WORKAROUND )
 
 
 
 
-SET ( NO_EXPORT OFF CACHE BOOL
+SET ( ASSIMP_NO_EXPORT OFF CACHE BOOL
 	"Disable Assimp's export functionality." 
 	"Disable Assimp's export functionality." 
 )
 )
 
 
@@ -116,12 +117,16 @@ if (PKG_CONFIG_FOUND)
 	PKG_CHECK_MODULES(UNZIP minizip)
 	PKG_CHECK_MODULES(UNZIP minizip)
 endif (PKG_CONFIG_FOUND)
 endif (PKG_CONFIG_FOUND)
 
 
-IF ( NO_EXPORT )
+IF ( ASSIMP_NO_EXPORT )
 	ADD_DEFINITIONS( -DASSIMP_BUILD_NO_EXPORT)
 	ADD_DEFINITIONS( -DASSIMP_BUILD_NO_EXPORT)
 	MESSAGE( STATUS "Build an import-only version of Assimp." )
 	MESSAGE( STATUS "Build an import-only version of Assimp." )
-ENDIF( NO_EXPORT )
-
+ENDIF( ASSIMP_NO_EXPORT )
 
 
+# if(CMAKE_CL_64)
+# 	set(ASSIMP_BUILD_ARCHITECTURE "amd64")
+# else(CMAKE_CL_64)
+# 	set(ASSIMP_BUILD_ARCHITECTURE "x86")
+# endif(CMAKE_CL_64)
 SET ( ASSIMP_BUILD_ARCHITECTURE "" CACHE STRING 
 SET ( ASSIMP_BUILD_ARCHITECTURE "" CACHE STRING 
 	"describe the current architecture."
 	"describe the current architecture."
 )
 )
@@ -130,6 +135,7 @@ ELSE  ( ASSIMP_BUILD_ARCHITECTURE STREQUAL "")
 	ADD_DEFINITIONS ( -D'ASSIMP_BUILD_ARCHITECTURE="${ASSIMP_BUILD_ARCHITECTURE}"' )
 	ADD_DEFINITIONS ( -D'ASSIMP_BUILD_ARCHITECTURE="${ASSIMP_BUILD_ARCHITECTURE}"' )
 ENDIF ( ASSIMP_BUILD_ARCHITECTURE STREQUAL "")
 ENDIF ( ASSIMP_BUILD_ARCHITECTURE STREQUAL "")
 
 
+# ${CMAKE_GENERATOR}
 SET ( ASSIMP_BUILD_COMPILER "" CACHE STRING 
 SET ( ASSIMP_BUILD_COMPILER "" CACHE STRING 
 	"describe the current compiler."
 	"describe the current compiler."
 )
 )
@@ -142,46 +148,51 @@ MARK_AS_ADVANCED ( ASSIMP_BUILD_ARCHITECTURE ASSIMP_BUILD_COMPILER )
 
 
 
 
 ADD_SUBDIRECTORY( code/ )
 ADD_SUBDIRECTORY( code/ )
-SET ( BUILD_ASSIMP_TOOLS ON CACHE BOOL
+SET ( ASSIMP_BUILD_ASSIMP_TOOLS ON CACHE BOOL
 	"If the supplementary tools for Assimp are built in addition to the library."
 	"If the supplementary tools for Assimp are built in addition to the library."
 )
 )
-IF ( BUILD_ASSIMP_TOOLS )
+IF ( ASSIMP_BUILD_ASSIMP_TOOLS )
 	IF ( WIN32 )
 	IF ( WIN32 )
 		ADD_SUBDIRECTORY( tools/assimp_view/ )
 		ADD_SUBDIRECTORY( tools/assimp_view/ )
 	ENDIF ( WIN32 )
 	ENDIF ( WIN32 )
 	ADD_SUBDIRECTORY( tools/assimp_cmd/ )
 	ADD_SUBDIRECTORY( tools/assimp_cmd/ )
-ENDIF ( BUILD_ASSIMP_TOOLS )
+ENDIF ( ASSIMP_BUILD_ASSIMP_TOOLS )
 
 
-SET ( BUILD_ASSIMP_SAMPLES ON CACHE BOOL
+SET ( ASSIMP_BUILD_SAMPLES OFF CACHE BOOL
 	"If the official samples are built as well (needs Glut)."
 	"If the official samples are built as well (needs Glut)."
 )
 )
 
 
-IF ( BUILD_ASSIMP_SAMPLES)
+IF ( ASSIMP_BUILD_SAMPLES)
 	IF ( WIN32 )
 	IF ( WIN32 )
 		ADD_SUBDIRECTORY( samples/SimpleTexturedOpenGL/ )
 		ADD_SUBDIRECTORY( samples/SimpleTexturedOpenGL/ )
 	ENDIF ( WIN32 )
 	ENDIF ( WIN32 )
 	ADD_SUBDIRECTORY( samples/SimpleOpenGL/ )
 	ADD_SUBDIRECTORY( samples/SimpleOpenGL/ )
-ENDIF ( BUILD_ASSIMP_SAMPLES )
-
-SET ( BUILD_TESTS OFF CACHE BOOL
-	"If the test suite for Assimp is built in addition to the library."
-)
-IF ( BUILD_TESTS )
-	IF ( WIN32 )
+ENDIF ( ASSIMP_BUILD_SAMPLES )
+
+IF ( WIN32 )
+	SET ( ASSIMP_BUILD_TESTS OFF CACHE BOOL
+		"If the test suite for Assimp is built in addition to the library."
+	)
+	
+	IF ( ASSIMP_BUILD_TESTS )
 		ADD_SUBDIRECTORY( test/ )
 		ADD_SUBDIRECTORY( test/ )
-	ELSE ( WIN32 )
-		MESSAGE( WARNING "The Assimp test suite is currently Windows-only." )
-	ENDIF ( WIN32 )
-ENDIF ( BUILD_TESTS )
+	ENDIF ( ASSIMP_BUILD_TESTS )
+ENDIF ( WIN32 )
+
+IF(MSVC)
+	SET ( ASSIMP_INSTALL_PDB ON CACHE BOOL
+		"Install MSVC debug files."
+	)
+ENDIF(MSVC)
 
 
-if(CMAKE_CPACK_COMMAND AND UNIX AND OPT_BUILD_PACKAGES)
+if(CMAKE_CPACK_COMMAND AND UNIX AND ASSIMP_OPT_BUILD_PACKAGES)
   # Packing information
   # Packing information
   set(CPACK_PACKAGE_NAME assimp{ASSIMP_VERSION_MAJOR})
   set(CPACK_PACKAGE_NAME assimp{ASSIMP_VERSION_MAJOR})
   set(CPACK_PACKAGE_CONTACT "" CACHE STRING "Package maintainer and PGP signer.")
   set(CPACK_PACKAGE_CONTACT "" CACHE STRING "Package maintainer and PGP signer.")
   set(CPACK_PACKAGE_VENDOR "http://assimp.sourceforge.net/")
   set(CPACK_PACKAGE_VENDOR "http://assimp.sourceforge.net/")
-  set(CPACK_PACKAGE_DISPLAY_NAME "Assimp ${ASSIMP_VERSION}.${ASSIMP_VERSION_MINOR}")
-  set(CPACK_PACKAGE_DESCRIPTION_SUMMARY " - Open Asset Import Library r1252")
-  set(CPACK_PACKAGE_VERSION ${ASSIMP_VERSION}.${PACKAGE_VERSION})
+  set(CPACK_PACKAGE_DISPLAY_NAME "Assimp ${ASSIMP_VERSION}")
+  set(CPACK_PACKAGE_DESCRIPTION_SUMMARY " - Open Asset Import Library ${ASSIMP_VERSION}")
+  set(CPACK_PACKAGE_VERSION ${ASSIMP_VERSION}.${ASSIMP_PACKAGE_VERSION})
   set(CPACK_PACKAGE_VERSION_MAJOR ${ASSIMP_VERSION_MAJOR})
   set(CPACK_PACKAGE_VERSION_MAJOR ${ASSIMP_VERSION_MAJOR})
   set(CPACK_PACKAGE_VERSION_MINOR ${ASSIMP_VERSION_MINOR})
   set(CPACK_PACKAGE_VERSION_MINOR ${ASSIMP_VERSION_MINOR})
   set(CPACK_PACKAGE_VERSION_PATCH ${ASSIMP_VERSION_PATCH})
   set(CPACK_PACKAGE_VERSION_PATCH ${ASSIMP_VERSION_PATCH})
@@ -189,20 +200,26 @@ if(CMAKE_CPACK_COMMAND AND UNIX AND OPT_BUILD_PACKAGES)
   #set(CPACK_PACKAGE_DESCRIPTION_FILE ${CMAKE_CURRENT_SOURCE_DIR}/description)
   #set(CPACK_PACKAGE_DESCRIPTION_FILE ${CMAKE_CURRENT_SOURCE_DIR}/description)
   set(CPACK_RESOURCE_FILE_LICENSE ${CMAKE_CURRENT_SOURCE_DIR}/LICENSE)
   set(CPACK_RESOURCE_FILE_LICENSE ${CMAKE_CURRENT_SOURCE_DIR}/LICENSE)
 
 
+  string(TOUPPER ${LIBASSIMP_COMPONENT} LIBASSIMP_COMPONENT_UPPER)
+  string(TOUPPER ${LIBASSIMP-DEV_COMPONENT} LIBASSIMP-DEV_COMPONENT_UPPER)
+
   set(CPACK_COMPONENT_ASSIMP-BIN_DISPLAY_NAME "tools")
   set(CPACK_COMPONENT_ASSIMP-BIN_DISPLAY_NAME "tools")
-  set(CPACK_COMPONENT_ASSIMP-DEV_DISPLAY_NAME "common headers and installs")
-  set(CPACK_COMPONENT_${LIBASSIMP_COMPONENT}_DISPLAY_NAME "libraries")
   set(CPACK_COMPONENT_ASSIMP-BIN_DEPENDS ${LIBASSIMP_COMPONENT})
   set(CPACK_COMPONENT_ASSIMP-BIN_DEPENDS ${LIBASSIMP_COMPONENT})
-  set(CPACK_COMPONENT_ASSIMP-DEV_DEPENDS ${LIBASSIMP_COMPONENT})
+  set(CPACK_COMPONENT_${LIBASSIMP_COMPONENT_UPPER}_DISPLAY_NAME "libraries")
+  set(CPACK_COMPONENT_${LIBASSIMP-DEV_COMPONENT_UPPER}_DISPLAY_NAME "common headers and installs")
+  set(CPACK_COMPONENT_${LIBASSIMP-DEV_COMPONENT_UPPER}_DEPENDS ${LIBASSIMP_COMPONENT})
+  set(CPACK_COMPONENT_ASSIMP-DEV_DISPLAY_NAME ${CPACK_COMPONENT_${LIBASSIMP-DEV_COMPONENT}_DISPLAY_NAME})
+  set(CPACK_COMPONENT_ASSIMP-DEV_DEPENDS ${LIBASSIMP-DEV_COMPONENT})
   set(CPACK_DEBIAN_BUILD_DEPENDS debhelper cmake libboost-dev libboost-thread-dev libboost-math-dev zlib1g-dev pkg-config)
   set(CPACK_DEBIAN_BUILD_DEPENDS debhelper cmake libboost-dev libboost-thread-dev libboost-math-dev zlib1g-dev pkg-config)
 
 
   # debian
   # debian
   set(CPACK_DEBIAN_PACKAGE_PRIORITY optional)
   set(CPACK_DEBIAN_PACKAGE_PRIORITY optional)
+  set(CPACK_DEBIAN_CMAKE_OPTIONS "-DBUILD_ASSIMP_SAMPLES:BOOL=${ASSIMP_BUILD_SAMPLES}")
   set(CPACK_DEBIAN_PACKAGE_SECTION libs)
   set(CPACK_DEBIAN_PACKAGE_SECTION libs)
   set(CPACK_DEBIAN_PACKAGE_DEPENDS ${CPACK_COMPONENTS_ALL})
   set(CPACK_DEBIAN_PACKAGE_DEPENDS ${CPACK_COMPONENTS_ALL})
   set(CPACK_DEBIAN_PACKAGE_SUGGESTS)
   set(CPACK_DEBIAN_PACKAGE_SUGGESTS)
   set(CPACK_DEBIAN_PACKAGE_NAME assimp)
   set(CPACK_DEBIAN_PACKAGE_NAME assimp)
-  set(CPACK_DEBIAN_PACKAGE_REMOVE_SOURCE_FILES contrib/cppunit-1.12.1 contrib/cppunit_note.txt contrib/zlib workspaces test doc obj )
+  set(CPACK_DEBIAN_PACKAGE_REMOVE_SOURCE_FILES contrib/cppunit-1.12.1 contrib/cppunit_note.txt contrib/zlib workspaces test doc obj samples packaging)
   set(CPACK_DEBIAN_PACKAGE_SOURCE_COPY svn export --force)
   set(CPACK_DEBIAN_PACKAGE_SOURCE_COPY svn export --force)
   set(CPACK_DEBIAN_CHANGELOG)
   set(CPACK_DEBIAN_CHANGELOG)
   execute_process(COMMAND lsb_release -is
   execute_process(COMMAND lsb_release -is

+ 0 - 1
INSTALL

@@ -3,7 +3,6 @@
 Open Asset Import Library (assimp) INSTALL 
 Open Asset Import Library (assimp) INSTALL 
 ========================================================================
 ========================================================================
 
 
-
 ------------------------------
 ------------------------------
 Getting the documentation
 Getting the documentation
 ------------------------------
 ------------------------------

+ 38 - 0
LICENSE

@@ -35,6 +35,8 @@ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 
 
 
 
 
 
+******************************************************************************
+
 AN EXCEPTION applies to all files in the ./test/models-nonbsd folder.
 AN EXCEPTION applies to all files in the ./test/models-nonbsd folder.
 These are 3d models for testing purposes, from various free sources
 These are 3d models for testing purposes, from various free sources
 on the internet. They are - unless otherwise stated - copyright of
 on the internet. They are - unless otherwise stated - copyright of
@@ -44,3 +46,39 @@ on the use of their work. For any of these models, see
 are a copyright holder and believe that we credited you inproperly or 
 are a copyright holder and believe that we credited you inproperly or 
 if you don't want your files to appear in the repository.
 if you don't want your files to appear in the repository.
 
 
+
+******************************************************************************
+
+Poly2Tri Copyright (c) 2009-2010, Poly2Tri Contributors
+http://code.google.com/p/poly2tri/
+
+All rights reserved.
+Redistribution and use 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 Poly2Tri nor the names of its contributors may be
+  used to endorse or promote products derived from this software without specific
+  prior written permission.
+
+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.
+
+
+
+
+
+

+ 9 - 8
assimp-config-version.cmake.in

@@ -1,12 +1,13 @@
-set( PACKAGE_VERSION "@ASSIMP_VERSION@" )
-if( "${PACKAGE_FIND_VERSION}" VERSION_EQUAL "@ASSIMP_VERSION@")
-  set(PACKAGE_VERSION_EXACT 1)
+set( ASSIMP_PACKAGE_VERSION "@ASSIMP_VERSION@" )
+if( "${ASSIMP_PACKAGE_FIND_VERSION}" VERSION_EQUAL "@ASSIMP_VERSION@")
+  set(ASSIMP_PACKAGE_VERSION_EXACT 1)
 endif()
 endif()
-if( "${PACKAGE_FIND_VERSION_MAJOR}.${PACKAGE_FIND_VERSION_MINOR}" EQUAL "@ASSIMP_SOVERSION@" )
-  set(PACKAGE_VERSION_COMPATIBLE 1)
-elseif( "${PACKAGE_FIND_VERSION_MAJOR}" EQUAL "@ASSIMP_VERSION_MAJOR@" )
+if( "${ASSIMP_PACKAGE_FIND_VERSION_MAJOR}.${ASSIMP_PACKAGE_FIND_VERSION_MINOR}" EQUAL "@ASSIMP_SOVERSION@" )
+  set(ASSIMP_PACKAGE_VERSION_COMPATIBLE 1)
+elseif( "${ASSIMP_PACKAGE_FIND_VERSION_MAJOR}" EQUAL "@ASSIMP_VERSION_MAJOR@" )
   # for now backward compatible if minor version is less
   # for now backward compatible if minor version is less
-  if( ${PACKAGE_FIND_VERSION_MINOR}  LESS @ASSIMP_VERSION_MINOR@ )
-    set(PACKAGE_VERSION_COMPATIBLE 1)
+  if( ${ASSIMP_PACKAGE_FIND_VERSION_MINOR}  LESS @ASSIMP_VERSION_MINOR@ )
+    set(ASSIMP_PACKAGE_VERSION_COMPATIBLE 1)
   endif()
   endif()
 endif()
 endif()
+set( ASSIMP_STATIC_LIB "@ASSIMP_BUILD_STATIC_LIB@")

+ 3 - 3
assimp-config.cmake.in

@@ -26,9 +26,9 @@ if( MSVC )
   else()
   else()
     set(MSVC_PREFIX "vc100")
     set(MSVC_PREFIX "vc100")
   endif()
   endif()
-  set(ASSIMP_LIBRARY_SUFFIX "-${MSVC_PREFIX}-mt" CACHE STRING "the suffix for the assimp windows library" FORCE)
+  set(ASSIMP_LIBRARY_SUFFIX "@ASSIMP_LIBRARY_SUFFIX@-${MSVC_PREFIX}-mt" CACHE STRING "the suffix for the assimp windows library" FORCE)
 else()
 else()
-  set(ASSIMP_LIBRARY_SUFFIX )
+  set(ASSIMP_LIBRARY_SUFFIX "@ASSIMP_LIBRARY_SUFFIX@" CACHE STRING "the suffix for the openrave libraries" FORCE)
 endif()
 endif()
 
 
 set( ASSIMP_CXX_FLAGS ) # dynamically linked library
 set( ASSIMP_CXX_FLAGS ) # dynamically linked library
@@ -39,7 +39,7 @@ endif()
 set( ASSIMP_LINK_FLAGS "" )
 set( ASSIMP_LINK_FLAGS "" )
 set( ASSIMP_LIBRARY_DIRS "${ASSIMP_ROOT_DIR}/@LIB_INSTALL_DIR@")
 set( ASSIMP_LIBRARY_DIRS "${ASSIMP_ROOT_DIR}/@LIB_INSTALL_DIR@")
 set( ASSIMP_INCLUDE_DIRS "${ASSIMP_ROOT_DIR}/@INCLUDE_INSTALL_DIR@")
 set( ASSIMP_INCLUDE_DIRS "${ASSIMP_ROOT_DIR}/@INCLUDE_INSTALL_DIR@")
-set( ASSIMP_LIBRARIES assimp)
+set( ASSIMP_LIBRARIES assimp${ASSIMP_LIBRARY_SUFFIX})
 
 
 # the boost version assimp was compiled with
 # the boost version assimp was compiled with
 set( ASSIMP_Boost_VERSION "@Boost_MAJOR_VERSION@.@Boost_MINOR_VERSION@")
 set( ASSIMP_Boost_VERSION "@Boost_MAJOR_VERSION@.@Boost_MINOR_VERSION@")

+ 1 - 1
assimp.pc.in

@@ -6,5 +6,5 @@ includedir=@CMAKE_INSTALL_PREFIX@/@INCLUDE_INSTALL_DIR@/assimp
 Name: @CMAKE_PROJECT_NAME@
 Name: @CMAKE_PROJECT_NAME@
 Description: Import various well-known 3D model formats in an uniform manner.
 Description: Import various well-known 3D model formats in an uniform manner.
 Version: @PROJECT_VERSION@
 Version: @PROJECT_VERSION@
-Libs: -L${libdir} -lassimp
+Libs: -L${libdir} -lassimp@ASSIMP_LIBRARY_SUFFIX@
 Cflags: -I${includedir} 
 Cflags: -I${includedir} 

+ 100 - 0
cmake-modules/FindDirectX.cmake

@@ -0,0 +1,100 @@
+#-------------------------------------------------------------------
+# This file is part of the CMake build system for OGRE
+#     (Object-oriented Graphics Rendering Engine)
+# For the latest info, see http://www.ogre3d.org/
+#
+# The contents of this file are placed in the public domain. Feel
+# free to make use of it in any way you like.
+#-------------------------------------------------------------------
+
+# -----------------------------------------------------------------------------
+# Find DirectX SDK
+# Define:
+# DirectX_FOUND
+# DirectX_INCLUDE_DIR
+# DirectX_LIBRARY
+# DirectX_ROOT_DIR
+
+if(WIN32) # The only platform it makes sense to check for DirectX SDK
+  include(FindPkgMacros)
+  findpkg_begin(DirectX)
+  
+  # Get path, convert backslashes as ${ENV_DXSDK_DIR}
+  getenv_path(DXSDK_DIR)
+  getenv_path(DIRECTX_HOME)
+  getenv_path(DIRECTX_ROOT)
+  getenv_path(DIRECTX_BASE)
+  
+  # construct search paths
+  set(DirectX_PREFIX_PATH 
+    "${DXSDK_DIR}" "${ENV_DXSDK_DIR}"
+    "${DIRECTX_HOME}" "${ENV_DIRECTX_HOME}"
+    "${DIRECTX_ROOT}" "${ENV_DIRECTX_ROOT}"
+    "${DIRECTX_BASE}" "${ENV_DIRECTX_BASE}"
+    "C:/apps_x86/Microsoft DirectX SDK*"
+    "C:/Program Files (x86)/Microsoft DirectX SDK*"
+    "C:/apps/Microsoft DirectX SDK*"
+    "C:/Program Files/Microsoft DirectX SDK*"
+	"$ENV{ProgramFiles}/Microsoft DirectX SDK*"
+  )
+  create_search_paths(DirectX)
+  # redo search if prefix path changed
+  clear_if_changed(DirectX_PREFIX_PATH
+    DirectX_LIBRARY
+	DirectX_INCLUDE_DIR
+  )
+  
+  find_path(DirectX_INCLUDE_DIR NAMES d3d9.h HINTS ${DirectX_INC_SEARCH_PATH})
+  # dlls are in DirectX_ROOT_DIR/Developer Runtime/x64|x86
+  # lib files are in DirectX_ROOT_DIR/Lib/x64|x86
+  if(CMAKE_CL_64)
+    set(DirectX_LIBPATH_SUFFIX "x64")
+  else(CMAKE_CL_64)
+    set(DirectX_LIBPATH_SUFFIX "x86")
+  endif(CMAKE_CL_64)
+  find_library(DirectX_LIBRARY NAMES d3d9 HINTS ${DirectX_LIB_SEARCH_PATH} PATH_SUFFIXES ${DirectX_LIBPATH_SUFFIX})
+  find_library(DirectX_D3DX9_LIBRARY NAMES d3dx9 HINTS ${DirectX_LIB_SEARCH_PATH} PATH_SUFFIXES ${DirectX_LIBPATH_SUFFIX})
+  find_library(DirectX_DXERR_LIBRARY NAMES DxErr HINTS ${DirectX_LIB_SEARCH_PATH} PATH_SUFFIXES ${DirectX_LIBPATH_SUFFIX})
+  find_library(DirectX_DXGUID_LIBRARY NAMES dxguid HINTS ${DirectX_LIB_SEARCH_PATH} PATH_SUFFIXES ${DirectX_LIBPATH_SUFFIX})
+  
+
+  # look for dxgi (needed by both 10 and 11)
+  find_library(DirectX_DXGI_LIBRARY NAMES dxgi HINTS ${DirectX_LIB_SEARCH_PATH} PATH_SUFFIXES ${DirectX_LIBPATH_SUFFIX})
+  
+  # look for d3dcompiler (needed by 11)
+  find_library(DirectX_D3DCOMPILER_LIBRARY NAMES d3dcompiler HINTS ${DirectX_LIB_SEARCH_PATH} PATH_SUFFIXES ${DirectX_LIBPATH_SUFFIX})
+
+  findpkg_finish(DirectX)
+  set(DirectX_LIBRARIES ${DirectX_LIBRARIES} 
+    ${DirectX_D3DX9_LIBRARY}
+    ${DirectX_DXERR_LIBRARY}
+    ${DirectX_DXGUID_LIBRARY}
+  )
+  
+  mark_as_advanced(DirectX_D3DX9_LIBRARY DirectX_DXERR_LIBRARY DirectX_DXGUID_LIBRARY
+    DirectX_DXGI_LIBRARY DirectX_D3DCOMPILER_LIBRARY)
+  
+
+  # look for D3D11 components
+  if (DirectX_FOUND)
+    find_path(DirectX_D3D11_INCLUDE_DIR NAMES D3D11Shader.h HINTS ${DirectX_INC_SEARCH_PATH})
+	get_filename_component(DirectX_LIBRARY_DIR "${DirectX_LIBRARY}" PATH)
+	message(STATUS "DX lib dir: ${DirectX_LIBRARY_DIR}")
+    find_library(DirectX_D3D11_LIBRARY NAMES d3d11 HINTS ${DirectX_LIB_SEARCH_PATH} PATH_SUFFIXES ${DirectX_LIBPATH_SUFFIX})
+    find_library(DirectX_D3DX11_LIBRARY NAMES d3dx11 HINTS ${DirectX_LIB_SEARCH_PATH} PATH_SUFFIXES ${DirectX_LIBPATH_SUFFIX})	
+	if (DirectX_D3D11_INCLUDE_DIR AND DirectX_D3D11_LIBRARY)
+	  set(DirectX_D3D11_FOUND TRUE)
+	  set(DirectX_D3D11_INCLUDE_DIR ${DirectX_D3D11_INCLUDE_DIR})
+	  set(DirectX_D3D11_LIBRARIES ${DirectX_D3D11_LIBRARIES}
+	    ${DirectX_D3D11_LIBRARY}
+	    ${DirectX_D3DX11_LIBRARY}
+	    ${DirectX_DXGI_LIBRARY}
+        ${DirectX_DXERR_LIBRARY}
+        ${DirectX_DXGUID_LIBRARY}
+        ${DirectX_D3DCOMPILER_LIBRARY}        	  
+      )	
+    endif ()
+	mark_as_advanced(DirectX_D3D11_INCLUDE_DIR DirectX_D3D11_LIBRARY DirectX_D3DX11_LIBRARY)
+  endif ()
+  
+endif(WIN32)

+ 142 - 0
cmake-modules/FindPkgMacros.cmake

@@ -0,0 +1,142 @@
+#-------------------------------------------------------------------
+# This file is part of the CMake build system for OGRE
+#     (Object-oriented Graphics Rendering Engine)
+# For the latest info, see http://www.ogre3d.org/
+#
+# The contents of this file are placed in the public domain. Feel
+# free to make use of it in any way you like.
+#-------------------------------------------------------------------
+
+##################################################################
+# Provides some common functionality for the FindPackage modules
+##################################################################
+
+# Begin processing of package
+macro(findpkg_begin PREFIX)
+  if (NOT ${PREFIX}_FIND_QUIETLY)
+    message(STATUS "Looking for ${PREFIX}...")
+  endif ()
+endmacro(findpkg_begin)
+
+# Display a status message unless FIND_QUIETLY is set
+macro(pkg_message PREFIX)
+  if (NOT ${PREFIX}_FIND_QUIETLY)
+    message(STATUS ${ARGN})
+  endif ()
+endmacro(pkg_message)
+
+# Get environment variable, define it as ENV_$var and make sure backslashes are converted to forward slashes
+macro(getenv_path VAR)
+   set(ENV_${VAR} $ENV{${VAR}})
+   # replace won't work if var is blank
+   if (ENV_${VAR})
+     string( REGEX REPLACE "\\\\" "/" ENV_${VAR} ${ENV_${VAR}} )
+   endif ()
+endmacro(getenv_path)
+
+# Construct search paths for includes and libraries from a PREFIX_PATH
+macro(create_search_paths PREFIX)
+  foreach(dir ${${PREFIX}_PREFIX_PATH})
+    set(${PREFIX}_INC_SEARCH_PATH ${${PREFIX}_INC_SEARCH_PATH}
+      ${dir}/include ${dir}/include/${PREFIX} ${dir}/Headers)
+    set(${PREFIX}_LIB_SEARCH_PATH ${${PREFIX}_LIB_SEARCH_PATH}
+      ${dir}/lib ${dir}/lib/${PREFIX} ${dir}/Libs)
+  endforeach(dir)
+  set(${PREFIX}_FRAMEWORK_SEARCH_PATH ${${PREFIX}_PREFIX_PATH})
+endmacro(create_search_paths)
+
+# clear cache variables if a certain variable changed
+macro(clear_if_changed TESTVAR)
+  # test against internal check variable
+  if (NOT "${${TESTVAR}}" STREQUAL "${${TESTVAR}_INT_CHECK}")
+    message(STATUS "${TESTVAR} changed.")
+    foreach(var ${ARGN})
+      set(${var} "NOTFOUND" CACHE STRING "x" FORCE)
+    endforeach(var)
+  endif ()
+  set(${TESTVAR}_INT_CHECK ${${TESTVAR}} CACHE INTERNAL "x" FORCE)
+endmacro(clear_if_changed)
+
+# Try to get some hints from pkg-config, if available
+macro(use_pkgconfig PREFIX PKGNAME)
+  find_package(PkgConfig)
+  if (PKG_CONFIG_FOUND)
+    pkg_check_modules(${PREFIX} ${PKGNAME})
+  endif ()
+endmacro (use_pkgconfig)
+
+# Couple a set of release AND debug libraries (or frameworks)
+macro(make_library_set PREFIX)
+  if (${PREFIX}_FWK)
+    set(${PREFIX} ${${PREFIX}_FWK})
+  elseif (${PREFIX}_REL AND ${PREFIX}_DBG)
+    set(${PREFIX} optimized ${${PREFIX}_REL} debug ${${PREFIX}_DBG})
+  elseif (${PREFIX}_REL)
+    set(${PREFIX} ${${PREFIX}_REL})
+  elseif (${PREFIX}_DBG)
+    set(${PREFIX} ${${PREFIX}_DBG})
+  endif ()
+endmacro(make_library_set)
+
+# Generate debug names from given release names
+macro(get_debug_names PREFIX)
+  foreach(i ${${PREFIX}})
+    set(${PREFIX}_DBG ${${PREFIX}_DBG} ${i}d ${i}D ${i}_d ${i}_D ${i}_debug ${i})
+  endforeach(i)
+endmacro(get_debug_names)
+
+# Add the parent dir from DIR to VAR 
+macro(add_parent_dir VAR DIR)
+  get_filename_component(${DIR}_TEMP "${${DIR}}/.." ABSOLUTE)
+  set(${VAR} ${${VAR}} ${${DIR}_TEMP})
+endmacro(add_parent_dir)
+
+# Do the final processing for the package find.
+macro(findpkg_finish PREFIX)
+  # skip if already processed during this run
+  if (NOT ${PREFIX}_FOUND)
+    if (${PREFIX}_INCLUDE_DIR AND ${PREFIX}_LIBRARY)
+      set(${PREFIX}_FOUND TRUE)
+      set(${PREFIX}_INCLUDE_DIRS ${${PREFIX}_INCLUDE_DIR})
+      set(${PREFIX}_LIBRARIES ${${PREFIX}_LIBRARY})
+      if (NOT ${PREFIX}_FIND_QUIETLY)
+        message(STATUS "Found ${PREFIX}: ${${PREFIX}_LIBRARIES}")
+      endif ()
+    else ()
+      if (NOT ${PREFIX}_FIND_QUIETLY)
+        message(STATUS "Could not locate ${PREFIX}")
+      endif ()
+      if (${PREFIX}_FIND_REQUIRED)
+        message(FATAL_ERROR "Required library ${PREFIX} not found! Install the library (including dev packages) and try again. If the library is already installed, set the missing variables manually in cmake.")
+      endif ()
+    endif ()
+
+    mark_as_advanced(${PREFIX}_INCLUDE_DIR ${PREFIX}_LIBRARY ${PREFIX}_LIBRARY_REL ${PREFIX}_LIBRARY_DBG ${PREFIX}_LIBRARY_FWK)
+  endif ()
+endmacro(findpkg_finish)
+
+
+# Slightly customised framework finder
+MACRO(findpkg_framework fwk)
+  IF(APPLE)
+    SET(${fwk}_FRAMEWORK_PATH
+      ${${fwk}_FRAMEWORK_SEARCH_PATH}
+      ${CMAKE_FRAMEWORK_PATH}
+      ~/Library/Frameworks
+      /Library/Frameworks
+      /System/Library/Frameworks
+      /Network/Library/Frameworks
+      /Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS3.0.sdk/System/Library/Frameworks/
+    )
+    FOREACH(dir ${${fwk}_FRAMEWORK_PATH})
+      SET(fwkpath ${dir}/${fwk}.framework)
+      IF(EXISTS ${fwkpath})
+        SET(${fwk}_FRAMEWORK_INCLUDES ${${fwk}_FRAMEWORK_INCLUDES}
+          ${fwkpath}/Headers ${fwkpath}/PrivateHeaders)
+        if (NOT ${fwk}_LIBRARY_FWK)
+          SET(${fwk}_LIBRARY_FWK "-framework ${fwk}")
+        endif ()
+      ENDIF(EXISTS ${fwkpath})
+    ENDFOREACH(dir)
+  ENDIF(APPLE)
+ENDMACRO(findpkg_framework)

+ 48 - 0
cmake-modules/FindZLIB.cmake

@@ -0,0 +1,48 @@
+#-------------------------------------------------------------------
+# This file is part of the CMake build system for OGRE
+#     (Object-oriented Graphics Rendering Engine)
+# For the latest info, see http://www.ogre3d.org/
+#
+# The contents of this file are placed in the public domain. Feel
+# free to make use of it in any way you like.
+#-------------------------------------------------------------------
+
+# - Try to find ZLIB
+# Once done, this will define
+#
+#  ZLIB_FOUND - system has ZLIB
+#  ZLIB_INCLUDE_DIRS - the ZLIB include directories 
+#  ZLIB_LIBRARIES - link these to use ZLIB
+
+include(FindPkgMacros)
+findpkg_begin(ZLIB)
+
+# Get path, convert backslashes as ${ENV_${var}}
+getenv_path(ZLIB_HOME)
+
+# construct search paths
+set(ZLIB_PREFIX_PATH ${ZLIB_HOME} ${ENV_ZLIB_HOME})
+create_search_paths(ZLIB)
+# redo search if prefix path changed
+clear_if_changed(ZLIB_PREFIX_PATH
+  ZLIB_LIBRARY_FWK
+  ZLIB_LIBRARY_REL
+  ZLIB_LIBRARY_DBG
+  ZLIB_INCLUDE_DIR
+)
+
+set(ZLIB_LIBRARY_NAMES z zlib zdll)
+get_debug_names(ZLIB_LIBRARY_NAMES)
+
+use_pkgconfig(ZLIB_PKGC zzip-zlib-config)
+
+findpkg_framework(ZLIB)
+
+find_path(ZLIB_INCLUDE_DIR NAMES zlib.h HINTS ${ZLIB_INC_SEARCH_PATH} ${ZLIB_PKGC_INCLUDE_DIRS})
+find_library(ZLIB_LIBRARY_REL NAMES ${ZLIB_LIBRARY_NAMES} HINTS ${ZLIB_LIB_SEARCH_PATH} ${ZLIB_PKGC_LIBRARY_DIRS} PATH_SUFFIXES "" release relwithdebinfo minsizerel)
+find_library(ZLIB_LIBRARY_DBG NAMES ${ZLIB_LIBRARY_NAMES_DBG} HINTS ${ZLIB_LIB_SEARCH_PATH} ${ZLIB_PKGC_LIBRARY_DIRS} PATH_SUFFIXES "" debug)
+
+make_library_set(ZLIB_LIBRARY)
+
+findpkg_finish(ZLIB)
+

+ 11 - 10
code/BlenderLoader.cpp

@@ -360,7 +360,7 @@ void BlenderImporter::ConvertBlendFile(aiScene* out, const Scene& in,const FileD
 	root->mNumChildren = static_cast<unsigned int>(no_parents.size());
 	root->mNumChildren = static_cast<unsigned int>(no_parents.size());
 	root->mChildren = new aiNode*[root->mNumChildren]();
 	root->mChildren = new aiNode*[root->mNumChildren]();
 	for (unsigned int i = 0; i < root->mNumChildren; ++i) {
 	for (unsigned int i = 0; i < root->mNumChildren; ++i) {
-		root->mChildren[i] = ConvertNode(in, no_parents[i], conv);	
+		root->mChildren[i] = ConvertNode(in, no_parents[i], conv, aiMatrix4x4());	
 		root->mChildren[i]->mParent = root;
 		root->mChildren[i]->mParent = root;
 	}
 	}
 
 
@@ -568,6 +568,11 @@ void BlenderImporter::BuildMaterials(ConversionData& conv_data)
 			// Usually, zero diffuse color means no diffuse color at all in the equation.
 			// Usually, zero diffuse color means no diffuse color at all in the equation.
 			// So we omit this member to express this intent.
 			// So we omit this member to express this intent.
 			mout->AddProperty(&col,1,AI_MATKEY_COLOR_DIFFUSE);
 			mout->AddProperty(&col,1,AI_MATKEY_COLOR_DIFFUSE);
+
+			if (mat->emit) {
+				aiColor3D emit_col(mat->emit * mat->r, mat->emit * mat->g, mat->emit * mat->b) ;
+				mout->AddProperty(&emit_col, 1, AI_MATKEY_COLOR_EMISSIVE) ;
+			}
 		}
 		}
 
 
 		col = aiColor3D(mat->specr,mat->specg,mat->specb);
 		col = aiColor3D(mat->specr,mat->specg,mat->specb);
@@ -877,7 +882,7 @@ aiLight* BlenderImporter::ConvertLight(const Scene& /*in*/, const Object* /*obj*
 }
 }
 
 
 // ------------------------------------------------------------------------------------------------
 // ------------------------------------------------------------------------------------------------
-aiNode* BlenderImporter::ConvertNode(const Scene& in, const Object* obj, ConversionData& conv_data) 
+aiNode* BlenderImporter::ConvertNode(const Scene& in, const Object* obj, ConversionData& conv_data, const aiMatrix4x4& parentTransform)
 {
 {
 	std::deque<const Object*> children;
 	std::deque<const Object*> children;
 	for(std::set<const Object*>::iterator it = conv_data.objects.begin(); it != conv_data.objects.end() ;) {
 	for(std::set<const Object*>::iterator it = conv_data.objects.begin(); it != conv_data.objects.end() ;) {
@@ -961,16 +966,12 @@ aiNode* BlenderImporter::ConvertNode(const Scene& in, const Object* obj, Convers
 
 
 	for(unsigned int x = 0; x < 4; ++x) {
 	for(unsigned int x = 0; x < 4; ++x) {
 		for(unsigned int y = 0; y < 4; ++y) {
 		for(unsigned int y = 0; y < 4; ++y) {
-			node->mTransformation[y][x] = obj->parentinv[x][y];
+			node->mTransformation[y][x] = obj->obmat[x][y];
 		}
 		}
 	}
 	}
 
 
-	aiMatrix4x4 m;
-	for(unsigned int x = 0; x < 4; ++x) {
-		for(unsigned int y = 0; y < 4; ++y) {
-			m[y][x] = obj->obmat[x][y];
-		}
-	}
+	aiMatrix4x4 m = parentTransform;
+	m = m.Inverse();
 
 
 	node->mTransformation = m*node->mTransformation;
 	node->mTransformation = m*node->mTransformation;
 	
 	
@@ -978,7 +979,7 @@ aiNode* BlenderImporter::ConvertNode(const Scene& in, const Object* obj, Convers
 		node->mNumChildren = static_cast<unsigned int>(children.size());
 		node->mNumChildren = static_cast<unsigned int>(children.size());
 		aiNode** nd = node->mChildren = new aiNode*[node->mNumChildren]();
 		aiNode** nd = node->mChildren = new aiNode*[node->mNumChildren]();
 		for_each (const Object* nobj,children) {
 		for_each (const Object* nobj,children) {
-			*nd = ConvertNode(in,nobj,conv_data);
+			*nd = ConvertNode(in,nobj,conv_data,node->mTransformation * parentTransform);
 			(*nd++)->mParent = node;
 			(*nd++)->mParent = node;
 		}
 		}
 	}
 	}

+ 2 - 1
code/BlenderLoader.h

@@ -145,7 +145,8 @@ private:
 	// --------------------
 	// --------------------
 	aiNode* ConvertNode(const Blender::Scene& in, 
 	aiNode* ConvertNode(const Blender::Scene& in, 
 		const Blender::Object* obj, 
 		const Blender::Object* obj, 
-		Blender::ConversionData& conv_info
+		Blender::ConversionData& conv_info,
+		const aiMatrix4x4& parentTransform
 	); 
 	); 
 
 
 	// --------------------
 	// --------------------

+ 26 - 13
code/CMakeLists.txt

@@ -591,17 +591,19 @@ SOURCE_GROUP( unzip FILES ${unzip_SRCS})
 
 
 
 
 # VC2010 fixes
 # VC2010 fixes
-OPTION( VC10_STDINT_FIX "Fix for VC10 Compiler regarding pstdint.h redefinition errors" OFF )
-if( VC10_STDINT_FIX )
-	ADD_DEFINITIONS( -D_STDINT )
-endif( VC10_STDINT_FIX )
+if(MSVC10)
+	OPTION( VC10_STDINT_FIX "Fix for VC10 Compiler regarding pstdint.h redefinition errors" OFF )
+	if( VC10_STDINT_FIX )
+		ADD_DEFINITIONS( -D_STDINT )
+	endif( VC10_STDINT_FIX )
+endif(MSVC10)
 
 
 ADD_DEFINITIONS( -DASSIMP_BUILD_DLL_EXPORT )
 ADD_DEFINITIONS( -DASSIMP_BUILD_DLL_EXPORT )
 
 
-if ( MSVC80 OR MSVC90 OR MSVC10 )
+if ( MSVC )
 	ADD_DEFINITIONS( -D_SCL_SECURE_NO_WARNINGS )
 	ADD_DEFINITIONS( -D_SCL_SECURE_NO_WARNINGS )
 	ADD_DEFINITIONS( -D_CRT_SECURE_NO_WARNINGS )
 	ADD_DEFINITIONS( -D_CRT_SECURE_NO_WARNINGS )
-endif ( MSVC80 OR MSVC90 OR MSVC10 )
+endif ( MSVC )
 
 
 if (UNZIP_FOUND)
 if (UNZIP_FOUND)
 	SET (unzip_compile_SRCS "")
 	SET (unzip_compile_SRCS "")
@@ -670,17 +672,17 @@ SET( assim_src
 	${PUBLIC_HEADERS}
 	${PUBLIC_HEADERS}
 	${COMPILER_HEADERS}
 	${COMPILER_HEADERS}
 )
 )
-IF ( BUILD_STATIC_LIB )
+IF ( ASSIMP_BUILD_STATIC_LIB )
 	ADD_LIBRARY( assimp STATIC
 	ADD_LIBRARY( assimp STATIC
 		${assim_src}
 		${assim_src}
 	)
 	)
-ELSE ( BUILD_STATIC_LIB )
+ELSE ( ASSIMP_BUILD_STATIC_LIB )
 	ADD_LIBRARY( assimp SHARED
 	ADD_LIBRARY( assimp SHARED
 		${assim_src}
 		${assim_src}
 	)
 	)
-ENDIF ( BUILD_STATIC_LIB )
+ENDIF ( ASSIMP_BUILD_STATIC_LIB )
 
 
-SET_PROPERTY(TARGET assimp PROPERTY DEBUG_POSTFIX ${DEBUG_POSTFIX})
+SET_PROPERTY(TARGET assimp PROPERTY DEBUG_POSTFIX ${ASSIMP_DEBUG_POSTFIX})
 
 
 TARGET_LINK_LIBRARIES(assimp ${ZLIB_LIBRARIES})
 TARGET_LINK_LIBRARIES(assimp ${ZLIB_LIBRARIES})
 SET_TARGET_PROPERTIES( assimp PROPERTIES
 SET_TARGET_PROPERTIES( assimp PROPERTIES
@@ -696,6 +698,17 @@ else (UNZIP_FOUND)
 	INCLUDE_DIRECTORIES("../contrib/unzip")
 	INCLUDE_DIRECTORIES("../contrib/unzip")
 endif (UNZIP_FOUND)
 endif (UNZIP_FOUND)
 
 
-INSTALL( TARGETS assimp DESTINATION ${LIB_INSTALL_DIR} COMPONENT ${LIBASSIMP_COMPONENT})
-INSTALL( FILES ${PUBLIC_HEADERS} DESTINATION ${INCLUDE_INSTALL_DIR}/assimp COMPONENT assimp-dev)
-INSTALL( FILES ${COMPILER_HEADERS} DESTINATION ${INCLUDE_INSTALL_DIR}/assimp/Compiler COMPONENT assimp-dev)
+INSTALL( TARGETS assimp DESTINATION ${ASSIMP_LIB_INSTALL_DIR} COMPONENT ${LIBASSIMP_COMPONENT})
+INSTALL( FILES ${PUBLIC_HEADERS} DESTINATION ${ASSIMP_INCLUDE_INSTALL_DIR}/assimp COMPONENT assimp-dev)
+INSTALL( FILES ${COMPILER_HEADERS} DESTINATION ${ASSIMP_INCLUDE_INSTALL_DIR}/assimp/Compiler COMPONENT assimp-dev)
+
+if(MSVC AND ASSIMP_INSTALL_PDB)
+	install(FILES ${Assimp_BINARY_DIR}/code/Debug/assimp${ASSIMP_DEBUG_POSTFIX}.pdb
+		DESTINATION ${ASSIMP_LIB_INSTALL_DIR}
+		CONFIGURATIONS Debug
+	)
+	install(FILES ${Assimp_BINARY_DIR}/code/RelWithDebInfo/assimp.pdb
+		DESTINATION ${ASSIMP_LIB_INSTALL_DIR}
+		CONFIGURATIONS RelWithDebInfo
+	)
+endif ()

+ 22 - 10
code/IFCCurve.cpp

@@ -85,14 +85,18 @@ public:
 	size_t EstimateSampleCount(IfcFloat a, IfcFloat b) const {
 	size_t EstimateSampleCount(IfcFloat a, IfcFloat b) const {
 		ai_assert(InRange(a) && InRange(b));
 		ai_assert(InRange(a) && InRange(b));
 
 
-		a = fmod(a,static_cast<IfcFloat>( 360. ));
-		b = fmod(b,static_cast<IfcFloat>( 360. ));
-		return static_cast<size_t>( abs(ceil(( b-a)) / conv.settings.conicSamplingAngle) );
+		a *= conv.angle_scale;
+		b *= conv.angle_scale;
+
+		a = fmod(a,static_cast<IfcFloat>( AI_MATH_TWO_PI ));
+		b = fmod(b,static_cast<IfcFloat>( AI_MATH_TWO_PI ));
+		const IfcFloat setting = static_cast<IfcFloat>( AI_MATH_PI * conv.settings.conicSamplingAngle / 180.0 );
+		return static_cast<size_t>( ceil(abs( b-a)) / setting);
 	}
 	}
 
 
 	// --------------------------------------------------
 	// --------------------------------------------------
 	ParamRange GetParametricRange() const {
 	ParamRange GetParametricRange() const {
-		return std::make_pair(static_cast<IfcFloat>( 0. ), static_cast<IfcFloat>( 360. ));
+		return std::make_pair(static_cast<IfcFloat>( 0. ), static_cast<IfcFloat>( AI_MATH_TWO_PI / conv.angle_scale ));
 	}
 	}
 
 
 protected:
 protected:
@@ -272,7 +276,7 @@ public:
 		IfcFloat acc = 0;
 		IfcFloat acc = 0;
 		BOOST_FOREACH(const CurveEntry& entry, curves) {
 		BOOST_FOREACH(const CurveEntry& entry, curves) {
 			const ParamRange& range = entry.first->GetParametricRange();
 			const ParamRange& range = entry.first->GetParametricRange();
-			const IfcFloat delta = range.second-range.first;
+			const IfcFloat delta = abs(range.second-range.first);
 			if (u < acc+delta) {
 			if (u < acc+delta) {
 				return entry.first->Eval( entry.second ? (u-acc) + range.first : range.second-(u-acc));
 				return entry.first->Eval( entry.second ? (u-acc) + range.first : range.second-(u-acc));
 			}
 			}
@@ -291,7 +295,7 @@ public:
 		IfcFloat acc = 0;
 		IfcFloat acc = 0;
 		BOOST_FOREACH(const CurveEntry& entry, curves) {
 		BOOST_FOREACH(const CurveEntry& entry, curves) {
 			const ParamRange& range = entry.first->GetParametricRange();
 			const ParamRange& range = entry.first->GetParametricRange();
-			const IfcFloat delta = range.second-range.first;
+			const IfcFloat delta = abs(range.second-range.first);
 			if (a <= acc+delta && b >= acc) {
 			if (a <= acc+delta && b >= acc) {
 				const IfcFloat at =  std::max(static_cast<IfcFloat>( 0. ),a-acc), bt = std::min(delta,b-acc);
 				const IfcFloat at =  std::max(static_cast<IfcFloat>( 0. ),a-acc), bt = std::min(delta,b-acc);
 				cnt += entry.first->EstimateSampleCount( entry.second ? at + range.first : range.second - bt, entry.second ? bt + range.first : range.second - at );
 				cnt += entry.first->EstimateSampleCount( entry.second ? at + range.first : range.second - bt, entry.second ? bt + range.first : range.second - at );
@@ -424,6 +428,12 @@ public:
 		return base->EstimateSampleCount(TrimParam(a),TrimParam(b));
 		return base->EstimateSampleCount(TrimParam(a),TrimParam(b));
 	}
 	}
 
 
+	// --------------------------------------------------
+	void SampleDiscrete(TempMesh& out,IfcFloat a,IfcFloat b) const {
+		ai_assert(InRange(a) && InRange(b));
+		return base->SampleDiscrete(out,TrimParam(a),TrimParam(b));
+	}
+
 	// --------------------------------------------------
 	// --------------------------------------------------
 	ParamRange GetParametricRange() const {
 	ParamRange GetParametricRange() const {
 		return std::make_pair(static_cast<IfcFloat>( 0. ),maxval);
 		return std::make_pair(static_cast<IfcFloat>( 0. ),maxval);
@@ -546,10 +556,12 @@ bool Curve :: InRange(IfcFloat u) const
 {
 {
 	const ParamRange range = GetParametricRange();
 	const ParamRange range = GetParametricRange();
 	if (IsClosed()) {
 	if (IsClosed()) {
-		ai_assert(range.first != std::numeric_limits<IfcFloat>::infinity() && range.second != std::numeric_limits<IfcFloat>::infinity());
-		u = range.first + fmod(u-range.first,range.second-range.first);
+		return true;
+		//ai_assert(range.first != std::numeric_limits<IfcFloat>::infinity() && range.second != std::numeric_limits<IfcFloat>::infinity());
+		//u = range.first + fmod(u-range.first,range.second-range.first);
 	}
 	}
-	return u >= range.first && u <= range.second;
+	const IfcFloat epsilon = 1e-5;
+	return u - range.first > -epsilon && range.second - u > -epsilon;
 }
 }
 #endif 
 #endif 
 
 
@@ -557,7 +569,7 @@ bool Curve :: InRange(IfcFloat u) const
 IfcFloat Curve :: GetParametricRangeDelta() const
 IfcFloat Curve :: GetParametricRangeDelta() const
 {
 {
 	const ParamRange& range = GetParametricRange();
 	const ParamRange& range = GetParametricRange();
-	return range.second - range.first;
+	return abs(range.second - range.first);
 }
 }
 
 
 // ------------------------------------------------------------------------------------------------
 // ------------------------------------------------------------------------------------------------

+ 109 - 1
code/IFCGeometry.cpp

@@ -451,7 +451,6 @@ void ProcessConnectedFaceSet(const IfcConnectedFaceSet& fset, TempMesh& result,
 
 
 
 
 
 
-
 // ------------------------------------------------------------------------------------------------
 // ------------------------------------------------------------------------------------------------
 void ProcessRevolvedAreaSolid(const IfcRevolvedAreaSolid& solid, TempMesh& result, ConversionData& conv)
 void ProcessRevolvedAreaSolid(const IfcRevolvedAreaSolid& solid, TempMesh& result, ConversionData& conv)
 {
 {
@@ -539,6 +538,112 @@ void ProcessRevolvedAreaSolid(const IfcRevolvedAreaSolid& solid, TempMesh& resul
 	IFCImporter::LogDebug("generate mesh procedurally by radial extrusion (IfcRevolvedAreaSolid)");
 	IFCImporter::LogDebug("generate mesh procedurally by radial extrusion (IfcRevolvedAreaSolid)");
 }
 }
 
 
+
+
+// ------------------------------------------------------------------------------------------------
+void ProcessSweptDiskSolid(const IfcSweptDiskSolid solid, TempMesh& result, ConversionData& conv)
+{
+	const Curve* const curve = Curve::Convert(*solid.Directrix, conv);
+	if(!curve) {
+		IFCImporter::LogError("failed to convert Directrix curve (IfcSweptDiskSolid)");
+		return;
+	}
+
+	const std::vector<IfcVector3>& in = result.verts;
+	const size_t size=in.size();
+
+	const unsigned int cnt_segments = 16;
+	const IfcFloat deltaAngle = AI_MATH_TWO_PI/cnt_segments;
+
+	const size_t samples = curve->EstimateSampleCount(solid.StartParam,solid.EndParam);
+
+	result.verts.reserve(cnt_segments * samples * 4);
+	result.vertcnt.reserve((cnt_segments - 1) * samples);
+
+	std::vector<IfcVector3> points;
+	points.reserve(cnt_segments * samples);
+
+	TempMesh temp;
+	curve->SampleDiscrete(temp,solid.StartParam,solid.EndParam);
+	const std::vector<IfcVector3>& curve_points = temp.verts;
+
+	if(curve_points.empty()) {
+		IFCImporter::LogWarn("curve evaluation yielded no points (IfcSweptDiskSolid)");
+		return;
+	}
+
+	IfcVector3 current = curve_points[0];
+	IfcVector3 previous = current;
+	IfcVector3 next;
+
+	IfcVector3 startvec;
+	startvec.x = 1.0f;
+	startvec.y = 1.0f;
+	startvec.z = 1.0f;
+
+	// generate circles at the sweep positions
+	for(size_t i = 0; i < samples; ++i) {
+
+		if(i != samples - 1) {
+			next = curve_points[i + 1];
+		}
+
+		// get a direction vector reflecting the approximate curvature (i.e. tangent)
+		IfcVector3 d = (current-previous) + (next-previous);
+	
+		d.Normalize();
+
+		// figure out an arbitrary point q so that (p-q) * d = 0,
+		// try to maximize ||(p-q)|| * ||(p_last-q_last)|| 
+		IfcVector3 q;
+		if (abs(d.x) > 1e-6) {
+			q.y = startvec.y;
+			q.z = startvec.z;
+			q.x = -(d.y * q.y + d.z * q.z) / d.x;
+		}
+		else if (abs(d.y) > 1e-6) {
+			q.x = startvec.x;
+			q.z = startvec.z;
+			q.y = -(d.x * q.x + d.z * q.z) / d.y;
+		}
+		else { // if (abs(d.z) > 1e-6) 
+			q.y = startvec.y;
+			q.x = startvec.x;
+			q.z = -(d.y * q.y + d.x * q.x) / d.z;
+		}
+
+		startvec = q;
+		q *= solid.Radius / q.Length();
+
+		// generate a rotation matrix to rotate q around d
+		IfcMatrix4 rot;
+		IfcMatrix4::Rotation(deltaAngle,d,rot);
+
+		for (unsigned int seg = 0; seg < cnt_segments; ++seg, q *= rot ) {
+			points.push_back(q + current);	
+		}
+
+		previous = current;
+		current = next;
+	}
+
+	// make quads
+	for(size_t i = 0; i < samples - 1; ++i) {
+
+		for (unsigned int seg = 0; seg < cnt_segments - 1; ++seg) {
+
+			result.verts.push_back(points[ i * cnt_segments + seg]);
+			result.verts.push_back(points[ i * cnt_segments + seg + 1]);
+			result.verts.push_back(points[ (i+1) * cnt_segments + seg + 1]);
+			result.verts.push_back(points[ (i+1) * cnt_segments + seg]);
+
+			result.vertcnt.push_back(4);
+		}
+	}
+
+	IFCImporter::LogDebug("generate mesh procedurally by sweeping a disk along a curve (IfcSweptDiskSolid)");
+}
+
 // ------------------------------------------------------------------------------------------------
 // ------------------------------------------------------------------------------------------------
 IfcMatrix3 DerivePlaneCoordinateSpace(const TempMesh& curmesh) {
 IfcMatrix3 DerivePlaneCoordinateSpace(const TempMesh& curmesh) {
 
 
@@ -1723,6 +1828,9 @@ bool ProcessGeometricItem(const IfcRepresentationItem& geo, std::vector<unsigned
 	else  if(const IfcSweptAreaSolid* swept = geo.ToPtr<IfcSweptAreaSolid>()) {
 	else  if(const IfcSweptAreaSolid* swept = geo.ToPtr<IfcSweptAreaSolid>()) {
 		ProcessSweptAreaSolid(*swept,meshtmp,conv);
 		ProcessSweptAreaSolid(*swept,meshtmp,conv);
 	}   
 	}   
+	else  if(const IfcSweptDiskSolid* disk = geo.ToPtr<IfcSweptDiskSolid>()) {
+		ProcessSweptDiskSolid(*disk,meshtmp,conv);
+	}   
 	else if(const IfcManifoldSolidBrep* brep = geo.ToPtr<IfcManifoldSolidBrep>()) {
 	else if(const IfcManifoldSolidBrep* brep = geo.ToPtr<IfcManifoldSolidBrep>()) {
 		ProcessConnectedFaceSet(brep->Outer,meshtmp,conv);
 		ProcessConnectedFaceSet(brep->Outer,meshtmp,conv);
 	} 
 	} 

+ 50 - 2
code/IFCLoader.cpp

@@ -48,6 +48,7 @@ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 #include <iterator>
 #include <iterator>
 #include <boost/tuple/tuple.hpp>
 #include <boost/tuple/tuple.hpp>
 
 
+#include "../contrib/unzip/unzip.h"
 
 
 #include "IFCLoader.h"
 #include "IFCLoader.h"
 #include "STEPFileReader.h"
 #include "STEPFileReader.h"
@@ -103,7 +104,7 @@ static const aiImporterDesc desc = {
 	0,
 	0,
 	0,
 	0,
 	0,
 	0,
-	"ifc" 
+	"ifc ifczip" 
 };
 };
 
 
 
 
@@ -123,7 +124,7 @@ IFCImporter::~IFCImporter()
 bool IFCImporter::CanRead( const std::string& pFile, IOSystem* pIOHandler, bool checkSig) const
 bool IFCImporter::CanRead( const std::string& pFile, IOSystem* pIOHandler, bool checkSig) const
 {
 {
 	const std::string& extension = GetExtension(pFile);
 	const std::string& extension = GetExtension(pFile);
-	if (extension == "ifc") {
+	if (extension == "ifc" || extension == "ifczip") {
 		return true;
 		return true;
 	}
 	}
 
 
@@ -168,6 +169,53 @@ void IFCImporter::InternReadFile( const std::string& pFile,
 		ThrowException("Could not open file for reading");
 		ThrowException("Could not open file for reading");
 	}
 	}
 
 
+	// if this is a ifczip file, decompress its contents first
+	if(GetExtension(pFile) == "ifczip") {
+		unzFile zip = unzOpen( pFile.c_str() );
+		if(zip == NULL) {
+			ThrowException("Could not open ifczip file for reading, unzip failed");
+		}
+
+		// chop 'zip' postfix
+		std::string fileName = pFile.substr(0,pFile.length() - 3);
+
+		std::string::size_type s = pFile.find_last_of('\\');
+		if(s == std::string::npos) {
+			s = pFile.find_last_of('/');
+		}
+		if(s != std::string::npos) {
+			fileName = fileName.substr(s+1);
+		}
+
+		// search file (same name as the IFCZIP except for the file extension) and place file pointer there
+		if ( unzLocateFile( zip, fileName.c_str(), 0 ) == UNZ_OK )
+		{
+			// get file size, etc.
+			unz_file_info fileInfo;
+			unzGetCurrentFileInfo( zip , &fileInfo, 0, 0, 0, 0, 0, 0 );
+
+			uint8_t* buff = new uint8_t[fileInfo.uncompressed_size];
+
+			LogInfo("Decompressing IFCZIP file");
+
+			unzOpenCurrentFile( zip  );
+			const int ret = unzReadCurrentFile( zip, buff, fileInfo.uncompressed_size);
+			size_t filesize = fileInfo.uncompressed_size;
+			if ( ret < 0 || size_t(ret) != filesize )
+			{
+				delete[] buff;
+				ThrowException("Failed to decompress IFC ZIP file");
+			}
+			unzCloseCurrentFile( zip );
+			stream.reset(new MemoryIOStream(buff,fileInfo.uncompressed_size,true));
+		}
+		else {
+			ThrowException("Found no IFC file member in IFCZIP file");
+		}
+
+		unzClose(zip);
+	}
+
 	boost::scoped_ptr<STEP::DB> db(STEP::ReadFileHeader(stream));
 	boost::scoped_ptr<STEP::DB> db(STEP::ReadFileHeader(stream));
 	const STEP::HeaderInfo& head = static_cast<const STEP::DB&>(*db).GetHeader();
 	const STEP::HeaderInfo& head = static_cast<const STEP::DB&>(*db).GetHeader();
 
 

+ 87 - 62
code/IFCReaderGen.cpp

@@ -1,8 +1,8 @@
 /*
 /*
-Open Asset Import Library (assimp)
+Open Asset Import Library (ASSIMP)
 ----------------------------------------------------------------------
 ----------------------------------------------------------------------
 
 
-Copyright (c) 2006-2012, assimp team
+Copyright (c) 2006-2010, ASSIMP Development Team
 All rights reserved.
 All rights reserved.
 
 
 Redistribution and use of this software in source and binary forms, 
 Redistribution and use of this software in source and binary forms, 
@@ -18,10 +18,10 @@ following conditions are met:
   following disclaimer in the documentation and/or other
   following disclaimer in the documentation and/or other
   materials provided with the distribution.
   materials provided with the distribution.
 
 
-* Neither the name of the assimp team, nor the names of its
+* Neither the name of the ASSIMP team, nor the names of its
   contributors may be used to endorse or promote products
   contributors may be used to endorse or promote products
   derived from this software without specific prior
   derived from this software without specific prior
-  written permission of the assimp team.
+  written permission of the ASSIMP Development Team.
 
 
 THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 
 THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 
 "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 
 "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 
@@ -96,7 +96,6 @@ namespace {
 ,		SchemaEntry("ifcobjecttypeenum",NULL )
 ,		SchemaEntry("ifcobjecttypeenum",NULL )
 ,		SchemaEntry("ifcthermalloadtypeenum",NULL )
 ,		SchemaEntry("ifcthermalloadtypeenum",NULL )
 ,		SchemaEntry("ifcionconcentrationmeasure",NULL )
 ,		SchemaEntry("ifcionconcentrationmeasure",NULL )
-,		SchemaEntry("ifcobjectreferenceselect",NULL )
 ,		SchemaEntry("ifcclassificationnotationselect",NULL )
 ,		SchemaEntry("ifcclassificationnotationselect",NULL )
 ,		SchemaEntry("ifcbsplinecurveform",NULL )
 ,		SchemaEntry("ifcbsplinecurveform",NULL )
 ,		SchemaEntry("ifcelementcompositionenum",NULL )
 ,		SchemaEntry("ifcelementcompositionenum",NULL )
@@ -158,6 +157,7 @@ namespace {
 ,		SchemaEntry("ifcidentifier",NULL )
 ,		SchemaEntry("ifcidentifier",NULL )
 ,		SchemaEntry("ifcradioactivitymeasure",NULL )
 ,		SchemaEntry("ifcradioactivitymeasure",NULL )
 ,		SchemaEntry("ifcsymbolstyleselect",NULL )
 ,		SchemaEntry("ifcsymbolstyleselect",NULL )
+,		SchemaEntry("ifcobjectreferenceselect",NULL )
 ,		SchemaEntry("ifcrooftypeenum",NULL )
 ,		SchemaEntry("ifcrooftypeenum",NULL )
 ,		SchemaEntry("ifcreal",NULL )
 ,		SchemaEntry("ifcreal",NULL )
 ,		SchemaEntry("ifcroleenum",NULL )
 ,		SchemaEntry("ifcroleenum",NULL )
@@ -168,6 +168,7 @@ namespace {
 ,		SchemaEntry("ifcfiltertypeenum",NULL )
 ,		SchemaEntry("ifcfiltertypeenum",NULL )
 ,		SchemaEntry("ifctransformertypeenum",NULL )
 ,		SchemaEntry("ifctransformertypeenum",NULL )
 ,		SchemaEntry("ifcsurfaceside",NULL )
 ,		SchemaEntry("ifcsurfaceside",NULL )
+,		SchemaEntry("ifcspaceheatertypeenum",NULL )
 ,		SchemaEntry("ifcthermaltransmittancemeasure",NULL )
 ,		SchemaEntry("ifcthermaltransmittancemeasure",NULL )
 ,		SchemaEntry("ifctubebundletypeenum",NULL )
 ,		SchemaEntry("ifctubebundletypeenum",NULL )
 ,		SchemaEntry("ifclightfixturetypeenum",NULL )
 ,		SchemaEntry("ifclightfixturetypeenum",NULL )
@@ -239,7 +240,6 @@ namespace {
 ,		SchemaEntry("ifcvolumemeasure",NULL )
 ,		SchemaEntry("ifcvolumemeasure",NULL )
 ,		SchemaEntry("ifcbeamtypeenum",NULL )
 ,		SchemaEntry("ifcbeamtypeenum",NULL )
 ,		SchemaEntry("ifcstateenum",NULL )
 ,		SchemaEntry("ifcstateenum",NULL )
-,		SchemaEntry("ifcspaceheatertypeenum",NULL )
 ,		SchemaEntry("ifcsectiontypeenum",NULL )
 ,		SchemaEntry("ifcsectiontypeenum",NULL )
 ,		SchemaEntry("ifcfootingtypeenum",NULL )
 ,		SchemaEntry("ifcfootingtypeenum",NULL )
 ,		SchemaEntry("ifcmonetarymeasure",NULL )
 ,		SchemaEntry("ifcmonetarymeasure",NULL )
@@ -379,6 +379,9 @@ namespace {
 ,		SchemaEntry("ifcpermeablecoveringoperationenum",NULL )
 ,		SchemaEntry("ifcpermeablecoveringoperationenum",NULL )
 ,		SchemaEntry("ifcmagneticfluxdensitymeasure",NULL )
 ,		SchemaEntry("ifcmagneticfluxdensitymeasure",NULL )
 ,		SchemaEntry("ifcmoisturediffusivitymeasure",NULL )
 ,		SchemaEntry("ifcmoisturediffusivitymeasure",NULL )
+,		SchemaEntry("ifcprofiledef",&STEP::ObjectHelper<IfcProfileDef,2>::Construct )
+,		SchemaEntry("ifcparameterizedprofiledef",&STEP::ObjectHelper<IfcParameterizedProfileDef,1>::Construct )
+,		SchemaEntry("ifczshapeprofiledef",&STEP::ObjectHelper<IfcZShapeProfileDef,6>::Construct )
 ,		SchemaEntry("ifcroot",&STEP::ObjectHelper<IfcRoot,4>::Construct )
 ,		SchemaEntry("ifcroot",&STEP::ObjectHelper<IfcRoot,4>::Construct )
 ,		SchemaEntry("ifcobjectdefinition",&STEP::ObjectHelper<IfcObjectDefinition,0>::Construct )
 ,		SchemaEntry("ifcobjectdefinition",&STEP::ObjectHelper<IfcObjectDefinition,0>::Construct )
 ,		SchemaEntry("ifctypeobject",&STEP::ObjectHelper<IfcTypeObject,2>::Construct )
 ,		SchemaEntry("ifctypeobject",&STEP::ObjectHelper<IfcTypeObject,2>::Construct )
@@ -463,7 +466,6 @@ namespace {
 ,		SchemaEntry("ifcpredefineditem",&STEP::ObjectHelper<NotImplemented,0>::Construct )
 ,		SchemaEntry("ifcpredefineditem",&STEP::ObjectHelper<NotImplemented,0>::Construct )
 ,		SchemaEntry("ifcpredefinedcolour",&STEP::ObjectHelper<NotImplemented,0>::Construct )
 ,		SchemaEntry("ifcpredefinedcolour",&STEP::ObjectHelper<NotImplemented,0>::Construct )
 ,		SchemaEntry("ifcdraughtingpredefinedcolour",&STEP::ObjectHelper<NotImplemented,0>::Construct )
 ,		SchemaEntry("ifcdraughtingpredefinedcolour",&STEP::ObjectHelper<NotImplemented,0>::Construct )
-,		SchemaEntry("ifcprofiledef",&STEP::ObjectHelper<IfcProfileDef,2>::Construct )
 ,		SchemaEntry("ifcarbitraryclosedprofiledef",&STEP::ObjectHelper<IfcArbitraryClosedProfileDef,1>::Construct )
 ,		SchemaEntry("ifcarbitraryclosedprofiledef",&STEP::ObjectHelper<IfcArbitraryClosedProfileDef,1>::Construct )
 ,		SchemaEntry("ifccurve",&STEP::ObjectHelper<IfcCurve,0>::Construct )
 ,		SchemaEntry("ifccurve",&STEP::ObjectHelper<IfcCurve,0>::Construct )
 ,		SchemaEntry("ifcconic",&STEP::ObjectHelper<IfcConic,1>::Construct )
 ,		SchemaEntry("ifcconic",&STEP::ObjectHelper<IfcConic,1>::Construct )
@@ -550,6 +552,7 @@ namespace {
 ,		SchemaEntry("ifcaxis1placement",&STEP::ObjectHelper<IfcAxis1Placement,1>::Construct )
 ,		SchemaEntry("ifcaxis1placement",&STEP::ObjectHelper<IfcAxis1Placement,1>::Construct )
 ,		SchemaEntry("ifclightintensitydistribution",&STEP::ObjectHelper<NotImplemented,0>::Construct )
 ,		SchemaEntry("ifclightintensitydistribution",&STEP::ObjectHelper<NotImplemented,0>::Construct )
 ,		SchemaEntry("ifcpredefinedsymbol",&STEP::ObjectHelper<NotImplemented,0>::Construct )
 ,		SchemaEntry("ifcpredefinedsymbol",&STEP::ObjectHelper<NotImplemented,0>::Construct )
+,		SchemaEntry("ifccolourspecification",&STEP::ObjectHelper<IfcColourSpecification,1>::Construct )
 ,		SchemaEntry("ifcstructuralpointaction",&STEP::ObjectHelper<IfcStructuralPointAction,0>::Construct )
 ,		SchemaEntry("ifcstructuralpointaction",&STEP::ObjectHelper<IfcStructuralPointAction,0>::Construct )
 ,		SchemaEntry("ifcspatialstructureelement",&STEP::ObjectHelper<IfcSpatialStructureElement,2>::Construct )
 ,		SchemaEntry("ifcspatialstructureelement",&STEP::ObjectHelper<IfcSpatialStructureElement,2>::Construct )
 ,		SchemaEntry("ifcspace",&STEP::ObjectHelper<IfcSpace,2>::Construct )
 ,		SchemaEntry("ifcspace",&STEP::ObjectHelper<IfcSpace,2>::Construct )
@@ -583,7 +586,6 @@ namespace {
 ,		SchemaEntry("ifcvertex",&STEP::ObjectHelper<IfcVertex,0>::Construct )
 ,		SchemaEntry("ifcvertex",&STEP::ObjectHelper<IfcVertex,0>::Construct )
 ,		SchemaEntry("ifcvertexpoint",&STEP::ObjectHelper<IfcVertexPoint,1>::Construct )
 ,		SchemaEntry("ifcvertexpoint",&STEP::ObjectHelper<IfcVertexPoint,1>::Construct )
 ,		SchemaEntry("ifcflowinstrumenttype",&STEP::ObjectHelper<IfcFlowInstrumentType,1>::Construct )
 ,		SchemaEntry("ifcflowinstrumenttype",&STEP::ObjectHelper<IfcFlowInstrumentType,1>::Construct )
-,		SchemaEntry("ifcparameterizedprofiledef",&STEP::ObjectHelper<IfcParameterizedProfileDef,1>::Construct )
 ,		SchemaEntry("ifcushapeprofiledef",&STEP::ObjectHelper<IfcUShapeProfileDef,8>::Construct )
 ,		SchemaEntry("ifcushapeprofiledef",&STEP::ObjectHelper<IfcUShapeProfileDef,8>::Construct )
 ,		SchemaEntry("ifcramp",&STEP::ObjectHelper<IfcRamp,1>::Construct )
 ,		SchemaEntry("ifcramp",&STEP::ObjectHelper<IfcRamp,1>::Construct )
 ,		SchemaEntry("ifcfillareastyle",&STEP::ObjectHelper<NotImplemented,0>::Construct )
 ,		SchemaEntry("ifcfillareastyle",&STEP::ObjectHelper<NotImplemented,0>::Construct )
@@ -869,7 +871,6 @@ namespace {
 ,		SchemaEntry("ifcrelaggregates",&STEP::ObjectHelper<IfcRelAggregates,0>::Construct )
 ,		SchemaEntry("ifcrelaggregates",&STEP::ObjectHelper<IfcRelAggregates,0>::Construct )
 ,		SchemaEntry("ifcboilertype",&STEP::ObjectHelper<IfcBoilerType,1>::Construct )
 ,		SchemaEntry("ifcboilertype",&STEP::ObjectHelper<IfcBoilerType,1>::Construct )
 ,		SchemaEntry("ifcrelprojectselement",&STEP::ObjectHelper<NotImplemented,0>::Construct )
 ,		SchemaEntry("ifcrelprojectselement",&STEP::ObjectHelper<NotImplemented,0>::Construct )
-,		SchemaEntry("ifccolourspecification",&STEP::ObjectHelper<IfcColourSpecification,1>::Construct )
 ,		SchemaEntry("ifccolourrgb",&STEP::ObjectHelper<IfcColourRgb,3>::Construct )
 ,		SchemaEntry("ifccolourrgb",&STEP::ObjectHelper<IfcColourRgb,3>::Construct )
 ,		SchemaEntry("ifcrelconnectsstructuralactivity",&STEP::ObjectHelper<NotImplemented,0>::Construct )
 ,		SchemaEntry("ifcrelconnectsstructuralactivity",&STEP::ObjectHelper<NotImplemented,0>::Construct )
 ,		SchemaEntry("ifcdoorstyle",&STEP::ObjectHelper<IfcDoorStyle,4>::Construct )
 ,		SchemaEntry("ifcdoorstyle",&STEP::ObjectHelper<IfcDoorStyle,4>::Construct )
@@ -881,7 +882,6 @@ namespace {
 ,		SchemaEntry("ifcsensortype",&STEP::ObjectHelper<IfcSensorType,1>::Construct )
 ,		SchemaEntry("ifcsensortype",&STEP::ObjectHelper<IfcSensorType,1>::Construct )
 ,		SchemaEntry("ifcairterminalboxtype",&STEP::ObjectHelper<IfcAirTerminalBoxType,1>::Construct )
 ,		SchemaEntry("ifcairterminalboxtype",&STEP::ObjectHelper<IfcAirTerminalBoxType,1>::Construct )
 ,		SchemaEntry("ifcannotationsurfaceoccurrence",&STEP::ObjectHelper<IfcAnnotationSurfaceOccurrence,0>::Construct )
 ,		SchemaEntry("ifcannotationsurfaceoccurrence",&STEP::ObjectHelper<IfcAnnotationSurfaceOccurrence,0>::Construct )
-,		SchemaEntry("ifczshapeprofiledef",&STEP::ObjectHelper<IfcZShapeProfileDef,6>::Construct )
 ,		SchemaEntry("ifcclassificationnotation",&STEP::ObjectHelper<NotImplemented,0>::Construct )
 ,		SchemaEntry("ifcclassificationnotation",&STEP::ObjectHelper<NotImplemented,0>::Construct )
 ,		SchemaEntry("ifcrationalbeziercurve",&STEP::ObjectHelper<IfcRationalBezierCurve,1>::Construct )
 ,		SchemaEntry("ifcrationalbeziercurve",&STEP::ObjectHelper<IfcRationalBezierCurve,1>::Construct )
 ,		SchemaEntry("ifccartesiantransformationoperator2d",&STEP::ObjectHelper<IfcCartesianTransformationOperator2D,0>::Construct )
 ,		SchemaEntry("ifccartesiantransformationoperator2d",&STEP::ObjectHelper<IfcCartesianTransformationOperator2D,0>::Construct )
@@ -1052,6 +1052,44 @@ template <> size_t GenericFill<NotImplemented>(const STEP::DB& db, const LIST& p
 
 
 
 
 
 
+// -----------------------------------------------------------------------------------------------------------
+template <> size_t GenericFill<IfcProfileDef>(const DB& db, const LIST& params, IfcProfileDef* in)
+{
+	size_t base = 0;
+	if (params.GetSize() < 2) { throw STEP::TypeError("expected 2 arguments to IfcProfileDef"); }    do { // convert the 'ProfileType' argument
+        boost::shared_ptr<const DataType> arg = params[base++];
+        if (dynamic_cast<const ISDERIVED*>(&*arg)) { in->ObjectHelper<Assimp::IFC::IfcProfileDef,2>::aux_is_derived[0]=true; break; }
+        try { GenericConvert( in->ProfileType, arg, db ); break; } 
+        catch (const TypeError& t) { throw TypeError(t.what() + std::string(" - expected argument 0 to IfcProfileDef to be a `IfcProfileTypeEnum`")); }
+    } while(0);
+    do { // convert the 'ProfileName' argument
+        boost::shared_ptr<const DataType> arg = params[base++];
+        if (dynamic_cast<const ISDERIVED*>(&*arg)) { in->ObjectHelper<Assimp::IFC::IfcProfileDef,2>::aux_is_derived[1]=true; break; }
+        if (dynamic_cast<const UNSET*>(&*arg)) break;
+        try { GenericConvert( in->ProfileName, arg, db ); break; } 
+        catch (const TypeError& t) { throw TypeError(t.what() + std::string(" - expected argument 1 to IfcProfileDef to be a `IfcLabel`")); }
+    } while(0);
+	return base;
+}
+// -----------------------------------------------------------------------------------------------------------
+template <> size_t GenericFill<IfcParameterizedProfileDef>(const DB& db, const LIST& params, IfcParameterizedProfileDef* in)
+{
+	size_t base = GenericFill(db,params,static_cast<IfcProfileDef*>(in));
+	if (params.GetSize() < 3) { throw STEP::TypeError("expected 3 arguments to IfcParameterizedProfileDef"); }    do { // convert the 'Position' argument
+        boost::shared_ptr<const DataType> arg = params[base++];
+        if (dynamic_cast<const ISDERIVED*>(&*arg)) { in->ObjectHelper<Assimp::IFC::IfcParameterizedProfileDef,1>::aux_is_derived[0]=true; break; }
+        try { GenericConvert( in->Position, arg, db ); break; } 
+        catch (const TypeError& t) { throw TypeError(t.what() + std::string(" - expected argument 2 to IfcParameterizedProfileDef to be a `IfcAxis2Placement2D`")); }
+    } while(0);
+	return base;
+}
+// -----------------------------------------------------------------------------------------------------------
+template <> size_t GenericFill<IfcZShapeProfileDef>(const DB& db, const LIST& params, IfcZShapeProfileDef* in)
+{
+	size_t base = GenericFill(db,params,static_cast<IfcParameterizedProfileDef*>(in));
+// this data structure is not used yet, so there is no code generated to fill its members
+	return base;
+}
 // -----------------------------------------------------------------------------------------------------------
 // -----------------------------------------------------------------------------------------------------------
 template <> size_t GenericFill<IfcRoot>(const DB& db, const LIST& params, IfcRoot* in)
 template <> size_t GenericFill<IfcRoot>(const DB& db, const LIST& params, IfcRoot* in)
 {
 {
@@ -1519,25 +1557,6 @@ template <> size_t GenericFill<IfcPlacement>(const DB& db, const LIST& params, I
 	return base;
 	return base;
 }
 }
 // -----------------------------------------------------------------------------------------------------------
 // -----------------------------------------------------------------------------------------------------------
-template <> size_t GenericFill<IfcProfileDef>(const DB& db, const LIST& params, IfcProfileDef* in)
-{
-	size_t base = 0;
-	if (params.GetSize() < 2) { throw STEP::TypeError("expected 2 arguments to IfcProfileDef"); }    do { // convert the 'ProfileType' argument
-        boost::shared_ptr<const DataType> arg = params[base++];
-        if (dynamic_cast<const ISDERIVED*>(&*arg)) { in->ObjectHelper<Assimp::IFC::IfcProfileDef,2>::aux_is_derived[0]=true; break; }
-        try { GenericConvert( in->ProfileType, arg, db ); break; } 
-        catch (const TypeError& t) { throw TypeError(t.what() + std::string(" - expected argument 0 to IfcProfileDef to be a `IfcProfileTypeEnum`")); }
-    } while(0);
-    do { // convert the 'ProfileName' argument
-        boost::shared_ptr<const DataType> arg = params[base++];
-        if (dynamic_cast<const ISDERIVED*>(&*arg)) { in->ObjectHelper<Assimp::IFC::IfcProfileDef,2>::aux_is_derived[1]=true; break; }
-        if (dynamic_cast<const UNSET*>(&*arg)) break;
-        try { GenericConvert( in->ProfileName, arg, db ); break; } 
-        catch (const TypeError& t) { throw TypeError(t.what() + std::string(" - expected argument 1 to IfcProfileDef to be a `IfcLabel`")); }
-    } while(0);
-	return base;
-}
-// -----------------------------------------------------------------------------------------------------------
 template <> size_t GenericFill<IfcArbitraryClosedProfileDef>(const DB& db, const LIST& params, IfcArbitraryClosedProfileDef* in)
 template <> size_t GenericFill<IfcArbitraryClosedProfileDef>(const DB& db, const LIST& params, IfcArbitraryClosedProfileDef* in)
 {
 {
 	size_t base = GenericFill(db,params,static_cast<IfcProfileDef*>(in));
 	size_t base = GenericFill(db,params,static_cast<IfcProfileDef*>(in));
@@ -2068,6 +2087,19 @@ template <> size_t GenericFill<IfcAxis1Placement>(const DB& db, const LIST& para
 	return base;
 	return base;
 }
 }
 // -----------------------------------------------------------------------------------------------------------
 // -----------------------------------------------------------------------------------------------------------
+template <> size_t GenericFill<IfcColourSpecification>(const DB& db, const LIST& params, IfcColourSpecification* in)
+{
+	size_t base = 0;
+	if (params.GetSize() < 1) { throw STEP::TypeError("expected 1 arguments to IfcColourSpecification"); }    do { // convert the 'Name' argument
+        boost::shared_ptr<const DataType> arg = params[base++];
+        if (dynamic_cast<const ISDERIVED*>(&*arg)) { in->ObjectHelper<Assimp::IFC::IfcColourSpecification,1>::aux_is_derived[0]=true; break; }
+        if (dynamic_cast<const UNSET*>(&*arg)) break;
+        try { GenericConvert( in->Name, arg, db ); break; } 
+        catch (const TypeError& t) { throw TypeError(t.what() + std::string(" - expected argument 0 to IfcColourSpecification to be a `IfcLabel`")); }
+    } while(0);
+	return base;
+}
+// -----------------------------------------------------------------------------------------------------------
 template <> size_t GenericFill<IfcStructuralPointAction>(const DB& db, const LIST& params, IfcStructuralPointAction* in)
 template <> size_t GenericFill<IfcStructuralPointAction>(const DB& db, const LIST& params, IfcStructuralPointAction* in)
 {
 {
 	size_t base = GenericFill(db,params,static_cast<IfcStructuralAction*>(in));
 	size_t base = GenericFill(db,params,static_cast<IfcStructuralAction*>(in));
@@ -2236,18 +2268,6 @@ template <> size_t GenericFill<IfcFlowInstrumentType>(const DB& db, const LIST&
 	return base;
 	return base;
 }
 }
 // -----------------------------------------------------------------------------------------------------------
 // -----------------------------------------------------------------------------------------------------------
-template <> size_t GenericFill<IfcParameterizedProfileDef>(const DB& db, const LIST& params, IfcParameterizedProfileDef* in)
-{
-	size_t base = GenericFill(db,params,static_cast<IfcProfileDef*>(in));
-	if (params.GetSize() < 3) { throw STEP::TypeError("expected 3 arguments to IfcParameterizedProfileDef"); }    do { // convert the 'Position' argument
-        boost::shared_ptr<const DataType> arg = params[base++];
-        if (dynamic_cast<const ISDERIVED*>(&*arg)) { in->ObjectHelper<Assimp::IFC::IfcParameterizedProfileDef,1>::aux_is_derived[0]=true; break; }
-        try { GenericConvert( in->Position, arg, db ); break; } 
-        catch (const TypeError& t) { throw TypeError(t.what() + std::string(" - expected argument 2 to IfcParameterizedProfileDef to be a `IfcAxis2Placement2D`")); }
-    } while(0);
-	return base;
-}
-// -----------------------------------------------------------------------------------------------------------
 template <> size_t GenericFill<IfcUShapeProfileDef>(const DB& db, const LIST& params, IfcUShapeProfileDef* in)
 template <> size_t GenericFill<IfcUShapeProfileDef>(const DB& db, const LIST& params, IfcUShapeProfileDef* in)
 {
 {
 	size_t base = GenericFill(db,params,static_cast<IfcParameterizedProfileDef*>(in));
 	size_t base = GenericFill(db,params,static_cast<IfcParameterizedProfileDef*>(in));
@@ -3375,7 +3395,32 @@ template <> size_t GenericFill<IfcSubContractResource>(const DB& db, const LIST&
 template <> size_t GenericFill<IfcSweptDiskSolid>(const DB& db, const LIST& params, IfcSweptDiskSolid* in)
 template <> size_t GenericFill<IfcSweptDiskSolid>(const DB& db, const LIST& params, IfcSweptDiskSolid* in)
 {
 {
 	size_t base = GenericFill(db,params,static_cast<IfcSolidModel*>(in));
 	size_t base = GenericFill(db,params,static_cast<IfcSolidModel*>(in));
-// this data structure is not used yet, so there is no code generated to fill its members
+	if (params.GetSize() < 5) { throw STEP::TypeError("expected 5 arguments to IfcSweptDiskSolid"); }    do { // convert the 'Directrix' argument
+        boost::shared_ptr<const DataType> arg = params[base++];
+        try { GenericConvert( in->Directrix, arg, db ); break; } 
+        catch (const TypeError& t) { throw TypeError(t.what() + std::string(" - expected argument 0 to IfcSweptDiskSolid to be a `IfcCurve`")); }
+    } while(0);
+    do { // convert the 'Radius' argument
+        boost::shared_ptr<const DataType> arg = params[base++];
+        try { GenericConvert( in->Radius, arg, db ); break; } 
+        catch (const TypeError& t) { throw TypeError(t.what() + std::string(" - expected argument 1 to IfcSweptDiskSolid to be a `IfcPositiveLengthMeasure`")); }
+    } while(0);
+    do { // convert the 'InnerRadius' argument
+        boost::shared_ptr<const DataType> arg = params[base++];
+        if (dynamic_cast<const UNSET*>(&*arg)) break;
+        try { GenericConvert( in->InnerRadius, arg, db ); break; } 
+        catch (const TypeError& t) { throw TypeError(t.what() + std::string(" - expected argument 2 to IfcSweptDiskSolid to be a `IfcPositiveLengthMeasure`")); }
+    } while(0);
+    do { // convert the 'StartParam' argument
+        boost::shared_ptr<const DataType> arg = params[base++];
+        try { GenericConvert( in->StartParam, arg, db ); break; } 
+        catch (const TypeError& t) { throw TypeError(t.what() + std::string(" - expected argument 3 to IfcSweptDiskSolid to be a `IfcParameterValue`")); }
+    } while(0);
+    do { // convert the 'EndParam' argument
+        boost::shared_ptr<const DataType> arg = params[base++];
+        try { GenericConvert( in->EndParam, arg, db ); break; } 
+        catch (const TypeError& t) { throw TypeError(t.what() + std::string(" - expected argument 4 to IfcSweptDiskSolid to be a `IfcParameterValue`")); }
+    } while(0);
 	return base;
 	return base;
 }
 }
 // -----------------------------------------------------------------------------------------------------------
 // -----------------------------------------------------------------------------------------------------------
@@ -3980,19 +4025,6 @@ template <> size_t GenericFill<IfcBoilerType>(const DB& db, const LIST& params,
 	return base;
 	return base;
 }
 }
 // -----------------------------------------------------------------------------------------------------------
 // -----------------------------------------------------------------------------------------------------------
-template <> size_t GenericFill<IfcColourSpecification>(const DB& db, const LIST& params, IfcColourSpecification* in)
-{
-	size_t base = 0;
-	if (params.GetSize() < 1) { throw STEP::TypeError("expected 1 arguments to IfcColourSpecification"); }    do { // convert the 'Name' argument
-        boost::shared_ptr<const DataType> arg = params[base++];
-        if (dynamic_cast<const ISDERIVED*>(&*arg)) { in->ObjectHelper<Assimp::IFC::IfcColourSpecification,1>::aux_is_derived[0]=true; break; }
-        if (dynamic_cast<const UNSET*>(&*arg)) break;
-        try { GenericConvert( in->Name, arg, db ); break; } 
-        catch (const TypeError& t) { throw TypeError(t.what() + std::string(" - expected argument 0 to IfcColourSpecification to be a `IfcLabel`")); }
-    } while(0);
-	return base;
-}
-// -----------------------------------------------------------------------------------------------------------
 template <> size_t GenericFill<IfcColourRgb>(const DB& db, const LIST& params, IfcColourRgb* in)
 template <> size_t GenericFill<IfcColourRgb>(const DB& db, const LIST& params, IfcColourRgb* in)
 {
 {
 	size_t base = GenericFill(db,params,static_cast<IfcColourSpecification*>(in));
 	size_t base = GenericFill(db,params,static_cast<IfcColourSpecification*>(in));
@@ -4063,13 +4095,6 @@ template <> size_t GenericFill<IfcAnnotationSurfaceOccurrence>(const DB& db, con
 	return base;
 	return base;
 }
 }
 // -----------------------------------------------------------------------------------------------------------
 // -----------------------------------------------------------------------------------------------------------
-template <> size_t GenericFill<IfcZShapeProfileDef>(const DB& db, const LIST& params, IfcZShapeProfileDef* in)
-{
-	size_t base = GenericFill(db,params,static_cast<IfcParameterizedProfileDef*>(in));
-// this data structure is not used yet, so there is no code generated to fill its members
-	return base;
-}
-// -----------------------------------------------------------------------------------------------------------
 template <> size_t GenericFill<IfcRationalBezierCurve>(const DB& db, const LIST& params, IfcRationalBezierCurve* in)
 template <> size_t GenericFill<IfcRationalBezierCurve>(const DB& db, const LIST& params, IfcRationalBezierCurve* in)
 {
 {
 	size_t base = GenericFill(db,params,static_cast<IfcBezierCurve*>(in));
 	size_t base = GenericFill(db,params,static_cast<IfcBezierCurve*>(in));

+ 42 - 42
code/IFCReaderGen.h

@@ -1,8 +1,8 @@
 /*
 /*
-Open Asset Import Library (assimp)
+Open Asset Import Library (ASSIMP)
 ----------------------------------------------------------------------
 ----------------------------------------------------------------------
 
 
-Copyright (c) 2006-2012, assimp team
+Copyright (c) 2006-2010, ASSIMP Development Team
 All rights reserved.
 All rights reserved.
 
 
 Redistribution and use of this software in source and binary forms, 
 Redistribution and use of this software in source and binary forms, 
@@ -18,10 +18,10 @@ following conditions are met:
   following disclaimer in the documentation and/or other
   following disclaimer in the documentation and/or other
   materials provided with the distribution.
   materials provided with the distribution.
 
 
-* Neither the name of the assimp team, nor the names of its
+* Neither the name of the ASSIMP team, nor the names of its
   contributors may be used to endorse or promote products
   contributors may be used to endorse or promote products
   derived from this software without specific prior
   derived from this software without specific prior
-  written permission of the assimp team.
+  written permission of the ASSIMP Development Team.
 
 
 THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 
 THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 
 "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 
 "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 
@@ -149,8 +149,6 @@ namespace IFC {
     typedef ENUMERATION IfcThermalLoadTypeEnum;
     typedef ENUMERATION IfcThermalLoadTypeEnum;
     // C++ wrapper type for IfcIonConcentrationMeasure
     // C++ wrapper type for IfcIonConcentrationMeasure
     typedef REAL IfcIonConcentrationMeasure;
     typedef REAL IfcIonConcentrationMeasure;
-    // C++ wrapper type for IfcObjectReferenceSelect
-    typedef SELECT IfcObjectReferenceSelect;
     // C++ wrapper type for IfcClassificationNotationSelect
     // C++ wrapper type for IfcClassificationNotationSelect
     typedef SELECT IfcClassificationNotationSelect;
     typedef SELECT IfcClassificationNotationSelect;
     // C++ wrapper type for IfcBSplineCurveForm
     // C++ wrapper type for IfcBSplineCurveForm
@@ -273,6 +271,8 @@ namespace IFC {
     typedef REAL IfcRadioActivityMeasure;
     typedef REAL IfcRadioActivityMeasure;
     // C++ wrapper type for IfcSymbolStyleSelect
     // C++ wrapper type for IfcSymbolStyleSelect
     typedef SELECT IfcSymbolStyleSelect;
     typedef SELECT IfcSymbolStyleSelect;
+    // C++ wrapper type for IfcObjectReferenceSelect
+    typedef SELECT IfcObjectReferenceSelect;
     // C++ wrapper type for IfcRoofTypeEnum
     // C++ wrapper type for IfcRoofTypeEnum
     typedef ENUMERATION IfcRoofTypeEnum;
     typedef ENUMERATION IfcRoofTypeEnum;
     // C++ wrapper type for IfcReal
     // C++ wrapper type for IfcReal
@@ -293,6 +293,8 @@ namespace IFC {
     typedef ENUMERATION IfcTransformerTypeEnum;
     typedef ENUMERATION IfcTransformerTypeEnum;
     // C++ wrapper type for IfcSurfaceSide
     // C++ wrapper type for IfcSurfaceSide
     typedef ENUMERATION IfcSurfaceSide;
     typedef ENUMERATION IfcSurfaceSide;
+    // C++ wrapper type for IfcSpaceHeaterTypeEnum
+    typedef ENUMERATION IfcSpaceHeaterTypeEnum;
     // C++ wrapper type for IfcThermalTransmittanceMeasure
     // C++ wrapper type for IfcThermalTransmittanceMeasure
     typedef REAL IfcThermalTransmittanceMeasure;
     typedef REAL IfcThermalTransmittanceMeasure;
     // C++ wrapper type for IfcTubeBundleTypeEnum
     // C++ wrapper type for IfcTubeBundleTypeEnum
@@ -433,8 +435,6 @@ namespace IFC {
     typedef ENUMERATION IfcBeamTypeEnum;
     typedef ENUMERATION IfcBeamTypeEnum;
     // C++ wrapper type for IfcStateEnum
     // C++ wrapper type for IfcStateEnum
     typedef ENUMERATION IfcStateEnum;
     typedef ENUMERATION IfcStateEnum;
-    // C++ wrapper type for IfcSpaceHeaterTypeEnum
-    typedef ENUMERATION IfcSpaceHeaterTypeEnum;
     // C++ wrapper type for IfcSectionTypeEnum
     // C++ wrapper type for IfcSectionTypeEnum
     typedef ENUMERATION IfcSectionTypeEnum;
     typedef ENUMERATION IfcSectionTypeEnum;
     // C++ wrapper type for IfcFootingTypeEnum
     // C++ wrapper type for IfcFootingTypeEnum
@@ -719,6 +719,9 @@ namespace IFC {
 	// IFC Entities
 	// IFC Entities
 	// ******************************************************************************
 	// ******************************************************************************
 
 
+	struct IfcProfileDef;
+	struct IfcParameterizedProfileDef;
+	struct IfcZShapeProfileDef;
 	struct IfcRoot;
 	struct IfcRoot;
 	struct IfcObjectDefinition;
 	struct IfcObjectDefinition;
 	struct IfcTypeObject;
 	struct IfcTypeObject;
@@ -803,7 +806,6 @@ namespace IFC {
 	typedef NotImplemented IfcPreDefinedItem; // (not currently used by Assimp)
 	typedef NotImplemented IfcPreDefinedItem; // (not currently used by Assimp)
 	typedef NotImplemented IfcPreDefinedColour; // (not currently used by Assimp)
 	typedef NotImplemented IfcPreDefinedColour; // (not currently used by Assimp)
 	typedef NotImplemented IfcDraughtingPreDefinedColour; // (not currently used by Assimp)
 	typedef NotImplemented IfcDraughtingPreDefinedColour; // (not currently used by Assimp)
-	struct IfcProfileDef;
 	struct IfcArbitraryClosedProfileDef;
 	struct IfcArbitraryClosedProfileDef;
 	struct IfcCurve;
 	struct IfcCurve;
 	struct IfcConic;
 	struct IfcConic;
@@ -890,6 +892,7 @@ namespace IFC {
 	struct IfcAxis1Placement;
 	struct IfcAxis1Placement;
 	typedef NotImplemented IfcLightIntensityDistribution; // (not currently used by Assimp)
 	typedef NotImplemented IfcLightIntensityDistribution; // (not currently used by Assimp)
 	typedef NotImplemented IfcPreDefinedSymbol; // (not currently used by Assimp)
 	typedef NotImplemented IfcPreDefinedSymbol; // (not currently used by Assimp)
+	struct IfcColourSpecification;
 	struct IfcStructuralPointAction;
 	struct IfcStructuralPointAction;
 	struct IfcSpatialStructureElement;
 	struct IfcSpatialStructureElement;
 	struct IfcSpace;
 	struct IfcSpace;
@@ -923,7 +926,6 @@ namespace IFC {
 	struct IfcVertex;
 	struct IfcVertex;
 	struct IfcVertexPoint;
 	struct IfcVertexPoint;
 	struct IfcFlowInstrumentType;
 	struct IfcFlowInstrumentType;
-	struct IfcParameterizedProfileDef;
 	struct IfcUShapeProfileDef;
 	struct IfcUShapeProfileDef;
 	struct IfcRamp;
 	struct IfcRamp;
 	typedef NotImplemented IfcFillAreaStyle; // (not currently used by Assimp)
 	typedef NotImplemented IfcFillAreaStyle; // (not currently used by Assimp)
@@ -1209,7 +1211,6 @@ namespace IFC {
 	struct IfcRelAggregates;
 	struct IfcRelAggregates;
 	struct IfcBoilerType;
 	struct IfcBoilerType;
 	typedef NotImplemented IfcRelProjectsElement; // (not currently used by Assimp)
 	typedef NotImplemented IfcRelProjectsElement; // (not currently used by Assimp)
-	struct IfcColourSpecification;
 	struct IfcColourRgb;
 	struct IfcColourRgb;
 	typedef NotImplemented IfcRelConnectsStructuralActivity; // (not currently used by Assimp)
 	typedef NotImplemented IfcRelConnectsStructuralActivity; // (not currently used by Assimp)
 	struct IfcDoorStyle;
 	struct IfcDoorStyle;
@@ -1221,7 +1222,6 @@ namespace IFC {
 	struct IfcSensorType;
 	struct IfcSensorType;
 	struct IfcAirTerminalBoxType;
 	struct IfcAirTerminalBoxType;
 	struct IfcAnnotationSurfaceOccurrence;
 	struct IfcAnnotationSurfaceOccurrence;
-	struct IfcZShapeProfileDef;
 	typedef NotImplemented IfcClassificationNotation; // (not currently used by Assimp)
 	typedef NotImplemented IfcClassificationNotation; // (not currently used by Assimp)
 	struct IfcRationalBezierCurve;
 	struct IfcRationalBezierCurve;
 	struct IfcCartesianTransformationOperator2D;
 	struct IfcCartesianTransformationOperator2D;
@@ -1375,6 +1375,27 @@ namespace IFC {
 
 
 
 
 
 
+    // C++ wrapper for IfcProfileDef
+    struct IfcProfileDef :  ObjectHelper<IfcProfileDef,2> { IfcProfileDef() : Object("IfcProfileDef") {}
+		IfcProfileTypeEnum::Out ProfileType;
+		Maybe< IfcLabel::Out > ProfileName;
+    };
+
+    // C++ wrapper for IfcParameterizedProfileDef
+    struct IfcParameterizedProfileDef : IfcProfileDef, ObjectHelper<IfcParameterizedProfileDef,1> { IfcParameterizedProfileDef() : Object("IfcParameterizedProfileDef") {}
+		Lazy< IfcAxis2Placement2D > Position;
+    };
+
+    // C++ wrapper for IfcZShapeProfileDef
+    struct IfcZShapeProfileDef : IfcParameterizedProfileDef, ObjectHelper<IfcZShapeProfileDef,6> { IfcZShapeProfileDef() : Object("IfcZShapeProfileDef") {}
+		IfcPositiveLengthMeasure::Out Depth;
+		IfcPositiveLengthMeasure::Out FlangeWidth;
+		IfcPositiveLengthMeasure::Out WebThickness;
+		IfcPositiveLengthMeasure::Out FlangeThickness;
+		Maybe< IfcPositiveLengthMeasure::Out > FilletRadius;
+		Maybe< IfcPositiveLengthMeasure::Out > EdgeRadius;
+    };
+
     // C++ wrapper for IfcRoot
     // C++ wrapper for IfcRoot
     struct IfcRoot :  ObjectHelper<IfcRoot,4> { IfcRoot() : Object("IfcRoot") {}
     struct IfcRoot :  ObjectHelper<IfcRoot,4> { IfcRoot() : Object("IfcRoot") {}
 		IfcGloballyUniqueId::Out GlobalId;
 		IfcGloballyUniqueId::Out GlobalId;
@@ -1654,12 +1675,6 @@ namespace IFC {
 		Lazy< IfcCartesianPoint > Location;
 		Lazy< IfcCartesianPoint > Location;
     };
     };
 
 
-    // C++ wrapper for IfcProfileDef
-    struct IfcProfileDef :  ObjectHelper<IfcProfileDef,2> { IfcProfileDef() : Object("IfcProfileDef") {}
-		IfcProfileTypeEnum::Out ProfileType;
-		Maybe< IfcLabel::Out > ProfileName;
-    };
-
     // C++ wrapper for IfcArbitraryClosedProfileDef
     // C++ wrapper for IfcArbitraryClosedProfileDef
     struct IfcArbitraryClosedProfileDef : IfcProfileDef, ObjectHelper<IfcArbitraryClosedProfileDef,1> { IfcArbitraryClosedProfileDef() : Object("IfcArbitraryClosedProfileDef") {}
     struct IfcArbitraryClosedProfileDef : IfcProfileDef, ObjectHelper<IfcArbitraryClosedProfileDef,1> { IfcArbitraryClosedProfileDef() : Object("IfcArbitraryClosedProfileDef") {}
 		Lazy< IfcCurve > OuterCurve;
 		Lazy< IfcCurve > OuterCurve;
@@ -1997,6 +2012,11 @@ namespace IFC {
 		Maybe< Lazy< IfcDirection > > Axis;
 		Maybe< Lazy< IfcDirection > > Axis;
     };
     };
 
 
+    // C++ wrapper for IfcColourSpecification
+    struct IfcColourSpecification :  ObjectHelper<IfcColourSpecification,1> { IfcColourSpecification() : Object("IfcColourSpecification") {}
+		Maybe< IfcLabel::Out > Name;
+    };
+
     // C++ wrapper for IfcStructuralPointAction
     // C++ wrapper for IfcStructuralPointAction
     struct IfcStructuralPointAction : IfcStructuralAction, ObjectHelper<IfcStructuralPointAction,0> { IfcStructuralPointAction() : Object("IfcStructuralPointAction") {}
     struct IfcStructuralPointAction : IfcStructuralAction, ObjectHelper<IfcStructuralPointAction,0> { IfcStructuralPointAction() : Object("IfcStructuralPointAction") {}
 
 
@@ -2103,11 +2123,6 @@ namespace IFC {
 		IfcFlowInstrumentTypeEnum::Out PredefinedType;
 		IfcFlowInstrumentTypeEnum::Out PredefinedType;
     };
     };
 
 
-    // C++ wrapper for IfcParameterizedProfileDef
-    struct IfcParameterizedProfileDef : IfcProfileDef, ObjectHelper<IfcParameterizedProfileDef,1> { IfcParameterizedProfileDef() : Object("IfcParameterizedProfileDef") {}
-		Lazy< IfcAxis2Placement2D > Position;
-    };
-
     // C++ wrapper for IfcUShapeProfileDef
     // C++ wrapper for IfcUShapeProfileDef
     struct IfcUShapeProfileDef : IfcParameterizedProfileDef, ObjectHelper<IfcUShapeProfileDef,8> { IfcUShapeProfileDef() : Object("IfcUShapeProfileDef") {}
     struct IfcUShapeProfileDef : IfcParameterizedProfileDef, ObjectHelper<IfcUShapeProfileDef,8> { IfcUShapeProfileDef() : Object("IfcUShapeProfileDef") {}
 		IfcPositiveLengthMeasure::Out Depth;
 		IfcPositiveLengthMeasure::Out Depth;
@@ -3215,11 +3230,6 @@ namespace IFC {
 		IfcBoilerTypeEnum::Out PredefinedType;
 		IfcBoilerTypeEnum::Out PredefinedType;
     };
     };
 
 
-    // C++ wrapper for IfcColourSpecification
-    struct IfcColourSpecification :  ObjectHelper<IfcColourSpecification,1> { IfcColourSpecification() : Object("IfcColourSpecification") {}
-		Maybe< IfcLabel::Out > Name;
-    };
-
     // C++ wrapper for IfcColourRgb
     // C++ wrapper for IfcColourRgb
     struct IfcColourRgb : IfcColourSpecification, ObjectHelper<IfcColourRgb,3> { IfcColourRgb() : Object("IfcColourRgb") {}
     struct IfcColourRgb : IfcColourSpecification, ObjectHelper<IfcColourRgb,3> { IfcColourRgb() : Object("IfcColourRgb") {}
 		IfcNormalisedRatioMeasure::Out Red;
 		IfcNormalisedRatioMeasure::Out Red;
@@ -3270,16 +3280,6 @@ namespace IFC {
 
 
     };
     };
 
 
-    // C++ wrapper for IfcZShapeProfileDef
-    struct IfcZShapeProfileDef : IfcParameterizedProfileDef, ObjectHelper<IfcZShapeProfileDef,6> { IfcZShapeProfileDef() : Object("IfcZShapeProfileDef") {}
-		IfcPositiveLengthMeasure::Out Depth;
-		IfcPositiveLengthMeasure::Out FlangeWidth;
-		IfcPositiveLengthMeasure::Out WebThickness;
-		IfcPositiveLengthMeasure::Out FlangeThickness;
-		Maybe< IfcPositiveLengthMeasure::Out > FilletRadius;
-		Maybe< IfcPositiveLengthMeasure::Out > EdgeRadius;
-    };
-
     // C++ wrapper for IfcRationalBezierCurve
     // C++ wrapper for IfcRationalBezierCurve
     struct IfcRationalBezierCurve : IfcBezierCurve, ObjectHelper<IfcRationalBezierCurve,1> { IfcRationalBezierCurve() : Object("IfcRationalBezierCurve") {}
     struct IfcRationalBezierCurve : IfcBezierCurve, ObjectHelper<IfcRationalBezierCurve,1> { IfcRationalBezierCurve() : Object("IfcRationalBezierCurve") {}
 		ListOf< REAL, 2, 0 >::Out WeightsData;
 		ListOf< REAL, 2, 0 >::Out WeightsData;
@@ -3829,6 +3829,9 @@ namespace STEP {
 	
 	
 #define DECL_CONV_STUB(type) template <> size_t GenericFill<IFC::type>(const STEP::DB& db, const EXPRESS::LIST& params, IFC::type* in)
 #define DECL_CONV_STUB(type) template <> size_t GenericFill<IFC::type>(const STEP::DB& db, const EXPRESS::LIST& params, IFC::type* in)
 	
 	
+	DECL_CONV_STUB(IfcProfileDef);
+	DECL_CONV_STUB(IfcParameterizedProfileDef);
+	DECL_CONV_STUB(IfcZShapeProfileDef);
 	DECL_CONV_STUB(IfcRoot);
 	DECL_CONV_STUB(IfcRoot);
 	DECL_CONV_STUB(IfcObjectDefinition);
 	DECL_CONV_STUB(IfcObjectDefinition);
 	DECL_CONV_STUB(IfcTypeObject);
 	DECL_CONV_STUB(IfcTypeObject);
@@ -3880,7 +3883,6 @@ namespace STEP {
 	DECL_CONV_STUB(IfcUnitaryEquipmentType);
 	DECL_CONV_STUB(IfcUnitaryEquipmentType);
 	DECL_CONV_STUB(IfcPort);
 	DECL_CONV_STUB(IfcPort);
 	DECL_CONV_STUB(IfcPlacement);
 	DECL_CONV_STUB(IfcPlacement);
-	DECL_CONV_STUB(IfcProfileDef);
 	DECL_CONV_STUB(IfcArbitraryClosedProfileDef);
 	DECL_CONV_STUB(IfcArbitraryClosedProfileDef);
 	DECL_CONV_STUB(IfcCurve);
 	DECL_CONV_STUB(IfcCurve);
 	DECL_CONV_STUB(IfcConic);
 	DECL_CONV_STUB(IfcConic);
@@ -3943,6 +3945,7 @@ namespace STEP {
 	DECL_CONV_STUB(IfcDimensionCurve);
 	DECL_CONV_STUB(IfcDimensionCurve);
 	DECL_CONV_STUB(IfcBoundedCurve);
 	DECL_CONV_STUB(IfcBoundedCurve);
 	DECL_CONV_STUB(IfcAxis1Placement);
 	DECL_CONV_STUB(IfcAxis1Placement);
+	DECL_CONV_STUB(IfcColourSpecification);
 	DECL_CONV_STUB(IfcStructuralPointAction);
 	DECL_CONV_STUB(IfcStructuralPointAction);
 	DECL_CONV_STUB(IfcSpatialStructureElement);
 	DECL_CONV_STUB(IfcSpatialStructureElement);
 	DECL_CONV_STUB(IfcSpace);
 	DECL_CONV_STUB(IfcSpace);
@@ -3963,7 +3966,6 @@ namespace STEP {
 	DECL_CONV_STUB(IfcVertex);
 	DECL_CONV_STUB(IfcVertex);
 	DECL_CONV_STUB(IfcVertexPoint);
 	DECL_CONV_STUB(IfcVertexPoint);
 	DECL_CONV_STUB(IfcFlowInstrumentType);
 	DECL_CONV_STUB(IfcFlowInstrumentType);
-	DECL_CONV_STUB(IfcParameterizedProfileDef);
 	DECL_CONV_STUB(IfcUShapeProfileDef);
 	DECL_CONV_STUB(IfcUShapeProfileDef);
 	DECL_CONV_STUB(IfcRamp);
 	DECL_CONV_STUB(IfcRamp);
 	DECL_CONV_STUB(IfcCompositeCurve);
 	DECL_CONV_STUB(IfcCompositeCurve);
@@ -4150,7 +4152,6 @@ namespace STEP {
 	DECL_CONV_STUB(IfcConstructionMaterialResource);
 	DECL_CONV_STUB(IfcConstructionMaterialResource);
 	DECL_CONV_STUB(IfcRelAggregates);
 	DECL_CONV_STUB(IfcRelAggregates);
 	DECL_CONV_STUB(IfcBoilerType);
 	DECL_CONV_STUB(IfcBoilerType);
-	DECL_CONV_STUB(IfcColourSpecification);
 	DECL_CONV_STUB(IfcColourRgb);
 	DECL_CONV_STUB(IfcColourRgb);
 	DECL_CONV_STUB(IfcDoorStyle);
 	DECL_CONV_STUB(IfcDoorStyle);
 	DECL_CONV_STUB(IfcDuctSilencerType);
 	DECL_CONV_STUB(IfcDuctSilencerType);
@@ -4159,7 +4160,6 @@ namespace STEP {
 	DECL_CONV_STUB(IfcSensorType);
 	DECL_CONV_STUB(IfcSensorType);
 	DECL_CONV_STUB(IfcAirTerminalBoxType);
 	DECL_CONV_STUB(IfcAirTerminalBoxType);
 	DECL_CONV_STUB(IfcAnnotationSurfaceOccurrence);
 	DECL_CONV_STUB(IfcAnnotationSurfaceOccurrence);
-	DECL_CONV_STUB(IfcZShapeProfileDef);
 	DECL_CONV_STUB(IfcRationalBezierCurve);
 	DECL_CONV_STUB(IfcRationalBezierCurve);
 	DECL_CONV_STUB(IfcCartesianTransformationOperator2D);
 	DECL_CONV_STUB(IfcCartesianTransformationOperator2D);
 	DECL_CONV_STUB(IfcCartesianTransformationOperator2DnonUniform);
 	DECL_CONV_STUB(IfcCartesianTransformationOperator2DnonUniform);

+ 1 - 1
code/IFCUtil.h

@@ -100,7 +100,7 @@ struct ConversionData
 {
 {
 	ConversionData(const STEP::DB& db, const IFC::IfcProject& proj, aiScene* out,const IFCImporter::Settings& settings)
 	ConversionData(const STEP::DB& db, const IFC::IfcProject& proj, aiScene* out,const IFCImporter::Settings& settings)
 		: len_scale(1.0)
 		: len_scale(1.0)
-		, angle_scale(1.0)
+		, angle_scale(-1.0)
 		, db(db)
 		, db(db)
 		, proj(proj)
 		, proj(proj)
 		, out(out)
 		, out(out)

+ 11 - 2
code/MemoryIOWrapper.h

@@ -53,12 +53,20 @@ class MemoryIOStream : public IOStream
 {
 {
 	//friend class MemoryIOSystem;
 	//friend class MemoryIOSystem;
 public:
 public:
-	MemoryIOStream (const uint8_t* buff, size_t len) 
-		: buffer (buff), length(len), pos((size_t)0) {
+	MemoryIOStream (const uint8_t* buff, size_t len, bool own = false) 
+		: buffer (buff)
+		, length(len)
+		, pos((size_t)0)
+		, own(own) 
+	{
 	}
 	}
 
 
 public:
 public:
+
 	~MemoryIOStream ()	{
 	~MemoryIOStream ()	{
+		if(own) {
+			delete[] buffer;
+		}
 	}
 	}
 
 
 	// -------------------------------------------------------------------
 	// -------------------------------------------------------------------
@@ -124,6 +132,7 @@ public:
 private:
 private:
 	const uint8_t* buffer;
 	const uint8_t* buffer;
 	size_t length,pos;
 	size_t length,pos;
+	bool own;
 };
 };
 
 
 // ---------------------------------------------------------------------------
 // ---------------------------------------------------------------------------

+ 4 - 0
code/ObjTools.h

@@ -172,6 +172,10 @@ inline char_t getName( char_t it, char_t end, std::string &name )
 	++it;
 	++it;
 
 
 	// Get name
 	// Get name
+	// if there is no name, and the previous char is a separator, come back to start
+	while (&(*it) < pStart) {
+		++it;
+	}
 	std::string strName( pStart, &(*it) );
 	std::string strName( pStart, &(*it) );
 	if ( strName.empty() )
 	if ( strName.empty() )
 		return it;
 		return it;

+ 2 - 2
code/OgreImporter.cpp

@@ -176,8 +176,8 @@ void OgreImporter::InternReadFile(const std::string &pFile, aiScene *pScene, Ass
 	}
 	}
 	else
 	else
 	{
 	{
-		DefaultLogger::get()->warn("No skeleton file will be loaded");
-		DefaultLogger::get()->warn(MeshFile->getNodeName());
+		DefaultLogger::get()->debug("No skeleton file will be loaded");
+		DefaultLogger::get()->debug(MeshFile->getNodeName());
 	}
 	}
 	//__________________________________________________________________
 	//__________________________________________________________________
 
 

+ 1 - 2
code/OgreMesh.cpp

@@ -130,8 +130,7 @@ void OgreImporter::ReadSubMesh(SubMesh &theSubMesh, XmlReader *Reader)
 		" Normale: ",theSubMesh.Normals.size(),
 		" Normale: ",theSubMesh.Normals.size(),
 		" TexCoords: ",theSubMesh.Uvs.size(),
 		" TexCoords: ",theSubMesh.Uvs.size(),
 		" Tantents: ",theSubMesh.Tangents.size()
 		" Tantents: ",theSubMesh.Tangents.size()
-	));							
-	DefaultLogger::get()->warn(Reader->getNodeName());
+	));
 }
 }
 
 
 
 

BIN
doc/AssimpDoc_Html/AnimationOverview.png


+ 645 - 0
doc/AssimpDoc_Html/AnimationOverview.svg

@@ -0,0 +1,645 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+   xmlns:dc="http://purl.org/dc/elements/1.1/"
+   xmlns:cc="http://creativecommons.org/ns#"
+   xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+   xmlns:svg="http://www.w3.org/2000/svg"
+   xmlns="http://www.w3.org/2000/svg"
+   xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+   xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+   width="557.00226"
+   height="451.52655"
+   id="svg2"
+   version="1.1"
+   inkscape:version="0.48.1 "
+   sodipodi:docname="AssimpAnimation.svg"
+   inkscape:export-filename="A:\Jonathan\Documents\AssimpAnimation.png"
+   inkscape:export-xdpi="100"
+   inkscape:export-ydpi="100">
+  <defs
+     id="defs4">
+    <marker
+       inkscape:stockid="Arrow2Mend"
+       orient="auto"
+       refY="0"
+       refX="0"
+       id="Arrow2Mend"
+       style="overflow:visible">
+      <path
+         id="path4020"
+         style="font-size:12px;fill-rule:evenodd;stroke-width:0.625;stroke-linejoin:round"
+         d="M 8.7185878,4.0337352 -2.2072895,0.01601326 8.7185884,-4.0017078 c -1.7454984,2.3720609 -1.7354408,5.6174519 -6e-7,8.035443 z"
+         transform="scale(-0.6,-0.6)"
+         inkscape:connector-curvature="0" />
+    </marker>
+    <marker
+       inkscape:stockid="Arrow2Lend"
+       orient="auto"
+       refY="0"
+       refX="0"
+       id="Arrow2Lend"
+       style="overflow:visible">
+      <path
+         id="path4014"
+         style="font-size:12px;fill-rule:evenodd;stroke-width:0.625;stroke-linejoin:round"
+         d="M 8.7185878,4.0337352 -2.2072895,0.01601326 8.7185884,-4.0017078 c -1.7454984,2.3720609 -1.7354408,5.6174519 -6e-7,8.035443 z"
+         transform="matrix(-1.1,0,0,-1.1,-1.1,0)"
+         inkscape:connector-curvature="0" />
+    </marker>
+  </defs>
+  <sodipodi:namedview
+     id="base"
+     pagecolor="#ffffff"
+     bordercolor="#666666"
+     borderopacity="1.0"
+     inkscape:pageopacity="1"
+     inkscape:pageshadow="2"
+     inkscape:zoom="1"
+     inkscape:cx="521.95938"
+     inkscape:cy="235.26058"
+     inkscape:document-units="px"
+     inkscape:current-layer="layer1"
+     showgrid="false"
+     inkscape:window-width="1525"
+     inkscape:window-height="905"
+     inkscape:window-x="223"
+     inkscape:window-y="47"
+     inkscape:window-maximized="0"
+     fit-margin-top="10"
+     fit-margin-left="10"
+     fit-margin-right="10"
+     fit-margin-bottom="10" />
+  <metadata
+     id="metadata7">
+    <rdf:RDF>
+      <cc:Work
+         rdf:about="">
+        <dc:format>image/svg+xml</dc:format>
+        <dc:type
+           rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+        <dc:title></dc:title>
+      </cc:Work>
+    </rdf:RDF>
+  </metadata>
+  <g
+     inkscape:label="Ebene 1"
+     inkscape:groupmode="layer"
+     id="layer1"
+     transform="translate(-7.4185486,-19.719715)">
+    <g
+       id="g3133"
+       transform="translate(-171.43404,-84.903042)">
+      <path
+         inkscape:connector-curvature="0"
+         id="path2985"
+         d="m 245.91963,269.53006 0,-64.64286"
+         style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
+      <path
+         inkscape:connector-curvature="0"
+         id="path2987"
+         d="m 245.91963,193.26767 0,-26.75116"
+         style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
+      <path
+         inkscape:connector-curvature="0"
+         id="path2989"
+         d="M 239.99615,202.05734 203.691,232.24794"
+         style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
+      <path
+         inkscape:connector-curvature="0"
+         id="path2991"
+         d="m 253.7539,202.05734 35.54083,25.98684"
+         style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
+      <path
+         inkscape:connector-curvature="0"
+         id="path2993"
+         d="m 241.52479,278.87139 c 0,0 -32.86571,32.48356 -31.33708,32.86572"
+         style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
+      <path
+         inkscape:connector-curvature="0"
+         id="path2995"
+         d="m 250.31446,278.87139 36.68731,28.66196"
+         style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
+      <path
+         transform="translate(-0.38215944,-113.50137)"
+         d="m 248.78583,276.00519 c 0,1.37189 -1.11215,2.48403 -2.48404,2.48403 -1.3719,0 -2.48404,-1.11214 -2.48404,-2.48403 0,-1.3719 1.11214,-2.48404 2.48404,-2.48404 1.37189,0 2.48404,1.11214 2.48404,2.48404 z"
+         sodipodi:ry="2.4840367"
+         sodipodi:rx="2.4840367"
+         sodipodi:cy="276.00519"
+         sodipodi:cx="246.30179"
+         id="path3003"
+         style="fill:#ffffff;fill-opacity:1;stroke:#030000;stroke-width:0.99921262;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0"
+         sodipodi:type="arc" />
+      <path
+         sodipodi:type="arc"
+         style="fill:#ffffff;fill-opacity:1;stroke:#030000;stroke-width:0.99921262;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0"
+         id="path3017"
+         sodipodi:cx="246.30179"
+         sodipodi:cy="276.00519"
+         sodipodi:rx="2.4840367"
+         sodipodi:ry="2.4840367"
+         d="m 248.78583,276.00519 c 0,1.37189 -1.11215,2.48403 -2.48404,2.48403 -1.3719,0 -2.48404,-1.11214 -2.48404,-2.48403 0,-1.3719 1.11214,-2.48404 2.48404,-2.48404 1.37189,0 2.48404,1.11214 2.48404,2.48404 z"
+         transform="translate(-0.38215944,-1.5286383)" />
+      <path
+         sodipodi:type="arc"
+         style="fill:#ffffff;fill-opacity:1;stroke:#030000;stroke-width:0.99921262;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0"
+         id="path3019"
+         sodipodi:cx="246.30179"
+         sodipodi:cy="276.00519"
+         sodipodi:rx="2.4840367"
+         sodipodi:ry="2.4840367"
+         d="m 248.78583,276.00519 c 0,1.37189 -1.11215,2.48403 -2.48404,2.48403 -1.3719,0 -2.48404,-1.11214 -2.48404,-2.48403 0,-1.3719 1.11214,-2.48404 2.48404,-2.48404 1.37189,0 2.48404,1.11214 2.48404,2.48404 z"
+         transform="translate(-0.38215944,-76.81406)" />
+      <path
+         transform="translate(47.769935,-44.330504)"
+         d="m 248.78583,276.00519 c 0,1.37189 -1.11215,2.48403 -2.48404,2.48403 -1.3719,0 -2.48404,-1.11214 -2.48404,-2.48403 0,-1.3719 1.11214,-2.48404 2.48404,-2.48404 1.37189,0 2.48404,1.11214 2.48404,2.48404 z"
+         sodipodi:ry="2.4840367"
+         sodipodi:rx="2.4840367"
+         sodipodi:cy="276.00519"
+         sodipodi:cx="246.30179"
+         id="path3021"
+         style="fill:#ffffff;fill-opacity:1;stroke:#030000;stroke-width:0.99921262;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0"
+         sodipodi:type="arc" />
+      <path
+         sodipodi:type="arc"
+         style="fill:#ffffff;fill-opacity:1;stroke:#030000;stroke-width:0.99921262;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0"
+         id="path3023"
+         sodipodi:cx="246.30179"
+         sodipodi:cy="276.00519"
+         sodipodi:rx="2.4840367"
+         sodipodi:ry="2.4840367"
+         d="m 248.78583,276.00519 c 0,1.37189 -1.11215,2.48403 -2.48404,2.48403 -1.3719,0 -2.48404,-1.11214 -2.48404,-2.48403 0,-1.3719 1.11214,-2.48404 2.48404,-2.48404 1.37189,0 2.48404,1.11214 2.48404,2.48404 z"
+         transform="translate(45.476978,36.305146)" />
+      <text
+         sodipodi:linespacing="125%"
+         id="text3025"
+         y="272.75684"
+         x="256.04684"
+         style="font-size:10px;font-style:normal;font-weight:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;font-family:Sans"
+         xml:space="preserve"><tspan
+           id="tspan3029"
+           y="272.75684"
+           x="256.04684"
+           sodipodi:role="line">Pelvis</tspan></text>
+      <text
+         sodipodi:linespacing="125%"
+         id="text3033"
+         y="194.03198"
+         x="254.5182"
+         style="font-size:10px;font-style:normal;font-weight:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;font-family:Sans"
+         xml:space="preserve"><tspan
+           y="194.03198"
+           x="254.5182"
+           id="tspan3035"
+           sodipodi:role="line">Spine</tspan></text>
+      <text
+         sodipodi:linespacing="125%"
+         id="text3037"
+         y="159.63763"
+         x="252.98958"
+         style="font-size:10px;font-style:normal;font-weight:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;font-family:Sans"
+         xml:space="preserve"><tspan
+           y="159.63763"
+           x="252.98958"
+           id="tspan3039"
+           sodipodi:role="line">Head</tspan></text>
+      <text
+         sodipodi:linespacing="125%"
+         id="text3041"
+         y="230.33714"
+         x="303.8168"
+         style="font-size:10px;font-style:normal;font-weight:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;font-family:Sans"
+         xml:space="preserve"><tspan
+           y="230.33714"
+           x="303.8168"
+           id="tspan3043"
+           sodipodi:role="line">Arm</tspan></text>
+      <text
+         sodipodi:linespacing="125%"
+         id="text3045"
+         y="310.59064"
+         x="301.90598"
+         style="font-size:10px;font-style:normal;font-weight:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;font-family:Sans"
+         xml:space="preserve"><tspan
+           y="310.59064"
+           x="301.90598"
+           id="tspan3047"
+           sodipodi:role="line">Leg</tspan></text>
+    </g>
+    <text
+       sodipodi:linespacing="125%"
+       id="text3049"
+       y="102.99821"
+       x="298.08438"
+       style="font-size:10px;font-style:normal;font-weight:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;font-family:Sans"
+       xml:space="preserve"><tspan
+         id="tspan3051"
+         y="102.99821"
+         x="298.08438"
+         sodipodi:role="line">Pelvis</tspan></text>
+    <text
+       sodipodi:linespacing="125%"
+       id="text3057"
+       y="193.95218"
+       x="392.85999"
+       style="font-size:10px;font-style:normal;font-weight:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;font-family:Sans"
+       xml:space="preserve"><tspan
+         y="193.95218"
+         x="392.85999"
+         id="tspan3059"
+         sodipodi:role="line">Head</tspan></text>
+    <text
+       sodipodi:linespacing="125%"
+       id="text3061"
+       y="195.09868"
+       x="316.0459"
+       style="font-size:10px;font-style:normal;font-weight:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;font-family:Sans"
+       xml:space="preserve"><tspan
+         y="195.09868"
+         x="316.0459"
+         id="tspan3063"
+         sodipodi:role="line">Arm</tspan></text>
+    <text
+       sodipodi:linespacing="125%"
+       id="text3053"
+       y="147.85847"
+       x="346.23648"
+       style="font-size:10px;font-style:normal;font-weight:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;font-family:Sans"
+       xml:space="preserve"><tspan
+         y="147.85847"
+         x="346.23648"
+         id="tspan3055"
+         sodipodi:role="line">Spine</tspan></text>
+    <text
+       sodipodi:linespacing="125%"
+       id="text3065"
+       y="147.73885"
+       x="260.63275"
+       style="font-size:10px;font-style:normal;font-weight:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;font-family:Sans"
+       xml:space="preserve"><tspan
+         y="147.73885"
+         x="260.63275"
+         id="tspan3067"
+         sodipodi:role="line">Leg</tspan></text>
+    <path
+       style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+       d="m 272.09755,137.39258 38.21594,-28.2798 43.56619,25.22252"
+       id="path3129"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+       d="m 327.89283,184.01604 33.63003,-29.80844 40.50891,25.98684"
+       id="path3131"
+       inkscape:connector-curvature="0" />
+    <text
+       sodipodi:linespacing="125%"
+       id="text5122"
+       y="63.800404"
+       x="300.70157"
+       style="font-size:10px;font-style:normal;font-weight:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;font-family:Sans"
+       xml:space="preserve"><tspan
+         id="tspan5126"
+         y="63.800404"
+         x="300.70157"
+         sodipodi:role="line">Root</tspan></text>
+    <text
+       sodipodi:linespacing="125%"
+       id="text5130"
+       y="291.58145"
+       x="329.14432"
+       style="font-size:10px;font-style:normal;font-weight:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;font-family:Sans"
+       xml:space="preserve"><tspan
+         y="291.58145"
+         x="329.14432"
+         id="tspan5132"
+         sodipodi:role="line">Root</tspan></text>
+    <text
+       sodipodi:linespacing="125%"
+       id="text5134"
+       y="290.80313"
+       x="56.859642"
+       style="font-size:10px;font-style:normal;font-weight:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;font-family:Sans"
+       xml:space="preserve"><tspan
+         y="290.80313"
+         x="56.859642"
+         id="tspan5136"
+         sodipodi:role="line">Root</tspan></text>
+    <path
+       inkscape:connector-curvature="0"
+       id="path5138"
+       d="m 311.62686,90.551568 0,-22.16525"
+       style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
+    <text
+       xml:space="preserve"
+       style="font-size:10px;font-style:normal;font-weight:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;font-family:Sans"
+       x="54.242455"
+       y="335.71423"
+       id="text3172"
+       sodipodi:linespacing="125%"><tspan
+         sodipodi:role="line"
+         x="54.242455"
+         y="335.71423"
+         id="tspan3174">Pelvis</tspan></text>
+    <text
+       xml:space="preserve"
+       style="font-size:10px;font-style:normal;font-weight:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;font-family:Sans"
+       x="148.91333"
+       y="426.66821"
+       id="text3176"
+       sodipodi:linespacing="125%"><tspan
+         sodipodi:role="line"
+         id="tspan3178"
+         x="148.91333"
+         y="426.66821">Head</tspan></text>
+    <text
+       xml:space="preserve"
+       style="font-size:10px;font-style:normal;font-weight:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;font-family:Sans"
+       x="72.099274"
+       y="427.8147"
+       id="text3180"
+       sodipodi:linespacing="125%"><tspan
+         sodipodi:role="line"
+         id="tspan3182"
+         x="72.099274"
+         y="427.8147">Arm</tspan></text>
+    <text
+       xml:space="preserve"
+       style="font-size:10px;font-style:normal;font-weight:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;font-family:Sans"
+       x="102.28986"
+       y="380.57449"
+       id="text3184"
+       sodipodi:linespacing="125%"><tspan
+         sodipodi:role="line"
+         id="tspan3186"
+         x="102.28986"
+         y="380.57449">Spine</tspan></text>
+    <text
+       xml:space="preserve"
+       style="font-size:10px;font-style:normal;font-weight:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;font-family:Sans"
+       x="16.686127"
+       y="380.45486"
+       id="text3188"
+       sodipodi:linespacing="125%"><tspan
+         sodipodi:role="line"
+         id="tspan3190"
+         x="16.686127"
+         y="380.45486">Leg</tspan></text>
+    <path
+       inkscape:connector-curvature="0"
+       id="path3192"
+       d="m 28.15094,370.10858 38.21594,-28.2798 43.56619,25.22252"
+       style="fill:none;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:1, 4;stroke-dashoffset:0" />
+    <path
+       inkscape:connector-curvature="0"
+       id="path3194"
+       d="m 83.94622,416.73204 33.63003,-29.80844 40.50891,25.98684"
+       style="fill:none;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:1, 4;stroke-dashoffset:0" />
+    <path
+       style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-end:url(#Arrow2Mend)"
+       d="m 121.39785,365.90483 c 0,0 -4.96808,-33.63004 -35.15868,-34.77652"
+       id="path3982"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-end:url(#Arrow2Mend)"
+       d="m 20.8899,367.43346 c 0,0 -4.20375,-34.01219 29.42628,-34.77651"
+       id="path3984"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-end:url(#Arrow2Mend)"
+       d="m 164.19971,415.2034 c 0,0 1.52864,-38.59811 -27.13332,-37.83379"
+       id="path3986"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-end:url(#Arrow2Mend)"
+       d="m 79.74246,417.87852 c 0,0 -8.78966,-38.98027 19.10798,-39.36243"
+       id="path3988"
+       inkscape:connector-curvature="0" />
+    <text
+       sodipodi:linespacing="125%"
+       id="text4804"
+       y="337.64984"
+       x="326.52713"
+       style="font-size:10px;font-style:normal;font-weight:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;font-family:Sans"
+       xml:space="preserve"><tspan
+         id="tspan4806"
+         y="337.64984"
+         x="326.52713"
+         sodipodi:role="line">Pelvis</tspan></text>
+    <text
+       sodipodi:linespacing="125%"
+       id="text4808"
+       y="428.60385"
+       x="421.3027"
+       style="font-size:10px;font-style:normal;font-weight:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;font-family:Sans"
+       xml:space="preserve"><tspan
+         y="428.60385"
+         x="421.3027"
+         id="tspan4810"
+         sodipodi:role="line">Head</tspan></text>
+    <text
+       sodipodi:linespacing="125%"
+       id="text4812"
+       y="429.75034"
+       x="344.48862"
+       style="font-size:10px;font-style:normal;font-weight:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;font-family:Sans"
+       xml:space="preserve"><tspan
+         y="429.75034"
+         x="344.48862"
+         id="tspan4814"
+         sodipodi:role="line">Arm</tspan></text>
+    <text
+       sodipodi:linespacing="125%"
+       id="text4816"
+       y="382.51013"
+       x="374.67923"
+       style="font-size:10px;font-style:normal;font-weight:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;font-family:Sans"
+       xml:space="preserve"><tspan
+         y="382.51013"
+         x="374.67923"
+         id="tspan4818"
+         sodipodi:role="line">Spine</tspan></text>
+    <text
+       sodipodi:linespacing="125%"
+       id="text4820"
+       y="382.3905"
+       x="289.0755"
+       style="font-size:10px;font-style:normal;font-weight:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;font-family:Sans"
+       xml:space="preserve"><tspan
+         y="382.3905"
+         x="289.0755"
+         id="tspan4822"
+         sodipodi:role="line">Leg</tspan></text>
+    <path
+       style="fill:none;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:1, 4;stroke-dashoffset:0"
+       d="m 300.54031,372.04421 38.21594,-28.2798 43.56619,25.22252"
+       id="path4824"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:1, 4;stroke-dashoffset:0"
+       d="m 356.33559,418.66767 33.63003,-29.80844 40.50891,25.98684"
+       id="path4826"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-end:url(#Arrow2Mend)"
+       d="m 323.88885,289.99516 c 0,0 -27.54265,43.32913 -27.92481,82.69155"
+       id="path4828"
+       inkscape:connector-curvature="0"
+       sodipodi:nodetypes="cc" />
+    <path
+       style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-end:url(#Arrow2Mend)"
+       d="m 354.56558,294.70096 c 18.53473,0.57324 34.64538,35.94821 34.26322,77.6036"
+       id="path4830"
+       inkscape:connector-curvature="0"
+       sodipodi:nodetypes="cc" />
+    <path
+       style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-end:url(#Arrow2Mend)"
+       d="m 355.01331,287.12333 c 62.29199,-11.46478 81.20326,81.74179 81.96758,129.12957"
+       id="path4832"
+       inkscape:connector-curvature="0"
+       sodipodi:nodetypes="cc" />
+    <path
+       style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-end:url(#Arrow2Mend)"
+       d="m 327.70578,296.87403 c -13.03513,36.78469 -7.75513,93.90861 14.88172,125.87558"
+       id="path4836"
+       inkscape:connector-curvature="0"
+       sodipodi:nodetypes="cc" />
+    <text
+       xml:space="preserve"
+       style="font-size:12px;font-style:normal;font-weight:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;font-family:Sans"
+       x="312.99045"
+       y="262.5433"
+       id="text5022"
+       sodipodi:linespacing="125%"><tspan
+         sodipodi:role="line"
+         x="312.99045"
+         y="262.5433"
+         id="tspan5030">Offset Matrices</tspan></text>
+    <text
+       xml:space="preserve"
+       style="font-size:12px;font-style:normal;font-weight:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;font-family:Sans"
+       x="74.542519"
+       y="38.309559"
+       id="text5034"
+       sodipodi:linespacing="125%"><tspan
+         sodipodi:role="line"
+         id="tspan5036"
+         x="74.542519"
+         y="38.309559">Model</tspan></text>
+    <text
+       xml:space="preserve"
+       style="font-size:12px;font-style:normal;font-weight:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;font-family:Sans"
+       x="299.99161"
+       y="38.309559"
+       id="text5038"
+       sodipodi:linespacing="125%"><tspan
+         sodipodi:role="line"
+         id="tspan5040"
+         x="299.99161"
+         y="38.309559">Bone Hierarchy</tspan></text>
+    <text
+       xml:space="preserve"
+       style="font-size:12px;font-style:normal;font-weight:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;font-family:Sans"
+       x="38.920315"
+       y="263.29245"
+       id="text5042"
+       sodipodi:linespacing="125%"><tspan
+         sodipodi:role="line"
+         id="tspan5044"
+         x="38.920315"
+         y="263.29245">Node Transformations</tspan></text>
+    <g
+       id="g5110"
+       transform="translate(-25.222526,2.2929569)">
+      <text
+         sodipodi:linespacing="125%"
+         id="text5082"
+         y="453.24557"
+         x="46.994602"
+         style="font-size:10px;font-style:normal;font-weight:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;font-family:Sans"
+         xml:space="preserve"><tspan
+           id="tspan5086"
+           y="453.24557"
+           x="46.994602"
+           sodipodi:role="line">FinalTransform         = Offset          x (Scale x Rot x Trans)         x (Scale x Rot x Trans)         x (Scale x Rot x Trans) </tspan></text>
+      <text
+         sodipodi:linespacing="125%"
+         id="text5090"
+         y="457.26581"
+         x="115.63354"
+         style="font-size:8px;font-style:normal;font-weight:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;font-family:Sans"
+         xml:space="preserve"><tspan
+           y="457.26581"
+           x="115.63354"
+           id="tspan5092"
+           sodipodi:role="line">Head</tspan></text>
+      <text
+         sodipodi:linespacing="125%"
+         id="text5098"
+         y="457.36346"
+         x="432.06158"
+         style="font-size:8px;font-style:normal;font-weight:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;font-family:Sans"
+         xml:space="preserve"><tspan
+           y="457.36346"
+           x="432.06158"
+           id="tspan5100"
+           sodipodi:role="line">Spine</tspan></text>
+      <text
+         xml:space="preserve"
+         style="font-size:8px;font-style:normal;font-weight:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;font-family:Sans"
+         x="304.03815"
+         y="457.26581"
+         id="text5102"
+         sodipodi:linespacing="125%"><tspan
+           sodipodi:role="line"
+           id="tspan5104"
+           x="304.03815"
+           y="457.26581">Head</tspan></text>
+      <text
+         sodipodi:linespacing="125%"
+         id="text5106"
+         y="457.26581"
+         x="174.86826"
+         style="font-size:8px;font-style:normal;font-weight:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;font-family:Sans"
+         xml:space="preserve"><tspan
+           y="457.26581"
+           x="174.86826"
+           id="tspan5108"
+           sodipodi:role="line">Head</tspan></text>
+      <text
+         sodipodi:linespacing="125%"
+         id="text5383"
+         y="457.26581"
+         x="558.59253"
+         style="font-size:8px;font-style:normal;font-weight:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;font-family:Sans"
+         xml:space="preserve"><tspan
+           y="457.26581"
+           x="558.59253"
+           id="tspan5385"
+           sodipodi:role="line">Pelvis</tspan></text>
+    </g>
+    <path
+       style="fill:none;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:1, 4;stroke-dashoffset:0"
+       d="m 67.784935,297.68201 0,25.98684"
+       id="path5159"
+       inkscape:connector-curvature="0" />
+    <path
+       inkscape:connector-curvature="0"
+       id="path5161"
+       d="m 340.06961,298.44633 0,25.98684"
+       style="fill:none;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:1, 4;stroke-dashoffset:0" />
+    <path
+       style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-end:url(#Arrow2Mend)"
+       d="m 58.4704,297.00642 c 20.254453,-17.96151 26.369005,-35.923 6.878872,-38.98027"
+       id="path5195"
+       inkscape:connector-curvature="0"
+       transform="translate(17.418549,29.719715)"
+       sodipodi:nodetypes="cc" />
+    <path
+       sodipodi:nodetypes="cc"
+       inkscape:connector-curvature="0"
+       id="path5381"
+       d="m 349.70149,296.32232 c -0.65158,-1.04253 25.97218,13.94397 2.37637,32.74583"
+       style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-end:url(#Arrow2Mend)" />
+  </g>
+</svg>

BIN
doc/AssimpDoc_Html/AssimpDoc.chm


+ 9 - 0
doc/dox.h

@@ -1690,3 +1690,12 @@ void xxxxImporter::InternReadFile( const std::string& pFile,
 
 
 @endcode
 @endcode
  */
  */
+
+ 
+ /**
+ @page AnimationOverview Animation Overview
+ \section Transformations
+ This diagram shows how you can calculate your transformationmatrices for an animated character:
+ <img src="AnimationOverview.png" />
+ 
+ **/

+ 0 - 1
include/assimp/postprocess.h

@@ -620,7 +620,6 @@ enum aiPostProcessSteps
 	aiProcess_FindInstances                  |  \
 	aiProcess_FindInstances                  |  \
 	aiProcess_ValidateDataStructure          |  \
 	aiProcess_ValidateDataStructure          |  \
 	aiProcess_OptimizeMeshes                 |  \
 	aiProcess_OptimizeMeshes                 |  \
-	aiProcess_Debone						 |  \
 	0 )
 	0 )
 
 
 
 

+ 1 - 1
revision.h

@@ -1 +1 @@
-#define SVNRevision  1261
+#define SVNRevision  1270 

+ 2 - 2
samples/SimpleOpenGL/CMakeLists.txt

@@ -27,7 +27,7 @@ ADD_EXECUTABLE( assimp_simpleogl
 	Sample_SimpleOpenGL.c
 	Sample_SimpleOpenGL.c
 )
 )
 
 
-SET_PROPERTY(TARGET assimp_simpleogl PROPERTY DEBUG_POSTFIX ${DEBUG_POSTFIX})
+SET_PROPERTY(TARGET assimp_simpleogl PROPERTY DEBUG_POSTFIX ${ASSIMP_DEBUG_POSTFIX})
 
 
 TARGET_LINK_LIBRARIES( assimp_simpleogl assimp ${OPENGL_LIBRARIES} ${GLUT_LIBRARIES} )
 TARGET_LINK_LIBRARIES( assimp_simpleogl assimp ${OPENGL_LIBRARIES} ${GLUT_LIBRARIES} )
 SET_TARGET_PROPERTIES( assimp_simpleogl PROPERTIES
 SET_TARGET_PROPERTIES( assimp_simpleogl PROPERTIES
@@ -35,5 +35,5 @@ SET_TARGET_PROPERTIES( assimp_simpleogl PROPERTIES
 )
 )
 
 
 INSTALL( TARGETS assimp_simpleogl
 INSTALL( TARGETS assimp_simpleogl
-	DESTINATION "${BIN_INSTALL_DIR}" COMPONENT assimp-dev
+	DESTINATION "${ASSIMP_BIN_INSTALL_DIR}" COMPONENT assimp-dev
 ) 
 ) 

+ 18 - 16
samples/SimpleTexturedOpenGL/CMakeLists.txt

@@ -1,7 +1,21 @@
+FIND_PACKAGE(OpenGL)
+FIND_PACKAGE(GLUT)
+
+IF ( NOT GLUT_FOUND )
+	IF ( MSVC )
+		SET ( GLUT_FOUND 1 )
+		SET ( GLUT_INCLUDE_DIR ${Assimp_SOURCE_DIR}/samples/glut/ )
+		SET ( GLUT_LIBRARIES ${Assimp_SOURCE_DIR}/samples/glut/glut32.lib )
+	ELSE ( MSVC )
+		MESSAGE( WARNING "Please install glut." )
+	ENDIF ( MSVC )
+ENDIF ( NOT GLUT_FOUND )
+
 INCLUDE_DIRECTORIES(
 INCLUDE_DIRECTORIES(
 	${Assimp_SOURCE_DIR}/include
 	${Assimp_SOURCE_DIR}/include
 	${Assimp_SOURCE_DIR}/code
 	${Assimp_SOURCE_DIR}/code
-	${Assimp_SOURCE_DIR}/samples/glut/
+	${OPENGL_INCLUDE_DIR}
+	${GLUT_INCLUDE_DIR}
 	${Assimp_SOURCE_DIR}/samples/DevIL/include/
 	${Assimp_SOURCE_DIR}/samples/DevIL/include/
 )
 )
 
 
@@ -17,26 +31,14 @@ ADD_EXECUTABLE( assimp_simpletexturedogl WIN32
 	SimpleTexturedOpenGL/src/model_loading.cpp
 	SimpleTexturedOpenGL/src/model_loading.cpp
 )
 )
 
 
-SET_PROPERTY(TARGET assimp_simpletexturedogl PROPERTY DEBUG_POSTFIX ${DEBUG_POSTFIX})
-
-IF( WIN32 )
-	SET( PSDK_PATH "C:/Program Files/Microsoft Platform SDK/Bin" )
-	SET( PSDK_INC "C:/Program Files/Microsoft Platform SDK/Include" )
-	
-	FIND_LIBRARY( WIN32_COMCTRL comctl32.lib 
-		PATHS 
-			"C:/Programme/Microsoft Platform SDK for Windows Server 2003 R2/Lib" 	
-		DOC "Path to psdk"
-	) 
-ENDIF( WIN32 )
-
+SET_PROPERTY(TARGET assimp_simpletexturedogl PROPERTY DEBUG_POSTFIX ${ASSIMP_DEBUG_POSTFIX})
 
 
-TARGET_LINK_LIBRARIES( assimp_simpletexturedogl assimp opengl32.lib glu32.lib comctl32.lib devil.lib )
+TARGET_LINK_LIBRARIES( assimp_simpletexturedogl assimp ${OPENGL_LIBRARIES} ${GLUT_LIBRARIES} DevIL.lib )
 
 
 SET_TARGET_PROPERTIES( assimp_simpletexturedogl PROPERTIES
 SET_TARGET_PROPERTIES( assimp_simpletexturedogl PROPERTIES
 	OUTPUT_NAME assimp_simpletexturedogl
 	OUTPUT_NAME assimp_simpletexturedogl
 )
 )
 
 
 INSTALL( TARGETS assimp_simpletexturedogl
 INSTALL( TARGETS assimp_simpletexturedogl
-	DESTINATION "${BIN_INSTALL_DIR}" COMPONENT assimp-dev
+	DESTINATION "${ASSIMP_BIN_INSTALL_DIR}" COMPONENT assimp-dev
 ) 
 ) 

+ 3 - 1
samples/SimpleTexturedOpenGL/SimpleTexturedOpenGL/src/model_loading.cpp

@@ -410,7 +410,9 @@ void recursive_render (const struct aiScene *sc, const struct aiNode* nd, float
 	unsigned int n=0, t;
 	unsigned int n=0, t;
 	aiMatrix4x4 m = nd->mTransformation;
 	aiMatrix4x4 m = nd->mTransformation;
 
 
-	m.Scaling(aiVector3D(scale, scale, scale), m);
+	aiMatrix4x4 m2;
+	aiMatrix4x4::Scaling(aiVector3D(scale, scale, scale), m2);
+	m = m * m2;
 
 
 	// update transform
 	// update transform
 	m.Transpose();
 	m.Transpose();

+ 1 - 0
scripts/IFCImporter/entitylist.txt

@@ -94,6 +94,7 @@ IfcSurfaceStyleRendering
 IfcSurfaceStyleShading
 IfcSurfaceStyleShading
 IfcSurfaceStyleWithTextures
 IfcSurfaceStyleWithTextures
 IfcSweptAreaSolid
 IfcSweptAreaSolid
+IfcSweptDiskSolid
 IfcTopologicalRepresentationItem
 IfcTopologicalRepresentationItem
 IfcTrimmedCurve
 IfcTrimmedCurve
 IfcUnit
 IfcUnit

+ 3 - 29
test/CMakeLists.txt

@@ -219,35 +219,9 @@ add_executable(  unit
 )
 )
 
 
 IF( WIN32 )
 IF( WIN32 )
-	SET( PSDK_PATH "C:/Program Files/Microsoft Platform SDK/Bin" )
-	SET( PSDK_INC "C:/Program Files/Microsoft Platform SDK/Include" )
-
-	FIND_PATH(DX9_INCLUDE_PATH d3d9.h
-		PATHS
-			"$ENV{DXSDK_DIR}/Include"
-			"$ENV{PROGRAMFILES}/Microsoft DirectX SDK/Include"
-		DOC "The directory where D3D9.h resides")
-
-	FIND_LIBRARY(D3D9_LIBRARY d3d9.lib
-		PATHS
-			"$ENV{DXSDK_DIR}/Lib/x86"
-			"$ENV{PROGRAMFILES}/Microsoft DirectX SDK/Lib/x86"
-		DOC "The directory where d3d9.lib resides")
-
-	FIND_LIBRARY(D3DX9_LIBRARY d3dx9.lib
-		PATHS
-			"$ENV{DXSDK_DIR}/Lib/x86"
-			"$ENV{PROGRAMFILES}/Microsoft DirectX SDK/Lib/x86"
-		DOC "The directory where d3dx9.lib resides")
-
-	SET( DX9_LIBRARIES ${D3D9_LIBRARY} ${D3DX9_LIBRARY} )
-	
-	FIND_LIBRARY( WIN32_COMCTRL comctl32.lib 
-		PATHS 
-			"C:/Programme/Microsoft Platform SDK for Windows Server 2003 R2/Lib" 	
-		DOC "Path to psdk"
-	) 
+	FIND_PACKAGE(DirectX REQUIRED)
 ENDIF( WIN32 )
 ENDIF( WIN32 )
+SET_PROPERTY(TARGET assimp PROPERTY DEBUG_POSTFIX ${ASSIMP_DEBUG_POSTFIX})
 
 
 # TODO: Port to non-Windows platforms.
 # TODO: Port to non-Windows platforms.
-target_link_libraries ( unit assimp ${DX9_LIBRARIES} comctl32.lib Winmm.lib ) 
+target_link_libraries ( unit assimp ${DirectX_LIBRARY} ${DirectX_D3DX9_LIBRARY} comctl32.lib Winmm.lib ) 

+ 2 - 2
tools/assimp_cmd/CMakeLists.txt

@@ -17,7 +17,7 @@ ADD_EXECUTABLE( assimp_cmd
 	Export.cpp
 	Export.cpp
 )
 )
 
 
-SET_PROPERTY(TARGET assimp_cmd PROPERTY DEBUG_POSTFIX ${DEBUG_POSTFIX})
+SET_PROPERTY(TARGET assimp_cmd PROPERTY DEBUG_POSTFIX ${ASSIMP_DEBUG_POSTFIX})
 
 
 TARGET_LINK_LIBRARIES( assimp_cmd assimp ${ZLIB_LIBRARIES})
 TARGET_LINK_LIBRARIES( assimp_cmd assimp ${ZLIB_LIBRARIES})
 SET_TARGET_PROPERTIES( assimp_cmd PROPERTIES
 SET_TARGET_PROPERTIES( assimp_cmd PROPERTIES
@@ -25,5 +25,5 @@ SET_TARGET_PROPERTIES( assimp_cmd PROPERTIES
 )
 )
 
 
 INSTALL( TARGETS assimp_cmd
 INSTALL( TARGETS assimp_cmd
-	DESTINATION "${BIN_INSTALL_DIR}" COMPONENT assimp-bin
+	DESTINATION "${ASSIMP_BIN_INSTALL_DIR}" COMPONENT assimp-bin
 ) 
 ) 

+ 7 - 34
tools/assimp_view/CMakeLists.txt

@@ -1,8 +1,10 @@
+FIND_PACKAGE(DirectX REQUIRED)
+
 # Make sure the compiler can find include files from our Hello library.
 # Make sure the compiler can find include files from our Hello library.
 include_directories (
 include_directories (
 	${Assimp_SOURCE_DIR}/include
 	${Assimp_SOURCE_DIR}/include
 	${Assimp_SOURCE_DIR}/code
 	${Assimp_SOURCE_DIR}/code
-	${DX9_INCLUDE_PATH}
+	${DirectX_INCLUDE_DIR}
 )
 )
 
 
 # Make sure the linker can find the Hello library once it is built.
 # Make sure the linker can find the Hello library once it is built.
@@ -41,45 +43,16 @@ add_executable(  assimp_viewer WIN32
 	txi.bmp
 	txi.bmp
 )
 )
 
 
-SET_PROPERTY(TARGET assimp_viewer PROPERTY DEBUG_POSTFIX ${DEBUG_POSTFIX})
+SET_PROPERTY(TARGET assimp_viewer PROPERTY DEBUG_POSTFIX ${ASSIMP_DEBUG_POSTFIX})
 
 
 IF( WIN32 )
 IF( WIN32 )
-	SET( PSDK_PATH "C:/Program Files/Microsoft Platform SDK/Bin" )
-	SET( PSDK_INC "C:/Program Files/Microsoft Platform SDK/Include" )
-
-	FIND_PATH(DX9_INCLUDE_PATH d3d9.h
-		PATHS
-			"$ENV{DXSDK_DIR}/Include"
-			"$ENV{PROGRAMFILES}/Microsoft DirectX SDK/Include"
-		DOC "The directory where D3D9.h resides")
-
-
-	FIND_LIBRARY(D3D9_LIBRARY d3d9.lib
-		PATHS
-			"$ENV{DXSDK_DIR}/Lib/x86"
-			"$ENV{PROGRAMFILES}/Microsoft DirectX SDK/Lib/x86"
-		DOC "The directory where d3d9.lib resides")
-
-	FIND_LIBRARY(D3DX9_LIBRARY d3dx9.lib
-		PATHS
-			"$ENV{DXSDK_DIR}/Lib/x86"
-			"$ENV{PROGRAMFILES}/Microsoft DirectX SDK/Lib/x86"
-		DOC "The directory where d3dx9.lib resides")
-
-	SET( DX9_LIBRARIES ${D3D9_LIBRARY} ${D3DX9_LIBRARY} )
-	
-	FIND_LIBRARY( WIN32_COMCTRL comctl32.lib 
-		PATHS 
-			"C:/Programme/Microsoft Platform SDK for Windows Server 2003 R2/Lib" 	
-		DOC "Path to psdk"
-	)
 	ADD_DEFINITIONS( -D_SCL_SECURE_NO_WARNINGS )
 	ADD_DEFINITIONS( -D_SCL_SECURE_NO_WARNINGS )
 	ADD_DEFINITIONS( -D_CRT_SECURE_NO_WARNINGS )
 	ADD_DEFINITIONS( -D_CRT_SECURE_NO_WARNINGS )
 ENDIF( WIN32 )
 ENDIF( WIN32 )
 
 
 # Link the executable to the Hello library.
 # Link the executable to the Hello library.
-target_link_libraries ( assimp_viewer assimp ${DX9_LIBRARIES} comctl32.lib Winmm.lib  ) 
+target_link_libraries ( assimp_viewer assimp ${DirectX_LIBRARY} ${DirectX_D3DX9_LIBRARY} comctl32.lib Winmm.lib  ) 
 
 
 INSTALL( TARGETS assimp_viewer
 INSTALL( TARGETS assimp_viewer
-	DESTINATION "${BIN_INSTALL_DIR}" COMPONENT assimp-dev
-) 
+	DESTINATION "${ASSIMP_BIN_INSTALL_DIR}" COMPONENT assimp-dev
+)